[med-svn] [tantan] 08/14: Imported Upstream version 13

Sascha Steinbiss sascha at steinbiss.name
Mon Feb 15 22:25:00 UTC 2016


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

sascha-guest pushed a commit to branch master
in repository tantan.

commit 2fac365ae6514e58490ff88277935ca36c429a04
Author: Sascha Steinbiss <sascha at steinbiss.name>
Date:   Thu Feb 11 09:45:33 2016 +0000

    Imported Upstream version 13
---
 COPYING.txt                     |  674 ++++++++++++++++++
 ChangeLog.txt                   |   84 +++
 Makefile                        |   25 +
 README.html                     |  523 ++++++++++++++
 README.txt                      |  187 +++++
 debian/changelog                |    7 -
 debian/compat                   |    1 -
 debian/control                  |   20 -
 debian/copyright                |   31 -
 debian/createmanpages           |   16 -
 debian/lintian-overrides        |    1 -
 debian/manpages                 |    1 -
 debian/rules                    |   16 -
 debian/source/format            |    1 -
 debian/tantan.1                 |   58 --
 debian/upstream/edam            |   13 -
 debian/upstream/metadata        |   11 -
 debian/watch                    |    2 -
 src/CA_code/lambda_calculator.c |  465 ++++++++++++
 src/CA_code/lambda_calculator.h |   10 +
 src/CA_code/lubksb.c            |   24 +
 src/CA_code/ludcmp.c            |   61 ++
 src/CA_code/nrutil.c            |  239 +++++++
 src/CA_code/nrutil.h            |   19 +
 src/Makefile                    |   27 +
 src/mcf_alphabet.cc             |   82 +++
 src/mcf_alphabet.hh             |   52 ++
 src/mcf_fasta_sequence.cc       |  113 +++
 src/mcf_fasta_sequence.hh       |   29 +
 src/mcf_score_matrix.cc         |  167 +++++
 src/mcf_score_matrix.hh         |   60 ++
 src/mcf_score_matrix_probs.cc   |   45 ++
 src/mcf_score_matrix_probs.hh   |   55 ++
 src/mcf_tantan_options.cc       |  165 +++++
 src/mcf_tantan_options.hh       |   31 +
 src/mcf_util.cc                 |   23 +
 src/mcf_util.hh                 |   46 ++
 src/tantan.cc                   |  462 ++++++++++++
 src/tantan.hh                   |  120 ++++
 src/tantan_app.cc               |  293 ++++++++
 src/version.hh                  |    1 +
 test/atMask.mat                 |   14 +
 test/hg19_chrM.fa               |  333 +++++++++
 test/panda.fastq                |  400 +++++++++++
 test/tantan_test.out            | 1489 +++++++++++++++++++++++++++++++++++++++
 test/tantan_test.sh             |   31 +
 test/titin_human.fa             |  688 ++++++++++++++++++
 47 files changed, 7037 insertions(+), 178 deletions(-)

diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU 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
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog.txt b/ChangeLog.txt
new file mode 100644
index 0000000..e59c952
--- /dev/null
+++ b/ChangeLog.txt
@@ -0,0 +1,84 @@
+2012-10-16  Martin C. Frith  <Martin C. Frith>
+
+	* README.txt:
+	Expanded the documentation: installation & FAQ
+	[946a951b1a06] [tip]
+
+	* src/CA_code/nrutil.c:
+	Just fixed a compiler warning
+	[fa79ce69a581]
+
+2012-08-08  Martin C. Frith  <Martin C. Frith>
+
+	* Makefile:
+	Avoid getting extra, unwanted files in the zip archive
+	[d1d55af0e693]
+
+	* test/tantan_test.sh:
+	Made the test script less likely to use an unexpected version of
+	tantan
+	[894f9fc63c3e]
+
+	* Makefile, README.txt:
+	Added "make install", and HTML-ization of the README
+	[674f2f7da185]
+
+	* src/Makefile:
+	Made the Makefile check the version number
+	[ea0be7d72912]
+
+	* README.txt:
+	Converted the README to reStructuredText
+	[25b631ab86b4]
+
+	* src/Makefile:
+	Generalized the Makefile
+	[9c324ee14279]
+
+2011-07-07  Martin C. Frith  <Martin C. Frith>
+
+	* README.txt:
+	Just changed the documentation a bit
+	[2d6dfe34fe33]
+
+2011-03-22  Martin C. Frith  <Martin C. Frith>
+
+	* README.txt, src/mcf_tantan_options.cc, src/mcf_tantan_options.hh,
+	src/tantan_app.cc:
+	Added BED output option. Clarified the README (thanks: Joe Ryan).
+	[db4af8e37a20]
+
+2011-01-07  Martin C. Frith  <Martin C. Frith>
+
+	* README.txt, src/mcf_fasta_sequence.cc, src/mcf_fasta_sequence.hh,
+	test/panda.fastq, test/tantan_test.out, test/tantan_test.sh:
+	Made tantan work on fastq format, and improved the README
+	[e7d454a5982d]
+
+2010-11-16  Martin C. Frith  <Martin C. Frith>
+
+	* README.txt, src/Makefile, src/mcf_alphabet.cc, src/mcf_alphabet.hh,
+	src/mcf_tantan_options.cc:
+	Fixed compile error with g++ 4.0.1
+	[97a2b94e5835]
+
+2010-10-13  Martin C. Frith  <Martin C. Frith>
+
+	* src/tantan_app.cc:
+	Boost the version number to 1
+	[c5a20b01a563]
+
+	* COPYING.txt, README.txt, src/CA_code/lambda_calculator.c,
+	src/CA_code/lambda_calculator.h, src/CA_code/lubksb.c,
+	src/CA_code/ludcmp.c, src/CA_code/nrutil.c, src/CA_code/nrutil.h,
+	src/Makefile, src/mcf_alphabet.cc, src/mcf_alphabet.hh,
+	src/mcf_fasta_sequence.cc, src/mcf_fasta_sequence.hh,
+	src/mcf_score_matrix.cc, src/mcf_score_matrix.hh,
+	src/mcf_score_matrix_probs.cc, src/mcf_score_matrix_probs.hh,
+	src/mcf_tantan_options.cc, src/mcf_tantan_options.hh,
+	src/mcf_util.cc, src/mcf_util.hh, src/tantan.cc, src/tantan.hh,
+	src/tantan_app.cc, test/atMask.mat, test/hg19_chrM.fa,
+	test/tantan_test.out, test/tantan_test.sh, test/titin_human.fa:
+	First commit
+	[4f9b0ba31588]
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3056fd3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,25 @@
+CXXFLAGS = -O3
+all:
+	@cd src && ${MAKE} CXXFLAGS="${CXXFLAGS}"
+
+prefix = /usr/local
+exec_prefix = ${prefix}
+bindir = ${exec_prefix}/bin
+install: all
+	mkdir -p ${bindir}
+	cp src/tantan ${bindir}
+
+clean:
+	@cd src && ${MAKE} clean
+
+README.html: README.txt
+	rst2html README.txt > README.html
+
+log:
+	hg log --style changelog > ChangeLog.txt
+
+distdir = tantan-`hg id -n`
+dist: README.html log
+	@cd src && ${MAKE} version.hh
+	rsync -rC --exclude tantan src test Makefile *.txt README.html ${distdir}
+	zip -qrm ${distdir} ${distdir}
diff --git a/README.html b/README.html
new file mode 100644
index 0000000..890a181
--- /dev/null
+++ b/README.html
@@ -0,0 +1,523 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
+<title>tantan</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger at python.org)
+:Id: $Id: html4css1.css 5951 2009-05-18 18:03:10Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left{
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: left }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="tantan">
+<h1 class="title">tantan</h1>
+
+<div class="section" id="introduction">
+<h1>Introduction</h1>
+<p>tantan is a tool for masking simple regions (low complexity and
+short-period tandem repeats) in biological sequences.</p>
+<p>The aim of tantan is to prevent false predictions when searching for
+homologous regions between two sequences.  Simple repeats often align
+strongly to each other, causing false homology predictions.</p>
+</div>
+<div class="section" id="setup">
+<h1>Setup</h1>
+<p>You need to have a C++ compiler.  On Linux, you might need to install
+a package called "g++".  On Mac, you might need to install
+command-line developer tools.  On Windows, you might need to install
+Cygwin.</p>
+<p>Using the command line, go into the tantan directory.  To compile it,
+type:</p>
+<pre class="literal-block">
+make
+</pre>
+<p>Optionally, copy tantan to a standard "bin" directory (using "sudo" to
+request administrator permissions):</p>
+<pre class="literal-block">
+sudo make install
+</pre>
+<p>Or copy it to your personal bin directory:</p>
+<pre class="literal-block">
+make install prefix=~
+</pre>
+<p>You might need to log out and back in for your computer to recognize
+the new program.</p>
+</div>
+<div class="section" id="normal-usage">
+<h1>Normal usage</h1>
+<ul>
+<li><p class="first">Suppose you have some nucleotide sequences (DNA or RNA) in a
+FASTA-format file called "ntseqs.fa".  You can identify simple
+repeats like this:</p>
+<pre class="literal-block">
+tantan ntseqs.fa > masked.fa
+</pre>
+<p>This will create a new FASTA file called "masked.fa" that replaces
+all masked regions with lowercase letters.  (tantan also works on
+FASTQ-format, though it does not use the quality data.)</p>
+</li>
+<li><p class="first">To mask proteins effectively, tantan needs to use different
+algorithm parameters than for nucleotides.  You have to tell it when
+you have proteins, using the "-p" option:</p>
+<pre class="literal-block">
+tantan -p aaseqs.fa > masked.fa
+</pre>
+<p>If you omit "-p" and the sequences look proteinaceous, tantan will
+print a warning message.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="advanced-usage">
+<h1>Advanced usage</h1>
+<ul>
+<li><p class="first">By default, tantan indicates repetitive regions with lowercase
+letters.  You can make it replace repetitive letters with (say) "N"
+by using the "-x" option:</p>
+<pre class="literal-block">
+tantan -x N ntseqs.fa > masked.fa
+</pre>
+</li>
+<li><p class="first">By default, tantan does not preserve lowercase letters in the input
+sequences.  You can tell it to preserve them by using the "-c"
+option.  So the output will have the union of the lowercase in the
+input and the lowercase assigned by tantan:</p>
+<pre class="literal-block">
+tantan -c ntseqs.fa > masked.fa
+</pre>
+</li>
+<li><p class="first">tantan's masking rate is usually OK, but you can alter it by
+changing the "-r" parameter from its default value of 0.005.  Higher
+values increase the amount of masking, and lower values decrease it.
+This increases the masking rate:</p>
+<pre class="literal-block">
+tantan -r 0.02 ntseqs.fa > masked.fa
+</pre>
+</li>
+<li><p class="first">Finally, to mask extremely AT-rich DNA, you should change tantan's
+scoring matrix.  The "test" directory contains a matrix "atMask.mat"
+that works well for DNA with ~80% A+T, such as Plasmodium and
+Dictyostelium genomes.  We recommend masking such DNA like this:</p>
+<pre class="literal-block">
+tantan -m atMask.mat -r 0.01 atrich.fa > masked.fa
+</pre>
+</li>
+</ul>
+<p>The preceding examples cover all of tantan's options that you should
+ever need.</p>
+</div>
+<div class="section" id="recommendations-for-homology-search">
+<h1>Recommendations for homology search</h1>
+<ol class="arabic simple">
+<li>Mask <em>both</em> (sets of) sequences.</li>
+<li>If for some reason you wish to mask only one (set of) sequence(s),
+increase "-r" to 0.02 (0.05 for AT-rich DNA).</li>
+<li>For DNA-versus-protein alignment, increase "-r" for the proteins to
+0.02.  If for some reason you mask only one (set of) sequence(s),
+make sure it's the proteins.</li>
+<li>Some alignment tools exclude lowercase from their initial seeding
+phase, but treat lowercase identically to uppercase during their
+subsequent extension phase.  Unfortunately, this does not reliably
+prevent false homology predictions.  It is OK to re-align without
+masking after homology has been decided: FASTA and LAST can do
+this.</li>
+</ol>
+<p>For more information, please read the tantan publication (see below).</p>
+</div>
+<div class="section" id="faq">
+<h1>FAQ</h1>
+<div class="section" id="why-does-tantan-sometimes-mask-isolated-bases">
+<h2>Why does tantan sometimes mask isolated bases?</h2>
+<p>This happens when a region is borderline repetitive, and a single base
+creeps just over the threshold.  Don't worry about it, it's not a
+problem (at least for tantan's aim of preventing false homology).</p>
+</div>
+<div class="section" id="does-tantan-mask-functional-sequence">
+<h2>Does tantan mask functional sequence?</h2>
+<p>Of course.  Proteins and protein-coding exons can contain simple
+repeats.  Repeats can be functional.  If we want to avoid false
+homology we have to mask them.  Remember that tantan merely lowercases
+repeats, so it's easy to lift the masking after determining homology.</p>
+</div>
+</div>
+<div class="section" id="options">
+<h1>Options</h1>
+<table class="docutils option-list" frame="void" rules="none">
+<col class="option" />
+<col class="description" />
+<tbody valign="top">
+<tr><td class="option-group">
+<kbd><span class="option">-p</span></kbd></td>
+<td>interpret the sequences as proteins</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-x</span></kbd></td>
+<td>letter to use for masking, instead of lowercase</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-c</span></kbd></td>
+<td>preserve uppercase/lowercase in non-masked regions</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-m</span></kbd></td>
+<td>file for letter pair scores (scoring matrix)</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-r</span></kbd></td>
+<td>probability of a repeat starting per position</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-e</span></kbd></td>
+<td>probability of a repeat ending per position</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-w</span></kbd></td>
+<td>maximum tandem repeat period to consider</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-d</span></kbd></td>
+<td>probability decay per period (period-(i+1) / period-i)</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-a</span></kbd></td>
+<td>gap existence cost</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-b</span></kbd></td>
+<td>gap extension cost</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-s</span></kbd></td>
+<td>minimum repeat probability for masking</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-f</span></kbd></td>
+<td>output type: 0=masked sequence, 1=repeat probabilities,
+2=repeat counts, 3=BED</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">-h</span>, <span class="option">--help</span></kbd></td>
+<td>show help message, then exit</td></tr>
+<tr><td class="option-group">
+<kbd><span class="option">--version</span></kbd></td>
+<td>show version information, then exit</td></tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="advanced-issues">
+<h1>Advanced issues</h1>
+<p>When tantan masks tandem repeats, it tends to leave the first
+(left-most) repeat unit unmasked.  This sometimes allows us to find
+homologs we would otherwise miss:</p>
+<pre class="literal-block">
+TGCAAGCTA TTAGGCTTAGGTCAGTGC ttaagcttaggtcagtgc AACATA
+||| ||| | |||||||||||||||||| ||| |||||||||||||| ||| ||
+TGCTAGCAA TTAGGCTTAGGTCAGTGC ttaggcttaggtcagtgc AACGTA
+</pre>
+<p>However, there is a danger of non-equivalent repeat units being
+unmasked.  This happens especially if we mask DNA on one strand but
+align it on the other strand:</p>
+<pre class="literal-block">
+                   TGCAAGCTA TTAGGCTTAGGTCAGTGC ttaagcttaggtcagtgc AACATA
+                             ||||||||||||||||||
+TGCTAGCAA ttaggcttaggtcagtgc TTAGGCTTAGGTCAGTGC AACGTA
+</pre>
+<p>(My thanks to Junko Tsuji and Paul Horton for finding these issues.)</p>
+</div>
+<div class="section" id="miscellaneous">
+<h1>Miscellaneous</h1>
+<p>tantan is distributed under the GNU General Public License, either
+version 3 of the License, or (at your option) any later version.  For
+details, see COPYING.txt.</p>
+<p>If you use tantan in your research, please cite:
+"A new repeat-masking method enables specific detection of homologous
+sequences", MC Frith, Nucleic Acids Research 2011 39(4):e23.</p>
+<p>tantan's website is: <a class="reference external" href="http://www.cbrc.jp/tantan/">http://www.cbrc.jp/tantan/</a></p>
+<p>If you have any questions, comments, or problems concerning tantan,
+please email: tantan (ATmark) cbrc (dot) jp.</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..f168aa6
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,187 @@
+tantan
+======
+
+Introduction
+------------
+
+tantan is a tool for masking simple regions (low complexity and
+short-period tandem repeats) in biological sequences.
+
+The aim of tantan is to prevent false predictions when searching for
+homologous regions between two sequences.  Simple repeats often align
+strongly to each other, causing false homology predictions.
+
+Setup
+-----
+
+You need to have a C++ compiler.  On Linux, you might need to install
+a package called "g++".  On Mac, you might need to install
+command-line developer tools.  On Windows, you might need to install
+Cygwin.
+
+Using the command line, go into the tantan directory.  To compile it,
+type::
+
+  make
+
+Optionally, copy tantan to a standard "bin" directory (using "sudo" to
+request administrator permissions)::
+
+  sudo make install
+
+Or copy it to your personal bin directory::
+
+  make install prefix=~
+
+You might need to log out and back in for your computer to recognize
+the new program.
+
+Normal usage
+------------
+
+* Suppose you have some nucleotide sequences (DNA or RNA) in a
+  FASTA-format file called "ntseqs.fa".  You can identify simple
+  repeats like this::
+
+    tantan ntseqs.fa > masked.fa
+
+  This will create a new FASTA file called "masked.fa" that replaces
+  all masked regions with lowercase letters.  (tantan also works on
+  FASTQ-format, though it does not use the quality data.)
+
+* To mask proteins effectively, tantan needs to use different
+  algorithm parameters than for nucleotides.  You have to tell it when
+  you have proteins, using the "-p" option::
+
+    tantan -p aaseqs.fa > masked.fa
+
+  If you omit "-p" and the sequences look proteinaceous, tantan will
+  print a warning message.
+
+Advanced usage
+--------------
+
+* By default, tantan indicates repetitive regions with lowercase
+  letters.  You can make it replace repetitive letters with (say) "N"
+  by using the "-x" option::
+
+    tantan -x N ntseqs.fa > masked.fa
+
+* By default, tantan does not preserve lowercase letters in the input
+  sequences.  You can tell it to preserve them by using the "-c"
+  option.  So the output will have the union of the lowercase in the
+  input and the lowercase assigned by tantan::
+
+    tantan -c ntseqs.fa > masked.fa
+
+* tantan's masking rate is usually OK, but you can alter it by
+  changing the "-r" parameter from its default value of 0.005.  Higher
+  values increase the amount of masking, and lower values decrease it.
+  This increases the masking rate::
+
+    tantan -r 0.02 ntseqs.fa > masked.fa
+
+* Finally, to mask extremely AT-rich DNA, you should change tantan's
+  scoring matrix.  The "test" directory contains a matrix "atMask.mat"
+  that works well for DNA with ~80% A+T, such as Plasmodium and
+  Dictyostelium genomes.  We recommend masking such DNA like this::
+
+    tantan -m atMask.mat -r 0.01 atrich.fa > masked.fa
+
+The preceding examples cover all of tantan's options that you should
+ever need.
+
+Recommendations for homology search
+-----------------------------------
+
+1) Mask *both* (sets of) sequences.
+
+2) If for some reason you wish to mask only one (set of) sequence(s),
+   increase "-r" to 0.02 (0.05 for AT-rich DNA).
+
+3) For DNA-versus-protein alignment, increase "-r" for the proteins to
+   0.02.  If for some reason you mask only one (set of) sequence(s),
+   make sure it's the proteins.
+
+4) Some alignment tools exclude lowercase from their initial seeding
+   phase, but treat lowercase identically to uppercase during their
+   subsequent extension phase.  Unfortunately, this does not reliably
+   prevent false homology predictions.  It is OK to re-align without
+   masking after homology has been decided: FASTA and LAST can do
+   this.
+
+For more information, please read the tantan publication (see below).
+
+FAQ
+---
+
+Why does tantan sometimes mask isolated bases?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This happens when a region is borderline repetitive, and a single base
+creeps just over the threshold.  Don't worry about it, it's not a
+problem (at least for tantan's aim of preventing false homology).
+
+Does tantan mask functional sequence?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Of course.  Proteins and protein-coding exons can contain simple
+repeats.  Repeats can be functional.  If we want to avoid false
+homology we have to mask them.  Remember that tantan merely lowercases
+repeats, so it's easy to lift the masking after determining homology.
+
+Options
+-------
+
+-p  interpret the sequences as proteins
+-x  letter to use for masking, instead of lowercase
+-c  preserve uppercase/lowercase in non-masked regions
+-m  file for letter pair scores (scoring matrix)
+-r  probability of a repeat starting per position
+-e  probability of a repeat ending per position
+-w  maximum tandem repeat period to consider
+-d  probability decay per period (period-(i+1) / period-i)
+-a  gap existence cost
+-b  gap extension cost
+-s  minimum repeat probability for masking
+-f  output type: 0=masked sequence, 1=repeat probabilities,
+                 2=repeat counts, 3=BED
+-h, --help  show help message, then exit
+--version   show version information, then exit
+
+Advanced issues
+---------------
+
+When tantan masks tandem repeats, it tends to leave the first
+(left-most) repeat unit unmasked.  This sometimes allows us to find
+homologs we would otherwise miss::
+
+  TGCAAGCTA TTAGGCTTAGGTCAGTGC ttaagcttaggtcagtgc AACATA
+  ||| ||| | |||||||||||||||||| ||| |||||||||||||| ||| ||
+  TGCTAGCAA TTAGGCTTAGGTCAGTGC ttaggcttaggtcagtgc AACGTA
+
+However, there is a danger of non-equivalent repeat units being
+unmasked.  This happens especially if we mask DNA on one strand but
+align it on the other strand::
+
+                     TGCAAGCTA TTAGGCTTAGGTCAGTGC ttaagcttaggtcagtgc AACATA
+                               ||||||||||||||||||
+  TGCTAGCAA ttaggcttaggtcagtgc TTAGGCTTAGGTCAGTGC AACGTA
+
+(My thanks to Junko Tsuji and Paul Horton for finding these issues.)
+
+Miscellaneous
+-------------
+
+tantan is distributed under the GNU General Public License, either
+version 3 of the License, or (at your option) any later version.  For
+details, see COPYING.txt.
+
+If you use tantan in your research, please cite:
+"A new repeat-masking method enables specific detection of homologous
+sequences", MC Frith, Nucleic Acids Research 2011 39(4):e23.
+
+tantan's website is: http://www.cbrc.jp/tantan/
+
+If you have any questions, comments, or problems concerning tantan,
+please email: tantan (ATmark) cbrc (dot) jp.
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index c9d12a7..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,7 +0,0 @@
-tantan (13-1) unstable; urgency=low
-
-  * Initial release (Closes: #793907)
-  * Add missing copyright holder in d/copyright
-  * Fix machine readable license code
-
- -- Sascha Steinbiss <sascha at steinbiss.name>  Tue, 04 Aug 2015 23:24:50 +0000
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index ec63514..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-9
diff --git a/debian/control b/debian/control
deleted file mode 100644
index bf940f1..0000000
--- a/debian/control
+++ /dev/null
@@ -1,20 +0,0 @@
-Source: tantan
-Section: science
-Priority: optional
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Sascha Steinbiss <sascha at steinbiss.name>
-Build-Depends: debhelper (>= 9)
-Standards-Version: 3.9.6
-Homepage: http://www.cbrc.jp/tantan/
-Vcs-Browser: http://anonscm.debian.org/viewvc/debian-med/trunk/packages/tantan/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/tantan/trunk/
-
-Package: tantan
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: low complexity and tandem repeat masker for biosequences
- tantan is a tool to mask simple regions (low complexity and short-period tandem
- repeats) in DNA, RNA, and protein sequences. The aim of tantan is to prevent
- false predictions when searching for homologous regions between two sequences.
- Simple repeats often align strongly to each other, causing false homology
- predictions.
\ No newline at end of file
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index d9f1bd7..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,31 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: tantan
-Source: http://www.cbrc.jp/tantan/
-
-Files: *
-Copyright: © 2010 Martin Frith <tantan at cbrc.jp>
-           © 2008 Michiaki Hamada <mhamada at waseda.jp>
-           © Stephen Altschul <altschul at ncbi.nlm.nih.gov>
-           © Yi-Kuo Yu <yyu at ncbi.nlm.nih.gov>
-License: GPL-3+
-
-Files: debian/*
-Copyright: © 2015 Sascha Steinbiss <sascha at steinbiss.name>
-License: GPL-3+
-
-License: GPL-3+
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- .
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program.  If not, see <http://www.gnu.org/licenses/>.
- .
- On Debian Systems you can find a copy of the text of GPL version 3
- at /usr/share/common-licenses/GPL-3.
diff --git a/debian/createmanpages b/debian/createmanpages
deleted file mode 100755
index c3f522b..0000000
--- a/debian/createmanpages
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-MANDIR=debian
-mkdir -p $MANDIR
-
-VERSION=`dpkg-parsechangelog | awk '/^Version:/ {print $2}' | sed -e 's/^[0-9]*://' -e 's/-.*//' -e 's/[+~]dfsg$//'`
-
-help2man --no-info --no-discard-stderr --help-option="-h" \
-         --name='low complexity and tandem repeat masker for biosequences' \
-            --version-string="$VERSION" tantan > $MANDIR/tantan.1
-
-cat <<EOT
-Please enhance the help2man output.
-The following web page might be helpful in doing so:
-    http://liw.fi/manpages/
-EOT
-
diff --git a/debian/lintian-overrides b/debian/lintian-overrides
deleted file mode 100644
index 8182eb8..0000000
--- a/debian/lintian-overrides
+++ /dev/null
@@ -1 +0,0 @@
-tantan binary: hardening-no-fortify-functions *
diff --git a/debian/manpages b/debian/manpages
deleted file mode 100644
index a6132f0..0000000
--- a/debian/manpages
+++ /dev/null
@@ -1 +0,0 @@
-debian/tantan.1
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 77b507c..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-
-export DESTDIR=$(CURDIR)/debian/tantan/usr
-export DH_ALWAYS_EXCLUDE=.gitignore
-
-CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
-CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
-CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS)
-LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)
-
-%:
-	dh $@
-
-override_dh_auto_install:
-	make prefix=$(DESTDIR) install
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/tantan.1 b/debian/tantan.1
deleted file mode 100644
index 6d8f296..0000000
--- a/debian/tantan.1
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.46.4.
-.TH TANTAN "1" "July 2015" "tantan 13" "User Commands"
-.SH NAME
-tantan \- low complexity and tandem repeat masker for biosequences
-.SH SYNOPSIS
-.B tantan
-[\fI\,options\/\fR] \fI\,fasta-sequence-file(s)\/\fR
-.SH DESCRIPTION
-Find simple repeats in sequences
-.SS "Options (default settings):"
-.TP
-\fB\-p\fR
-interpret the sequences as proteins
-.TP
-\fB\-x\fR
-letter to use for masking, instead of lowercase
-.TP
-\fB\-c\fR
-preserve uppercase/lowercase in non\-masked regions
-.TP
-\fB\-m\fR
-file for letter pair scores (+1/\-1, but \fB\-p\fR selects BLOSUM62)
-.TP
-\fB\-r\fR
-probability of a repeat starting per position (0.005)
-.TP
-\fB\-e\fR
-probability of a repeat ending per position (0.05)
-.TP
-\fB\-w\fR
-maximum tandem repeat period to consider (100, but \fB\-p\fR selects 50)
-.TP
-\fB\-d\fR
-probability decay per period (0.9)
-.TP
-\fB\-a\fR
-gap existence cost (0)
-.TP
-\fB\-b\fR
-gap extension cost (infinite: no gaps)
-.TP
-\fB\-s\fR
-minimum repeat probability for masking (0.5)
-.TP
-\fB\-f\fR
-output type: 0=masked sequence, 1=repeat probabilities,
-.IP
-2=repeat counts, 3=BED (0)
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-show help message, then exit
-.TP
-\fB\-\-version\fR
-show version information, then exit
-.SH "REPORTING BUGS"
-Report bugs to: tantan at cbrc.jp
-.br
-Home page: http://www.cbrc.jp/tantan/
diff --git a/debian/upstream/edam b/debian/upstream/edam
deleted file mode 100644
index b619a8f..0000000
--- a/debian/upstream/edam
+++ /dev/null
@@ -1,13 +0,0 @@
-ontology: EDAM (1.12)
-topic:
-  - Sequence composition, complexity and repeats
-scopes:
-  - name: summary
-    function:
-     - Sequence masking
-    inputs:
-     - data:   Sequence
-       formats: [FASTA]
-    outputs:
-     - data:   Sequence
-       formats: [FASTA]
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
deleted file mode 100644
index c69c035..0000000
--- a/debian/upstream/metadata
+++ /dev/null
@@ -1,11 +0,0 @@
-Reference:
-  Author: Frith, Martin C.
-  Title: A new repeat-masking method enables specific detection of homologous sequences
-  Journal: Nucleic Acids Research
-  Year: 2011
-  Volume: 39
-  Number: 4
-  Pages: e23
-  DOI: 10.1093/nar/gkq1212
-  PMID: 21109538
-  URL: http://nar.oxfordjournals.org/content/39/4/e23.abstract
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 5441fb1..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=3
-http://cbrc3.cbrc.jp/~martin/tantan/tantan-([0-9]*).zip
diff --git a/src/CA_code/lambda_calculator.c b/src/CA_code/lambda_calculator.c
new file mode 100644
index 0000000..7e24c9c
--- /dev/null
+++ b/src/CA_code/lambda_calculator.c
@@ -0,0 +1,465 @@
+// Copyright 2008 Michiaki Hamada
+// Adapted from public domain code by Yi-Kuo Yu, NCBI
+
+/**
+ * See lambda_calculator.h
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "nrutil.h"
+int Alphsize;
+#include "nrutil.c"
+#include "ludcmp.c"
+#include "lubksb.c"
+#include "lambda_calculator.h"
+#define Epsilon 1.0e-36
+#define E_bound 1.0e-12 
+#define Infty   1000000.0
+#define min(A,B) ((A) > (B) ? (B) : (A) )
+#define max(A,B) ((A) > (B) ? (A) : (B) )
+#define bool int
+#define true 1
+#define false 0
+double Lambda_UB; //lambda upper bound
+double r_max_m, c_max_m; //min of each row's (column's) max
+
+void makematrix( const double** mat_b, double **a, double lambda);
+typedef struct Lambda {
+  double min;
+  double max;
+  int flag;    // 1 means there is a range, -1 means no solution possible.
+} Lambda;
+typedef struct Sum {
+  double value;
+  int flag;   // 1 means no negative bg_freq, -1 means there is negative bg_freq
+} Sum;
+Lambda Find_JP(const double** mat_b, double la_min, double la_max, double **JP, double *p_in, double *q_in);
+Sum Check_root(const double** mat_b, double **a, double lambda, double *p, double *q);
+double Check_det(const double** mat_b, double **a, double lambda);
+Sum Nail_lambda(const double** mat_b, int flag_sign, double lambda_min, double lambda_max, double *p, double *q, double *la_add);
+double Nail_det(const double** mat_b, int flag_sign, double lambda_min, double lambda_max);
+bool Check_range( const double** mat_b );
+
+double *Locate_det_zero( const double** mat_b, int * ); //pointer to root list are returned with how many of them by int 
+
+
+double calculate_lambda ( const double** mat_b, int alpha_size,
+                          double* p, double* q )
+{
+  double **JP/*, *q, *p*/;
+  int k;
+  double *root_location;
+  int N_root; 
+  Lambda Lambda_local;
+
+  Alphsize = alpha_size;
+
+  if( ! Check_range( mat_b ) ) return -1.0;
+
+  root_location = Locate_det_zero(mat_b, &N_root);
+  if( root_location == NULL && N_root > 0 ) return -1.0;
+
+  //q=dvector(1,Alphsize);
+  //p=dvector(1,Alphsize);
+  JP = dmatrix(1,Alphsize,1,Alphsize);
+
+  if (N_root == 0){
+    Lambda_local = Find_JP(mat_b, 0, Lambda_UB, JP, p, q);
+    if (1 == Lambda_local.flag) { // sensible solution found  
+      // Remember to find the right place to free the vectors
+      //free_dvector(p, 1,Alphsize);
+      //free_dvector(q, 1,Alphsize);
+      free( root_location );
+      free_dmatrix( JP, 1, Alphsize, 1, Alphsize );
+      return (Lambda_local.min + Lambda_local.max) / 2.0;
+    }
+    else if (-1 == Lambda_local.flag) {
+      //printf("matrix pass first screening but no sensible solution found. :-( \n");
+    }
+  } 
+  else if (N_root > 0) {
+    //printf("N_root = %d for this matirx \n", N_root);
+    //for (i=0;i<N_root;i++) printf("N_root[%d] = %lf\n",i,root_location[i]);
+    for (k=0; k<= N_root; k++){
+      if (k==0) {Lambda_local.min =0; Lambda_local.max = root_location[0];}
+      else if (k== N_root) {Lambda_local.min = root_location[N_root-1]; Lambda_local.max = Lambda_UB+Epsilon;}
+      else {Lambda_local.min = root_location[k-1]; Lambda_local.max = root_location[k]; }
+      Lambda_local = Find_JP(mat_b, Lambda_local.min, Lambda_local.max, JP, p, q);
+      if (1 == Lambda_local.flag) { // sensible solution found  
+	//free_dvector(p, 1,Alphsize);
+	//free_dvector(q, 1,Alphsize);
+	free( root_location );
+      free_dmatrix( JP, 1, Alphsize, 1, Alphsize );
+	return (Lambda_local.min + Lambda_local.max) / 2.0;
+      }
+      else if (-1 == Lambda_local.flag) {
+	//printf("matrix pass first screening but still no sensible solution found. :-( \n");
+      }
+    }
+  } 
+  // Remember to find the right place to free the vectors
+  //free_dvector(p, 1,Alphsize);
+  //free_dvector(q, 1,Alphsize);
+  free( root_location );
+  free_dmatrix( JP, 1, Alphsize, 1, Alphsize );
+  return -1.0;
+}
+
+bool Check_range( const double** mat_b )
+{
+  int i,j;
+  int pos_flag_r, neg_flag_r;
+  int pos_flag_c, neg_flag_c;
+  double r_max, c_max; //max of each row (or column)
+
+  int L_r=0, L_c=0; // number of zero-score rows (columns)
+
+  // First make sure each row and column have both pos and neg entries
+  r_max_m = c_max_m = 100000000000.0;
+  for (i=1;i<=Alphsize; i++) {
+    r_max = 0; c_max = 0;
+    pos_flag_r = -1; neg_flag_r = -1; pos_flag_c = -1; neg_flag_c = -1;
+    for (j = 1; j<= Alphsize; j++){
+      if (mat_b[i][j] > 0) {
+	if (mat_b[i][j]> r_max) r_max = mat_b[i][j];
+	pos_flag_r = 1;
+      }
+      else if (mat_b[i][j] < 0) neg_flag_r = 1;
+      if (mat_b[j][i] > 0) {
+	if (mat_b[j][i] > c_max) c_max = mat_b[j][i];
+	pos_flag_c = 1;
+      }
+      else if (mat_b[j][i] < 0) neg_flag_c = 1;
+    }
+    if ((pos_flag_r == -1)||(neg_flag_r == -1)||(pos_flag_c == -1)||(neg_flag_c == -1)) {
+      if ((pos_flag_r == -1)&&(neg_flag_r == -1)){
+	printf ("only zero score at row  %d\n", i);
+	L_r++;
+      }
+      else if ((pos_flag_c == -1)&& (neg_flag_c == -1)){
+	printf ("only zero score at column %d\n", i);
+	L_c++;
+      }
+      else{
+	//printf("all positive or all negative at row or column %d\n", i);
+	//printf("therefore invalid matrix. exit now. \n");
+	return false;
+	//exit(1);
+      }
+    }
+    if ((r_max < r_max_m)&&(r_max > 0)) r_max_m = r_max;
+    if ((c_max < c_max_m)&&(c_max > 0)) c_max_m = c_max;
+  }
+
+
+  // Find the upper bound for lambda
+  if (r_max_m > c_max_m) {
+    Lambda_UB = 1.1*log(1.0*Alphsize-L_r)/r_max_m ;
+  }
+  else {
+    Lambda_UB = 1.1*log(1.0*Alphsize-L_c)/c_max_m;
+  }
+  //printf("the upper bound for lambda is %lf\n", Lambda_UB);
+  return true;
+}
+
+
+
+double Check_det(const double** mat_b, double **a, double lambda)
+{
+  double d;
+  int i, /*j,*/ *indx;
+
+  indx = ivector(1,Alphsize);
+  makematrix(mat_b, a,lambda);
+  ludcmp(a,Alphsize,indx,&d);
+  for(i=1;i<=Alphsize;i++) d *= a[i][i];
+  free_ivector(indx,1,Alphsize);
+  return d;  //returning the determinant
+}
+
+
+Sum Check_root(const double** mat_b, double **a, double lambda, double *p, double *q)
+{
+  double **y, /* *col,*/ d;
+  //double sum = 0.0;
+  int i,j;//, *indx;
+  Sum Sum_here; 
+
+  y=dmatrix(1,Alphsize,1,Alphsize);
+  //indx = ivector(1,Alphsize);
+  int indx[Alphsize+1];
+  //col = dvector(1,Alphsize);
+  double col[Alphsize+1];
+
+  makematrix(mat_b, a,lambda);
+  ludcmp(a,Alphsize,indx,&d);
+  Sum_here.value = 0.0;
+  for(i=1;i<=Alphsize;i++) q[i]=0.0;
+  for(j=1;j<=Alphsize;j++){
+    for (i=1;i<=Alphsize;i++) col[i]=0.0;
+    col[j]=1.0;
+    lubksb(a,Alphsize,indx,col);
+    p[j]=0.0;
+    for (i=1;i<=Alphsize;i++) {
+      y[i][j]=col[i]; Sum_here.value += y[i][j]; 
+      p[j]+=y[i][j]; q[i]+=y[i][j]; 
+    }
+  }
+  
+  Sum_here.flag = 1;
+  for (i=1;i<Alphsize; i++) {
+    if ((p[i] < 0) || (q[i] < 0)) {
+      Sum_here.flag = -1;
+      //printf("problematic freq. p[%d] = %.4f q[%d]=%.4f\n",i,p[i],i,q[i]);
+    }
+  }
+  free_dmatrix(y,1,Alphsize,1,Alphsize);
+  return Sum_here; 
+}
+
+
+
+double * Locate_det_zero(const double** mat_b, int *N_root_add)
+{
+  double **a/*,  *q, *p */; // a is the exponentiated matrix of socres, p and q are bg_freqs
+  int i/*,j,k*/;
+  int N;  // number of points for first round
+  int flag_sign; 
+  double lambda/*, l_tmp, sum,  sum_min, sum_max */;
+  double lambda_root, dlambda /*, dsum=0.5 */; 
+  //double *l_here, *s_here;
+  double root[5000];
+  double *root_temp; 
+  //double error=0.000000000001;
+  int zero_monitor = 0;  // record number of zeros found in the range 
+  //int flag;  
+
+  a=dmatrix(1,Alphsize,1,Alphsize);
+  //Sum_local = (Sum *)malloc(sizeof(Sum));
+  //Lambda_local = (Lambda *)malloc(sizeof(Lambda));
+  
+  N = 2 + max(400, ((int) (Lambda_UB-0)/0.005)); 
+  //printf("N = %d in Locate_det_zero\n", N);
+  dlambda = (Lambda_UB)/(N*1.0); 
+  //l_here = (double *)malloc((N+1)*sizeof(double));
+  //s_here = (double *)malloc((N+1)*sizeof(double));
+  double l_here[N+1];
+  double s_here[N+1];
+
+  for (i=0; i< N ; i++){
+    lambda = (i+1)*dlambda; 
+    s_here[i] = Check_det(mat_b, a,lambda); 
+    l_here[i] = lambda; 
+  }
+
+  if (s_here[0] < 0.0) flag_sign = -1;
+  if (s_here[0] > 0.0 ) flag_sign = 1;
+  if (fabs(s_here[0])/exp(l_here[0]*(r_max_m+c_max_m)/2.0) <= Epsilon) {
+    root[zero_monitor++] = l_here[0];
+    flag_sign = 0;
+  }
+  
+  for (i=1;i<N; i++){
+    if ((flag_sign != 0)&& (fabs(s_here[i])>Epsilon)) {
+      if (s_here[i-1]*s_here[i] < 0){
+	//printf("occurring at regular places\n");
+	lambda_root = Nail_det(mat_b, flag_sign, l_here[i-1], l_here[i]);
+	root[zero_monitor++] = lambda_root;
+	flag_sign = -flag_sign;  // the flag switch sign after one sol found 
+	//printf("a (regular) root of det found at %12.10f, i= %d\n", lambda_root,i);
+      }
+    }
+    else {
+      if (s_here[i] < 0.0) flag_sign = -1;
+      if (s_here[i] > 0.0 ) flag_sign = 1;
+      if (fabs(s_here[i])/exp(l_here[i]*(r_max_m+c_max_m)/2.0) <= Epsilon) {
+	root[zero_monitor++] = l_here[i];
+      }
+    }
+  }
+  //printf("total number of solution found in range is %d\n", i_monitor);
+  root_temp = (double *)malloc(zero_monitor*sizeof(double));
+  *N_root_add = zero_monitor; 
+  if (zero_monitor > 0) {
+    if (zero_monitor >= N/4) {
+      //printf("It is likely that uniform zero determinant is occurring.\n");
+      //printf("number of small det points = %d out of %d, exit now....\n",zero_monitor, N);
+      free( root_temp );
+      return NULL;
+      //exit(1);
+    }
+    for (i = 0; i < zero_monitor; i++){
+      root_temp[i] = root[i];
+      //printf("root_location[%d] = %lf\n",i,root_temp[i]);
+    }
+  }
+  free_dmatrix( a, 1, Alphsize, 1, Alphsize );
+  return root_temp;  
+
+} 
+
+
+Lambda Find_JP(const double** mat_b, double la_min, double la_max, double **JP, double *p_in, double *q_in)
+{
+  double **a, *q, *p; // a is the exponentiated matrix of socres, p and q are bg_freqs
+  int i,j/*,k*/;
+  int N;  // number of points for first round
+  double lambda/*, l_tmp, sum, sum_min, sum_max*/;
+  double lambda_max, lambda_min, lambda_final, dlambda/*, dsum=0.5*/; 
+  //double *l_here, *s_here;
+  //double error=0.000000000000001;
+  //int validity_flag; // 1 means valid, -1 means not valid.
+  int flag_sign;       // 1 means small lambda sum > 1, -1 means otherwise
+  int flag_done = -1;       // 1 means find sensible solution, -1 means sensible not found 
+  int i_monitor = 0;          // record number of solution found in the range, including nonsense ones 
+  int j_monitor;
+
+  Lambda Lambda_local;
+  //Sum *Sum_local;   
+  Sum Sum_local;   
+
+  lambda_min = la_min; 
+  lambda_max = la_max;
+  q = q_in;
+  p = p_in;
+  a=dmatrix(1,Alphsize,1,Alphsize);
+  //Sum_local = (Sum *)malloc(sizeof(Sum));
+  //Lambda_local = (Lambda *)malloc(sizeof(Lambda));
+  
+  N = 2 + max(400, ((int) (lambda_max-lambda_min)/0.005)); 
+  //printf("N = %d in Find_JP\n", N);
+  dlambda = (lambda_max-lambda_min)/(N*1.0); 
+  //l_here = (double *)malloc((N+1)*sizeof(double));
+  //s_here = (double *)malloc((N+1)*sizeof(double));
+  double l_here[N+1];
+  double s_here[N+1];
+  //printf("lambda_min enter = %12.10e, lambda_max = %12.10f\n", lambda_min, lambda_max);
+  for (i=0; i< N-1 ; i++){
+    lambda = lambda_min + (i+1)*dlambda; 
+    makematrix(mat_b, a,lambda);
+    Sum_local = Check_root(mat_b, a,lambda,p,q); 
+    l_here[i] = lambda; 
+    s_here[i] = Sum_local.value - 1.0;
+    //printf("scan %d th time in Find_JP\n",i );
+  }
+  //printf("finish first time scanining in Find_JP\n");
+  if (s_here[0] < 0.0) flag_sign = -1;
+  else if (s_here[0] > 0.0 ) flag_sign = 1;
+  else if (s_here[0] == 0.0) {  //needs refined definition on flag_sign
+    printf("enter the exact hit, rarely occurs other than when lambda = 0 \n"); 
+    j_monitor = 1;
+    flag_sign = 0;
+    while ((flag_sign == 0) &&(j_monitor < N)){
+      Sum_local = Check_root(mat_b, a,l_here[0]+ j_monitor*dlambda/N,p,q);
+      if (Sum_local.value > 1.0) {
+	flag_sign  = 1;
+      }
+      else if (Sum_local.value <1.0){
+	flag_sign = -1;
+      }
+      j_monitor++; 
+    }
+  }
+  
+  for (i=1;i<N; i++){  // should be N-1 ???
+    if (flag_sign == 0) {printf("flag_sign = 0 \n"); exit(1);}
+    if (s_here[i-1]*s_here[i] < 0){
+      lambda_min = l_here[i-1];
+      lambda_max = l_here[i];
+      Sum_local = Nail_lambda(mat_b, flag_sign, lambda_min, lambda_max, p,q, &lambda_final);
+      if (Sum_local.flag == 1) {
+	i =N; flag_done = 1; Lambda_local.flag = 1;
+	Lambda_local.min = lambda_final, Lambda_local.max = lambda_final;
+      }
+      flag_sign = -flag_sign;  // the flag switch sign after one sol found 
+      i_monitor++ ;
+    }
+  }
+
+  if (flag_done == 1){
+    // Write correct JP to the matrix
+    makematrix(mat_b, a,lambda_final);
+    for (i=1;i<=Alphsize;i++){
+      for (j=1;j<=Alphsize;j++){
+	JP[i][j] =  a[i][j]*p[i]*q[j];
+      }
+    }     
+    free_dmatrix(a,1,Alphsize,1,Alphsize);
+    return Lambda_local;
+  }
+  else if (flag_done == -1){
+    //printf("no sensible solution in the plausible x range: (%lf,%lf)\n", la_min, la_max);
+    Lambda_local.flag = -1; Lambda_local.min = 0; Lambda_local.max = Infty;
+    return Lambda_local; 
+  }
+  // never come here
+  return Lambda_local;
+} 
+
+
+Sum Nail_lambda(const double** mat_b, int flag_sign, double lambda_min, double lambda_max, double *p, double *q, double *lam_add)
+{
+  double **a;
+  double lambda;
+
+  //Sum *Sum_local;
+  Sum Sum_local;
+  a = dmatrix(1,Alphsize,1,Alphsize);
+  //Sum_local = (Sum *)malloc(sizeof(Sum));
+
+  lambda = (lambda_min+lambda_max)/2.0;
+  Sum_local = Check_root(mat_b, a, lambda, p, q);  
+  while (fabs(Sum_local.value-1.0)>E_bound){
+    if (flag_sign*(Sum_local.value-1.0)<0) lambda_max = lambda;
+    else if (flag_sign*(Sum_local.value-1.0)> 0) lambda_min = lambda;
+
+    // Added by MCF to avoid infinite loop:
+    if (lambda == (lambda_min+lambda_max)/2.0){
+      Sum_local.flag = -1;
+      break;
+    }
+
+    lambda = (lambda_min+lambda_max)/2.0;
+    Sum_local = Check_root(mat_b, a, lambda, p, q); 
+  }
+  free_dmatrix(a,1,Alphsize,1,Alphsize);
+  *lam_add = lambda; 
+  return Sum_local;
+}
+
+
+double Nail_det(const double** mat_b, int flag_sign, double lambda_min, double lambda_max)
+{
+  double **a;
+  double lambda;
+  double value;
+
+  a = dmatrix(1,Alphsize,1,Alphsize);
+
+  lambda = (lambda_min+lambda_max)/2.0;
+  value = Check_det(mat_b, a, lambda);  
+  while ((fabs(value)>E_bound)&&(lambda > 0)){
+    if (flag_sign*(value)<0) lambda_max = lambda;
+    else if (flag_sign*(value)> 0) lambda_min = lambda;
+    lambda = (lambda_min+lambda_max)/2.0;
+    value = Check_det(mat_b, a, lambda); 
+  }
+  free_dmatrix(a,1,Alphsize,1,Alphsize);
+  return lambda; 
+}
+
+void makematrix(const double** mat_b, double **a, double lambda)
+{
+
+  int i,j;
+ 
+  for (i=1;i<=Alphsize;i++)
+    for(j=1;j<=Alphsize;j++){
+      *(*(a+i)+j)=exp(lambda*mat_b[i][j]);       
+    }
+}
+
+
+
diff --git a/src/CA_code/lambda_calculator.h b/src/CA_code/lambda_calculator.h
new file mode 100644
index 0000000..70f2f18
--- /dev/null
+++ b/src/CA_code/lambda_calculator.h
@@ -0,0 +1,10 @@
+// Copyright 2008 Michiaki Hamada
+
+#ifndef __H_INCLUDE_LAMBDA_CALCULATOR_HH
+#define __H_INCLUDE_LAMBDA_CALCULATOR_HH
+
+// These pointers are 1-based!
+double calculate_lambda( const double** mat_b, int alpha_size,
+                         double* p, double* q );
+
+#endif // __H_INCLUDE_LAMBDA_CALCULATOR_HH
diff --git a/src/CA_code/lubksb.c b/src/CA_code/lubksb.c
new file mode 100644
index 0000000..0a928ed
--- /dev/null
+++ b/src/CA_code/lubksb.c
@@ -0,0 +1,24 @@
+// Public domain code from Yi-Kuo Yu & Stephen Altschul, NCBI
+
+void lubksb(a,n,indx,b)
+double **a,b[];
+int n,*indx;
+{
+	int i,ii=0,ip,j;
+	double sum;
+
+	for (i=1;i<=n;i++) {
+		ip=indx[i];
+		sum=b[ip];
+		b[ip]=b[i];
+		if (ii)
+			for (j=ii;j<=i-1;j++) sum -= a[i][j]*b[j];
+		else if (sum) ii=i;
+		b[i]=sum;
+	}
+	for (i=n;i>=1;i--) {
+		sum=b[i];
+		for (j=i+1;j<=n;j++) sum -= a[i][j]*b[j];
+		b[i]=sum/a[i][i];
+	}
+}
diff --git a/src/CA_code/ludcmp.c b/src/CA_code/ludcmp.c
new file mode 100644
index 0000000..fcff859
--- /dev/null
+++ b/src/CA_code/ludcmp.c
@@ -0,0 +1,61 @@
+// Public domain code from Yi-Kuo Yu & Stephen Altschul, NCBI
+
+#include <math.h>
+
+#define TINY 1.0e-20;
+
+void ludcmp(a,n,indx,d)
+int n,*indx;
+double **a,*d;
+{
+	int i,imax,j,k;
+	double big,dum,sum,temp;
+	double *vv,*dvector();
+	void nrerror(),free_dvector();
+
+	vv=dvector(1,n);
+	*d=1.0;
+	for (i=1;i<=n;i++) {
+		big=0.0;
+		for (j=1;j<=n;j++)
+			if ((temp=fabs(a[i][j])) > big) big=temp;
+		if (big == 0.0) nrerror("Singular matrix in routine LUDCMP");
+		vv[i]=1.0/big;
+	}
+	for (j=1;j<=n;j++) {
+		for (i=1;i<j;i++) {
+			sum=a[i][j];
+			for (k=1;k<i;k++) sum -= a[i][k]*a[k][j];
+			a[i][j]=sum;
+		}
+		big=0.0;
+		for (i=j;i<=n;i++) {
+			sum=a[i][j];
+			for (k=1;k<j;k++)
+				sum -= a[i][k]*a[k][j];
+			a[i][j]=sum;
+			if ( (dum=vv[i]*fabs(sum)) >= big) {
+				big=dum;
+				imax=i;
+			}
+		}
+		if (j != imax) {
+			for (k=1;k<=n;k++) {
+				dum=a[imax][k];
+				a[imax][k]=a[j][k];
+				a[j][k]=dum;
+			}
+			*d = -(*d);
+			vv[imax]=vv[j];
+		}
+		indx[j]=imax;
+		if (a[j][j] == 0.0) a[j][j]=TINY;
+		if (j != n) {
+			dum=1.0/(a[j][j]);
+			for (i=j+1;i<=n;i++) a[i][j] *= dum;
+		}
+	}
+	free_dvector(vv,1,n);
+}
+
+#undef TINY
diff --git a/src/CA_code/nrutil.c b/src/CA_code/nrutil.c
new file mode 100644
index 0000000..af72332
--- /dev/null
+++ b/src/CA_code/nrutil.c
@@ -0,0 +1,239 @@
+// Public domain code from Yi-Kuo Yu & Stephen Altschul, NCBI
+
+//#include <malloc.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+void nrerror(error_text)
+char error_text[];
+{
+	void exit();
+
+	fprintf(stderr,"Numerical Recipes run-time error...\n");
+	fprintf(stderr,"%s\n",error_text);
+	fprintf(stderr,"...now exiting to system...\n");
+	exit(1);
+}
+
+float *vector(nl,nh)
+int nl,nh;
+{
+	float *v;
+
+	v=(float *)malloc((unsigned) (nh-nl+1)*sizeof(float));
+	if (!v) nrerror("allocation failure in vector()");
+	return v-nl;
+}
+
+int *ivector(nl,nh)
+int nl,nh;
+{
+	int *v;
+
+	v=(int *)malloc((unsigned) (nh-nl+1)*sizeof(int));
+	if (!v) nrerror("allocation failure in ivector()");
+	return v-nl;
+}
+
+double *dvector(nl,nh)
+int nl,nh;
+{
+	double *v;
+
+	v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double));
+	if (!v) nrerror("allocation failure in dvector()");
+	return v-nl;
+}
+
+float **matrix(nrl,nrh,ncl,nch)
+int nrl,nrh,ncl,nch;
+{
+	int i;
+	float **m;
+
+	m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float *));
+	if (!m) nrerror("allocation failure 1 in matrix()");
+	m -= nrl;
+
+	for(i=nrl;i<=nrh;i++) {
+		m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float));
+		if (!m[i]) nrerror("allocation failure 2 in matrix()");
+		m[i] -= ncl;
+	}
+	return m;
+}
+
+double **dmatrix(nrl,nrh,ncl,nch)
+int nrl,nrh,ncl,nch;
+{
+	int i;
+	double **m;
+
+	m=(double **) malloc((unsigned) (nrh-nrl+1)*sizeof(double *));
+	if (!m) nrerror("allocation failure 1 in dmatrix()");
+	m -= nrl;
+
+	for(i=nrl;i<=nrh;i++) {
+		m[i]=(double *) malloc((unsigned) (nch-ncl+1)*sizeof(double));
+		if (!m[i]) nrerror("allocation failure 2 in dmatrix()");
+		m[i] -= ncl;
+	}
+	return m;
+}
+
+double ***darray3(n1l,n1h,n2l,n2h,n3l,n3h)
+int n1l,n1h,n2l,n2h,n3l,n3h;
+{
+  int i;
+  double ***m;
+
+  m=(double ***) malloc((unsigned) (n1h-n1l+1)*sizeof(double **));
+  if (!m) nrerror("allocation failure 1 in darray3()");
+  m -= n1l;
+
+  for(i=n1l;i<=n1h;i++)
+  {
+    m[i]=dmatrix(n2l,n2h,n3l,n3h);
+  }
+  return m;
+}
+
+double ****darray4(n1l,n1h,n2l,n2h,n3l,n3h,n4l,n4h)
+int n1l,n1h,n2l,n2h,n3l,n3h,n4l,n4h;
+{
+  int i;
+  double ****m;
+
+  m=(double ****) malloc((unsigned) (n1h-n1l+1)*sizeof(double ***));
+  if (!m) nrerror("allocation failure 1 in darray4()");
+  m -= n1l;
+
+  for(i=n1l;i<=n1h;i++)
+  {
+    m[i]=darray3(n2l,n2h,n3l,n3h,n4l,n4h);
+  }
+  return m;
+}
+
+int **imatrix(nrl,nrh,ncl,nch)
+int nrl,nrh,ncl,nch;
+{
+	int i,**m;
+
+	m=(int **)malloc((unsigned) (nrh-nrl+1)*sizeof(int *));
+	if (!m) nrerror("allocation failure 1 in imatrix()");
+	m -= nrl;
+
+	for(i=nrl;i<=nrh;i++) {
+		m[i]=(int *)malloc((unsigned) (nch-ncl+1)*sizeof(int));
+		if (!m[i]) nrerror("allocation failure 2 in imatrix()");
+		m[i] -= ncl;
+	}
+	return m;
+}
+
+float **submatrix(a,oldrl,oldrh,oldcl,oldch,newrl,newcl)
+float **a;
+int oldrl,oldrh,oldcl,oldch,newrl,newcl;
+{
+	int i,j;
+	float **m;
+
+	m=(float **) malloc((unsigned) (oldrh-oldrl+1)*sizeof(float *));
+	if (!m) nrerror("allocation failure in submatrix()");
+	m -= newrl;
+
+	for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+oldcl-newcl;
+
+	return m;
+}
+
+void free_vector(v,nl,nh)
+float *v;
+int nl,nh;
+{
+	free((char*) (v+nl));
+}
+
+void free_ivector(v,nl,nh)
+int *v,nl,nh;
+{
+	free((char*) (v+nl));
+}
+
+void free_dvector(v,nl,nh)
+double *v;
+int nl,nh;
+{
+	free((char*) (v+nl));
+}
+
+void free_matrix(m,nrl,nrh,ncl,nch)
+float **m;
+int nrl,nrh,ncl,nch;
+{
+	int i;
+
+	for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl));
+	free((char*) (m+nrl));
+}
+
+void free_dmatrix(m,nrl,nrh,ncl,nch)
+double **m;
+int nrl,nrh,ncl,nch;
+{
+	int i;
+
+	for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl));
+	free((char*) (m+nrl));
+}
+
+void free_imatrix(m,nrl,nrh,ncl,nch)
+int **m;
+int nrl,nrh,ncl,nch;
+{
+	int i;
+
+	for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl));
+	free((char*) (m+nrl));
+}
+
+void free_darray3(m,n1l,n1h,n2l,n2h,n3l,n3h)
+double ***m;
+int n1l,n1h,n2l,n2h,n3l,n3h;
+{
+	int i;
+
+	for(i=n1h;i>=n1l;i--) free_dmatrix(m[i],n2l,n2h,n3l,n3h);
+	free((char*) (m+n1l));
+}
+
+void free_submatrix(b,nrl,nrh,ncl,nch)
+float **b;
+int nrl,nrh,ncl,nch;
+{
+	free((char*) (b+nrl));
+}
+
+float **convert_matrix(a,nrl,nrh,ncl,nch)
+float *a;
+int nrl,nrh,ncl,nch;
+{
+	int i,j,nrow,ncol;
+	float **m;
+
+	nrow=nrh-nrl+1;
+	ncol=nch-ncl+1;
+	m = (float **) malloc((unsigned) (nrow)*sizeof(float*));
+	if (!m) nrerror("allocation failure in convert_matrix()");
+	m -= nrl;
+	for(i=0,j=nrl;i<=nrow-1;i++,j++) m[j]=a+ncol*i-ncl;
+	return m;
+}
+
+void free_convert_matrix(b,nrl,nrh,ncl,nch)
+float **b;
+int nrl,nrh,ncl,nch;
+{
+	free((char*) (b+nrl));
+}
diff --git a/src/CA_code/nrutil.h b/src/CA_code/nrutil.h
new file mode 100644
index 0000000..0de5f5f
--- /dev/null
+++ b/src/CA_code/nrutil.h
@@ -0,0 +1,19 @@
+// Public domain code from Yi-Kuo Yu & Stephen Altschul, NCBI
+
+float *vector();
+float **matrix();
+float **convert_matrix();
+double *dvector();
+double **dmatrix();
+int *ivector();
+int **imatrix();
+float **submatrix();
+void free_vector();
+void free_dvector();
+void free_ivector();
+void free_matrix();
+void free_dmatrix();
+void free_imatrix();
+void free_submatrix();
+void free_convert_matrix();
+void nrerror();
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..741e5b5
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,27 @@
+CXXFLAGS = -O3 -Wall -W -Wcast-qual -Wswitch-enum -Wundef	\
+-Wcast-align -Wold-style-cast
+# -Wconversion
+
+CFLAGS = -Wall
+
+COBJ = CA_code/lambda_calculator.o
+
+all: tantan
+
+tantan: *.cc *.hh version.hh Makefile $(COBJ)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ *.cc $(COBJ)
+
+$(COBJ): CA_code/*.c CA_code/*.h Makefile
+	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ CA_code/lambda_calculator.c
+
+clean:
+	rm -f tantan $(COBJ)
+
+VERSION = \"`hg id -n`\"
+
+version.hh: FORCE
+	if test -e ../.hg; \
+	then echo $(VERSION) | cmp -s $@ - || echo $(VERSION) > $@ ; \
+	fi
+
+FORCE:
diff --git a/src/mcf_alphabet.cc b/src/mcf_alphabet.cc
new file mode 100644
index 0000000..76a7d98
--- /dev/null
+++ b/src/mcf_alphabet.cc
@@ -0,0 +1,82 @@
+// Copyright 2010 Martin C. Frith
+
+#include "mcf_alphabet.hh"
+
+#include <algorithm>  // fill_n
+#include <cctype>
+#include <stdexcept>
+
+namespace mcf {
+
+// consts have internal linkage, apparently.
+// If I make these into static const class members, g++ 4.0.1 complains.
+const uchar defaultNumber = 255;
+const uchar defaultLetter = '!';
+
+const char* Alphabet::dna = "ACGT";
+
+// U=selenocysteine, O=pyrrolysine, *=stop?
+const char* Alphabet::protein = "ACDEFGHIKLMNPQRSTVWY";
+
+void Alphabet::fromString(const std::string &normalLetters) {
+  std::fill_n(lettersToNumbers, capacity, defaultNumber);
+  std::fill_n(numbersToLetters, capacity, defaultLetter);
+
+  uchar number = 0;
+  addLetters(normalLetters, number);
+  size = number;
+
+  addLetters("ABCDEFGHIJKLMNOPQRSTUVWXYZ", number);
+  addLetters("abcdefghijklmnopqrstuvwxyz", number);
+  addLetters("*", number);  // sometimes appears in protein sequences
+
+  initCaseConversions();
+}
+
+void Alphabet::addLetters(const std::string &letters, uchar &number) {
+  for (unsigned i = 0; i < letters.size(); ++i) {
+    uchar letter = static_cast<uchar>(letters[i]);
+    if (lettersToNumbers[letter] == defaultNumber) {
+      lettersToNumbers[letter] = number;
+      numbersToLetters[number] = letter;
+      ++number;
+    }
+  }
+}
+
+void Alphabet::initCaseConversions() {
+  for (unsigned i = 0; i < capacity; ++i) {
+    uchar letter = numbersToLetters[i];
+    numbersToUppercase[i] = lettersToNumbers[std::toupper(letter)];
+    numbersToLowercase[i] = lettersToNumbers[std::tolower(letter)];
+  }
+}
+
+void Alphabet::makeCaseInsensitive() {
+  for (unsigned i = 0; i < capacity; ++i) {
+    lettersToNumbers[i] = lettersToNumbers[std::toupper(i)];
+  }
+}
+
+void Alphabet::encodeInPlace(uchar *beg, uchar *end) const {
+  while (beg != end) {
+    uchar letter = *beg;
+    uchar number = lettersToNumbers[letter];
+    if (number == defaultNumber) {
+      throw std::runtime_error(std::string("bad symbol: ") + char(letter));
+    }
+    *beg = number;
+    ++beg;
+  }
+}
+
+void Alphabet::decodeInPlace(uchar *beg, uchar *end) const {
+  while (beg != end) {
+    uchar number = *beg;
+    uchar letter = numbersToLetters[number];
+    *beg = letter;
+    ++beg;
+  }
+}
+
+}
diff --git a/src/mcf_alphabet.hh b/src/mcf_alphabet.hh
new file mode 100644
index 0000000..15760da
--- /dev/null
+++ b/src/mcf_alphabet.hh
@@ -0,0 +1,52 @@
+// Copyright 2010 Martin C. Frith
+
+// An "Alphabet" consists of two things:
+// 1) A mapping from ASCII letters to small integers.
+// 2) A distinction between "normal" and "abnormal" letters.  The
+// letters that map to the first "size" integers are normal.  For
+// example, for DNA, ACGT would be normal.
+
+#ifndef MCF_ALPHABET_HH
+#define MCF_ALPHABET_HH
+
+#include <string>
+
+namespace mcf {
+
+typedef unsigned char uchar;
+
+struct Alphabet {
+  static const char* dna;
+  static const char* protein;
+
+  static const unsigned capacity = 256;
+
+  // Initializes the Alphabet with the given normal letters.
+  void fromString(const std::string &normalLetters);  // case is preserved
+
+  // Makes lowercase letters map to the same numbers that uppercase
+  // letters do.
+  void makeCaseInsensitive();
+
+  // Maps letters to numbers in the given range.
+  void encodeInPlace(uchar *beg, uchar *end) const;
+
+  // Maps numbers back to letters in the given range.
+  void decodeInPlace(uchar *beg, uchar *end) const;
+
+  unsigned size;  // number of "normal" letters in the alphabet
+
+  uchar lettersToNumbers[capacity];
+  uchar numbersToLetters[capacity];
+
+  uchar numbersToUppercase[capacity];
+  uchar numbersToLowercase[capacity];
+
+ private:
+  void addLetters(const std::string &letters, uchar &number);
+  void initCaseConversions();
+};
+
+}
+
+#endif
diff --git a/src/mcf_fasta_sequence.cc b/src/mcf_fasta_sequence.cc
new file mode 100644
index 0000000..8837224
--- /dev/null
+++ b/src/mcf_fasta_sequence.cc
@@ -0,0 +1,113 @@
+// Copyright 2010, 2011 Martin C. Frith
+
+#include "mcf_fasta_sequence.hh"
+
+#include <cctype>  // isspace
+//#include <iostream>  // for debugging
+#include <istream>
+#include <iterator>  // istreambuf_iterator, ostreambuf_iterator
+#include <ostream>
+
+namespace mcf {
+
+static void readSequence(std::istream &s, std::vector<uchar> &sequence,
+                         char delimiter) {
+  if (!s) return;
+  std::istreambuf_iterator<char> inpos(s);
+  std::istreambuf_iterator<char> endpos;
+  while (inpos != endpos) {
+    char c = *inpos;
+    if (c == delimiter) break;
+    uchar u = static_cast<uchar>(c);
+    if (!std::isspace(u)) sequence.push_back(u);
+    ++inpos;
+  }
+}
+
+static void readQualityCodes(std::istream &s, std::vector<uchar> &qualityCodes,
+                             std::vector<uchar>::size_type howMany) {
+  if (!s) return;
+  std::istreambuf_iterator<char> inpos(s);
+  std::istreambuf_iterator<char> endpos;
+  while (inpos != endpos) {
+    if (qualityCodes.size() == howMany) break;
+    char c = *inpos;
+    uchar u = static_cast<uchar>(c);
+    if (!std::isspace(u)) qualityCodes.push_back(u);
+    ++inpos;
+  }
+}
+
+std::istream &operator>>(std::istream &s, FastaSequence &f) {
+  std::string title;
+  std::vector<uchar> sequence;
+  std::string secondTitle;
+  std::vector<uchar> qualityCodes;
+
+  char firstChar = '>';
+  s >> firstChar;
+  if (firstChar != '>' && firstChar != '@') s.setstate(std::ios::failbit);
+  getline(s, title);
+
+  if (firstChar == '>') {
+    readSequence(s, sequence, '>');
+  } else {
+    readSequence(s, sequence, '+');
+    char secondChar;
+    s >> secondChar;
+    getline(s, secondTitle);
+    readQualityCodes(s, qualityCodes, sequence.size());
+    // perhaps check whether we read enough quality codes
+  }
+
+  if (!s) return s;
+
+  f.title.swap(title);
+  f.sequence.swap(sequence);
+  f.secondTitle.swap(secondTitle);
+  f.qualityCodes.swap(qualityCodes);
+
+  return s;
+}
+
+static void writeOneLine(std::ostream &s, const std::vector<uchar> &v) {
+  std::ostreambuf_iterator<char> o(s);
+  std::vector<uchar>::const_iterator b = v.begin();
+  std::vector<uchar>::const_iterator e = v.end();
+  while (b != e) {
+    o = static_cast<char>(*b);
+    ++b;
+  }
+  o = '\n';
+}
+
+static void writeMultiLines(std::ostream &s, const std::vector<uchar> &v) {
+  const int lettersPerLine = 50;  // ?
+  std::ostreambuf_iterator<char> o(s);
+  std::vector<uchar>::const_iterator b = v.begin();
+  std::vector<uchar>::const_iterator e = v.end();
+  std::vector<uchar>::const_iterator i = b;
+  while (i != e) {
+    o = static_cast<char>(*i);
+    ++i;
+    if (i - b == lettersPerLine || i == e) {
+      o = '\n';
+      b = i;
+    }
+  }
+}
+
+std::ostream &operator<<(std::ostream &s, const FastaSequence &f) {
+  if (f.qualityCodes.empty()) {
+    s << '>' << f.title << '\n';
+    writeMultiLines(s, f.sequence);
+  } else {
+    s << '@' << f.title << '\n';
+    writeOneLine(s, f.sequence);
+    s << '+' << f.secondTitle << '\n';
+    writeOneLine(s, f.qualityCodes);
+  }
+  return s;
+}
+
+}
diff --git a/src/mcf_fasta_sequence.hh b/src/mcf_fasta_sequence.hh
new file mode 100644
index 0000000..2e14d25
--- /dev/null
+++ b/src/mcf_fasta_sequence.hh
@@ -0,0 +1,29 @@
+// Copyright 2010, 2011 Martin C. Frith
+
+#ifndef MCF_FASTA_SEQUENCE_HH
+#define MCF_FASTA_SEQUENCE_HH
+
+#include <iosfwd>
+#include <string>
+#include <vector>
+
+namespace mcf {
+
+typedef unsigned char uchar;
+
+struct FastaSequence {
+  std::string title;
+  std::vector<uchar> sequence;
+
+  // Used for fastq:
+  std::string secondTitle;
+  std::vector<uchar> qualityCodes;
+};
+
+std::istream &operator>>(std::istream &s, FastaSequence &f);
+
+std::ostream &operator<<(std::ostream &s, const FastaSequence &f);
+
+}
+
+#endif
diff --git a/src/mcf_score_matrix.cc b/src/mcf_score_matrix.cc
new file mode 100644
index 0000000..7b3bf4a
--- /dev/null
+++ b/src/mcf_score_matrix.cc
@@ -0,0 +1,167 @@
+// Copyright 2010 Martin C. Frith
+
+#include "mcf_score_matrix.hh"
+
+#include <algorithm>  // min, fill_n
+#include <cassert>
+#include <cctype>
+#include <iomanip>  // setw
+#include <limits>
+#include <sstream>
+#include <stdexcept>
+
+namespace mcf {
+
+typedef std::runtime_error Error;
+
+// copied from NCBI BLAST:
+const char* ScoreMatrix::blosum62 = "\
+   A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  J  Z  X  *\n\
+A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1 -1 -1 -4\n\
+R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1 -2  0 -1 -4\n\
+N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  4 -3  0 -1 -4\n\
+D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4 -3  1 -1 -4\n\
+C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -1 -3 -1 -4\n\
+Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0 -2  4 -1 -4\n\
+E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1 -3  4 -1 -4\n\
+G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -4 -2 -1 -4\n\
+H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0 -3  0 -1 -4\n\
+I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3  3 -3 -1 -4\n\
+L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4  3 -3 -1 -4\n\
+K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0 -3  1 -1 -4\n\
+M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3  2 -1 -1 -4\n\
+F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3  0 -3 -1 -4\n\
+P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -3 -1 -1 -4\n\
+S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0 -2  0 -1 -4\n\
+T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1 -1 -1 -4\n\
+W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -2 -2 -1 -4\n\
+Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -1 -2 -1 -4\n\
+V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3  2 -2 -1 -4\n\
+B -2 -1  4  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4 -3  0 -1 -4\n\
+J -1 -2 -3 -3 -1 -2 -3 -4 -3  3  3 -3  2  0 -3 -2 -1 -2 -1  2 -3  3 -3 -1 -4\n\
+Z -1  0  0  1 -3  4  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -2 -2 -2  0 -3  4 -1 -4\n\
+X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -4\n\
+* -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\n\
+";
+
+void ScoreMatrix::initMatchMismatch(int matchScore,
+                                    int mismatchCost,
+                                    const std::string &letters) {
+  rowLetters.assign(letters.begin(), letters.end());
+  colLetters.assign(letters.begin(), letters.end());
+
+  unsigned size = letters.size();
+  assert(size == letters.size());
+
+  scores.resize(size);
+
+  for (unsigned i = 0; i < size; ++i) {
+    scores[i].assign(size, -mismatchCost);
+    scores[i][i] = matchScore;
+  }
+}
+
+int ScoreMatrix::minScore() const {
+  int m = std::numeric_limits<int>::max();
+  for (unsigned i = 0; i < scores.size(); ++i)
+    for (unsigned j = 0; j < scores[i].size(); ++j)
+      m = std::min(m, scores[i][j]);
+  return m;
+}
+
+static uchar indexOrDie(uchar letter, const uchar *letterToIndex, int tooBig) {
+  uchar x = letterToIndex[letter];
+  if (x >= tooBig)
+    throw Error(std::string("bad letter in score matrix: ") +
+                static_cast<char>(letter));
+  return x;
+}
+
+void ScoreMatrix::makeFastMatrix(int **fastMatrix,
+                                 int fastMatrixSize,
+                                 const uchar *letterToIndex,
+                                 int defaultScore,
+                                 bool isCaseSensitive) const {
+  for (int i = 0; i < fastMatrixSize; ++i)
+    std::fill_n(fastMatrix[i], fastMatrixSize, defaultScore);
+
+  for (unsigned i = 0; i < rowLetters.size(); ++i) {
+    for (unsigned j = 0; j < colLetters.size(); ++j) {
+      uchar x = static_cast<uchar>(rowLetters[i]);
+      uchar y = static_cast<uchar>(colLetters[j]);
+
+      if (isCaseSensitive) {
+        uchar a = indexOrDie(x, letterToIndex, fastMatrixSize);
+        uchar b = indexOrDie(y, letterToIndex, fastMatrixSize);
+        fastMatrix[a][b] = scores[i][j];
+      } else {
+        uchar a = indexOrDie(std::toupper(x), letterToIndex, fastMatrixSize);
+        uchar b = indexOrDie(std::tolower(x), letterToIndex, fastMatrixSize);
+        uchar c = indexOrDie(std::toupper(y), letterToIndex, fastMatrixSize);
+        uchar d = indexOrDie(std::tolower(y), letterToIndex, fastMatrixSize);
+        fastMatrix[a][c] = scores[i][j];
+        fastMatrix[a][d] = scores[i][j];
+        fastMatrix[b][c] = scores[i][j];
+        fastMatrix[b][d] = scores[i][j];
+      }
+    }
+  }
+}
+
+std::istream &operator>>(std::istream &s, ScoreMatrix &m) {
+  std::vector<char> tmpRowLetters;
+  std::vector<char> tmpColLetters;
+  std::vector< std::vector<int> > tmpScores;
+  std::string line;
+
+  while (std::getline(s, line)) {
+    std::istringstream iss(line);
+    char c;
+
+    if (!(iss >> c)) continue;  // skip blank lines
+    if (c == '#') continue;  // skip comment lines
+
+    if (tmpColLetters.empty()) {
+      do {
+        tmpColLetters.push_back(c);
+      } while (iss >> c);
+    } else {
+      tmpRowLetters.push_back(c);
+      tmpScores.resize(tmpScores.size() + 1);
+      int score;
+      while (iss >> score) {
+        tmpScores.back().push_back(score);
+      }
+      if (tmpScores.back().size() != tmpColLetters.size())
+        s.setstate(std::ios::failbit);
+    }
+  }
+
+  if (s.eof() && !s.bad() && !tmpScores.empty()) {
+    s.clear();
+    tmpRowLetters.swap(m.rowLetters);
+    tmpColLetters.swap(m.colLetters);
+    tmpScores.swap(m.scores);
+  }
+
+  return s;
+}
+
+std::ostream &operator<<(std::ostream &s, const ScoreMatrix &m) {
+  s << ' ';
+  for (unsigned j = 0; j < m.colLetters.size(); ++j)
+    s << ' ' << std::setw(2) << m.colLetters[j];
+  s << '\n';
+
+  for (unsigned i = 0; i < m.rowLetters.size(); ++i) {
+    s << m.rowLetters[i];
+    for (unsigned j = 0; j < m.colLetters.size(); ++j) {
+      s << ' ' << std::setw(2) << m.scores[i][j];
+    }
+    s << '\n';
+  }
+
+  return s;
+}
+
+}
diff --git a/src/mcf_score_matrix.hh b/src/mcf_score_matrix.hh
new file mode 100644
index 0000000..98b6c08
--- /dev/null
+++ b/src/mcf_score_matrix.hh
@@ -0,0 +1,60 @@
+// Copyright 2010 Martin C. Frith
+
+// This class reads and writes scoring matrices in NCBI BLAST format.
+// It can't be used directly: the idea is to copy it into a "fast"
+// matrix, and then use that.
+
+#ifndef MCF_SCORE_MATRIX_HH
+#define MCF_SCORE_MATRIX_HH
+
+#include <iosfwd>
+#include <string>
+#include <vector>
+
+namespace mcf {
+
+typedef unsigned char uchar;
+
+class ScoreMatrix {
+  // These preserve (upper/lower)case of letters labeling rows & columns.
+  friend std::istream &operator>>(std::istream &s, ScoreMatrix &m);
+  friend std::ostream &operator<<(std::ostream &s, const ScoreMatrix &m);
+
+ public:
+  static const char* blosum62;
+
+  // Initializes the matrix with simple match/mismatch scores.
+  void initMatchMismatch(int matchScore,  // usually > 0
+                         int mismatchCost,  // usually > 0
+                         const std::string &letters);  // case is preserved
+
+  // Gets the minimum score in the matrix.
+  int minScore() const;
+
+  // Copies the ScoreMatrix into a "fast" matrix.
+  // fastMatrixSize: the number of rows & columns in the fast matrix.
+  // letterToIndex: mapping from letters, to indices in the fast
+  // matrix.  If any index is >= fastMatrixSize, an error is thrown.
+  // defaultScore: for cells in the fast matrix that lack any
+  // corresponding cell in the ScoreMatrix.
+  // isCaseSensitive: if false, then each cell in the ScoreMatrix will
+  // be copied to uppercase and lowercase locations in the fast
+  // matrix.
+  // It is possible that multiple ScoreMatrix cells might map to one
+  // fast matrix cell: there is currently no check for this, and later
+  // ones will overwrite earlier ones.
+  void makeFastMatrix(int **fastMatrix,
+                      int fastMatrixSize,
+                      const uchar *letterToIndex,
+                      int defaultScore,
+                      bool isCaseSensitive) const;
+
+ private:
+  std::vector<char> rowLetters;
+  std::vector<char> colLetters;
+  std::vector< std::vector<int> > scores;
+};
+
+}
+
+#endif
diff --git a/src/mcf_score_matrix_probs.cc b/src/mcf_score_matrix_probs.cc
new file mode 100644
index 0000000..affa3be
--- /dev/null
+++ b/src/mcf_score_matrix_probs.cc
@@ -0,0 +1,45 @@
+// Copyright 2010 Martin C. Frith
+
+#include "mcf_score_matrix_probs.hh"
+
+namespace lambda {
+extern "C" {
+#include "CA_code/lambda_calculator.h"
+}
+}
+
+namespace mcf {
+
+void ScoreMatrixProbs::setBad() {
+  lambda_ = -1;
+  letterProbs1_.clear();
+  letterProbs2_.clear();
+}
+
+void ScoreMatrixProbs::init(const const_int_ptr *scoreMatrix,
+                            unsigned alphabetSize) {
+  // We need to pass the parameters as 1-based pointers, hence the +1s
+  // and -1s.
+
+  std::vector<double> cells(alphabetSize * alphabetSize + 1);
+  std::vector<const double*> pointers(alphabetSize + 1);
+
+  for (unsigned i = 0; i < alphabetSize; ++i) {
+    pointers[i+1] = &cells[i * alphabetSize];
+
+    for (unsigned j = 0; j < alphabetSize; ++j) {
+      cells[i * alphabetSize + j + 1] = scoreMatrix[i][j];
+    }
+  }
+
+  letterProbs1_.resize(alphabetSize);
+  letterProbs2_.resize(alphabetSize);
+
+  lambda_ = lambda::calculate_lambda(&pointers[0], alphabetSize,
+                                     &letterProbs1_[0] - 1,
+                                     &letterProbs2_[0] - 1);
+
+  if (lambda_ < 0) setBad();
+}
+
+}
diff --git a/src/mcf_score_matrix_probs.hh b/src/mcf_score_matrix_probs.hh
new file mode 100644
index 0000000..70c9701
--- /dev/null
+++ b/src/mcf_score_matrix_probs.hh
@@ -0,0 +1,55 @@
+// Copyright 2010 Martin C. Frith
+
+// This class calculates the scale factor (lambda), and the letter
+// probabilities, that are implicit in a scoring matrix.  The
+// calculation might fail for various reasons, putting it into a
+// "bad/undefined" state.
+
+// If the score matrix is symmetric, then the two sets of letter
+// probabilities should be identical.  With this code, they might
+// differ minutely from exact identity.
+
+#ifndef MCF_SCORE_MATRIX_PROBS_HH
+#define MCF_SCORE_MATRIX_PROBS_HH
+
+#include <vector>
+
+namespace mcf {
+
+typedef const int *const_int_ptr;
+
+class ScoreMatrixProbs {
+ public:
+  ScoreMatrixProbs() { setBad(); }
+
+  ScoreMatrixProbs(const const_int_ptr *scoreMatrix, unsigned alphabetSize)
+  { init(scoreMatrix, alphabetSize); }
+
+  void init(const const_int_ptr *scoreMatrix, unsigned alphabetSize);
+
+  // Put us in the bad/undefined state.
+  void setBad();
+
+  // Are we in the bad/undefined state?
+  bool isBad() const { return (lambda_ < 0); }
+
+  // The scale factor.  In the bad/undefined state, it is negative.
+  double lambda() const { return lambda_; }
+
+  // The probabilities of letters corresponding to matrix rows (1st index).
+  // In the bad/undefined state, it is an empty vector.
+  const std::vector<double>& letterProbs1() const { return letterProbs1_; }
+
+  // The probabilities of letters corresponding to matrix columns (2nd index).
+  // In the bad/undefined state, it is an empty vector.
+  const std::vector<double>& letterProbs2() const { return letterProbs2_; }
+
+ private:
+  double lambda_;
+  std::vector<double> letterProbs1_;
+  std::vector<double> letterProbs2_;
+};
+
+}
+
+#endif
diff --git a/src/mcf_tantan_options.cc b/src/mcf_tantan_options.cc
new file mode 100644
index 0000000..00c1c6c
--- /dev/null
+++ b/src/mcf_tantan_options.cc
@@ -0,0 +1,165 @@
+// Copyright 2010 Martin C. Frith
+
+#include "mcf_tantan_options.hh"
+
+#include "mcf_util.hh"
+
+#include <unistd.h>
+
+#include <cstdlib>  // EXIT_SUCCESS
+#include <iostream>
+#include <stdexcept>
+
+namespace mcf {
+
+typedef std::runtime_error Error;
+
+static void badopt(char opt, const char *arg) {
+  throw Error(std::string("bad option value: -") + opt + " " + arg);
+}
+
+static void writeAndQuit(const std::string &text) {
+  std::cout << text;
+  throw EXIT_SUCCESS;
+}
+
+static int myGetopt(int argc, char **argv, const char *optstring,
+                    const std::string &help, const std::string &version) {
+  if (optind < argc) {
+    std::string nextarg = argv[optind];
+    if (nextarg == "--help")    writeAndQuit(help);
+    if (nextarg == "--version") writeAndQuit(version);
+  }
+  return getopt(argc, argv, optstring);
+}
+
+std::istream &operator>>(std::istream &s, TantanOptions::OutputType &x) {
+  int i = 0;
+  s >> i;
+  if (i < 0 || i > 3)
+    s.setstate(std::ios::failbit);
+  if (s)
+    x = static_cast<TantanOptions::OutputType>(i);
+  return s;
+}
+
+TantanOptions::TantanOptions() :
+    isProtein(false),
+    maskSymbol(0),
+    isPreserveLowercase(false),
+    scoreMatrixFileName(0),
+    repeatProb(0.005),
+    repeatEndProb(0.05),
+    maxCycleLength(-1),  // depends on isProtein
+    repeatOffsetProbDecay(0.9),
+    gapExistenceCost(0),
+    gapExtensionCost(-1),  // means: no gaps
+    minMaskProb(0.5),
+    outputType(maskOut),
+    indexOfFirstNonOptionArgument(-1) {}
+
+void TantanOptions::fromArgs(int argc, char **argv) {
+  std::string help = "\
+Usage: tantan [options] fasta-sequence-file(s)\n\
+Find simple repeats in sequences\n\
+\n\
+Options (default settings):\n\
+ -p  interpret the sequences as proteins\n\
+ -x  letter to use for masking, instead of lowercase\n\
+ -c  preserve uppercase/lowercase in non-masked regions\n\
+ -m  file for letter pair scores (+1/-1, but -p selects BLOSUM62)\n\
+ -r  probability of a repeat starting per position ("
+      + stringify(repeatProb) + ")\n\
+ -e  probability of a repeat ending per position ("
+      + stringify(repeatEndProb) + ")\n\
+ -w  maximum tandem repeat period to consider (100, but -p selects 50)\n\
+ -d  probability decay per period ("
+      + stringify(repeatOffsetProbDecay) + ")\n\
+ -a  gap existence cost ("
+      + stringify(gapExistenceCost) + ")\n\
+ -b  gap extension cost (infinite: no gaps)\n\
+ -s  minimum repeat probability for masking ("
+      + stringify(minMaskProb) + ")\n\
+ -f  output type: 0=masked sequence, 1=repeat probabilities,\n\
+                  2=repeat counts, 3=BED ("
+      + stringify(outputType) + ")\n\
+ -h, --help  show help message, then exit\n\
+ --version   show version information, then exit\n\
+\n\
+Report bugs to: tantan at cbrc.jp\n\
+Home page: http://www.cbrc.jp/tantan/\n\
+";
+
+  std::string version = "tantan "
+#include "version.hh"
+      "\n";
+
+  const char *optstring = "px:cm:r:e:w:d:a:b:s:f:h";
+
+  int i;
+  while ((i = myGetopt(argc, argv, optstring, help, version)) != -1) {
+    char c = static_cast<char>(i);
+    switch (c) {
+      case 'p':
+        isProtein = true;
+        break;
+      case 'x':
+        unstringify(maskSymbol, optarg);
+        break;
+      case 'c':
+        isPreserveLowercase = true;
+        break;
+      case 'm':
+        scoreMatrixFileName = optarg;
+        break;
+      case 'r':
+        unstringify(repeatProb, optarg);
+        if (repeatProb < 0 || repeatProb >= 1)
+          badopt(c, optarg);
+        break;
+      case 'e':
+        unstringify(repeatEndProb, optarg);
+        if (repeatEndProb < 0 || repeatEndProb > 1)
+          badopt(c, optarg);
+        break;
+      case 'w':
+        unstringify(maxCycleLength, optarg);
+        if (maxCycleLength <= 0 )
+          badopt(c, optarg);
+        break;
+      case 'd':
+        unstringify(repeatOffsetProbDecay, optarg);
+        if (repeatOffsetProbDecay <= 0 || repeatOffsetProbDecay > 1)
+          badopt(c, optarg);
+        break;
+      case 'a':
+        unstringify(gapExistenceCost, optarg);
+        break;
+      case 'b':
+        unstringify(gapExtensionCost, optarg);
+        if (gapExtensionCost <= 0)
+          badopt(c, optarg);
+        break;
+      case 's':
+        unstringify(minMaskProb, optarg);
+        // don't bother checking for stupid values?
+        break;
+      case 'f':
+        unstringify(outputType, optarg);
+        break;
+      case 'h':
+        writeAndQuit(help);
+      case '?':
+        throw Error("bad option");
+    }
+  }
+
+  if (gapExtensionCost > 0 && gapExistenceCost + gapExtensionCost <= 0)
+    throw Error("gap existence + extension cost is too low");
+
+  if (maxCycleLength < 0) maxCycleLength = (isProtein ? 50 : 100);
+
+  indexOfFirstNonOptionArgument = optind;
+}
+
+}
diff --git a/src/mcf_tantan_options.hh b/src/mcf_tantan_options.hh
new file mode 100644
index 0000000..bade7dc
--- /dev/null
+++ b/src/mcf_tantan_options.hh
@@ -0,0 +1,31 @@
+// Copyright 2010 Martin C. Frith
+
+#ifndef MCF_TANTAN_OPTIONS_HH
+#define MCF_TANTAN_OPTIONS_HH
+
+namespace mcf {
+
+struct TantanOptions {
+  TantanOptions();
+
+  void fromArgs(int argc, char** argv);
+
+  bool isProtein;
+  char maskSymbol;
+  bool isPreserveLowercase;
+  const char *scoreMatrixFileName;
+  double repeatProb;
+  double repeatEndProb;
+  int maxCycleLength;
+  double repeatOffsetProbDecay;
+  int gapExistenceCost;
+  int gapExtensionCost;
+  double minMaskProb;
+  enum OutputType { maskOut, probOut, countOut, bedOut } outputType;
+
+  int indexOfFirstNonOptionArgument;
+};
+
+}
+
+#endif
diff --git a/src/mcf_util.cc b/src/mcf_util.cc
new file mode 100644
index 0000000..5a17c96
--- /dev/null
+++ b/src/mcf_util.cc
@@ -0,0 +1,23 @@
+// Copyright 2010 Martin C. Frith
+
+#include "mcf_util.hh"
+
+#include <iostream>
+
+namespace mcf {
+
+std::istream &openIn(const std::string &fileName, std::ifstream &ifs) {
+  if (fileName == "-") return std::cin;
+  ifs.open(fileName.c_str());
+  if (!ifs) throw std::runtime_error("can't open file: " + fileName);
+  return ifs;
+}
+
+std::ostream &openOut(const std::string &fileName, std::ofstream &ofs) {
+  if (fileName == "-") return std::cout;
+  ofs.open(fileName.c_str());
+  if (!ofs) throw std::runtime_error("can't open file: " + fileName);
+  return ofs;
+}
+
+}
diff --git a/src/mcf_util.hh b/src/mcf_util.hh
new file mode 100644
index 0000000..94d0f33
--- /dev/null
+++ b/src/mcf_util.hh
@@ -0,0 +1,46 @@
+// Copyright 2010 Martin C. Frith
+
+#ifndef MCF_UTIL_HH
+#define MCF_UTIL_HH
+
+#include <cassert>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+
+namespace mcf {
+
+// open an input file, but if the name is "-", just return cin
+std::istream &openIn(const std::string &fileName, std::ifstream &ifs);
+
+// open an output file, but if the name is "-", just return cout
+std::ostream &openOut(const std::string &fileName, std::ofstream &ofs);
+
+template <typename T>
+std::string stringify(const T &x) {
+  std::ostringstream oss;
+  oss << x;
+  assert(oss);
+  return oss.str();
+}
+
+template <typename T>
+void unstringify(T& x, const std::string &s) {
+  std::istringstream iss(s);
+  if (!(iss >> x) || !(iss >> std::ws).eof())
+    throw std::runtime_error("can't interpret: " + s);
+}
+
+template <typename T>
+void unfilify(T& x, const std::string &fileName) {
+  std::ifstream ifs;
+  std::istream &input = openIn(fileName, ifs);
+  input >> x;
+  if (!input) throw std::runtime_error("can't read file: " + fileName);
+  // check for junk at end of file?
+}
+
+}
+
+#endif
diff --git a/src/tantan.cc b/src/tantan.cc
new file mode 100644
index 0000000..0e56d59
--- /dev/null
+++ b/src/tantan.cc
@@ -0,0 +1,462 @@
+// Copyright 2010 Martin C. Frith
+
+#include "tantan.hh"
+
+#include <algorithm>  // fill, max
+#include <cassert>
+#include <cmath>  // pow, abs
+#include <iostream>  // cerr
+#include <numeric>  // accumulate
+#include <vector>
+
+#define BEG(v) ((v).empty() ? 0 : &(v).front())
+#define END(v) ((v).empty() ? 0 : &(v).back() + 1)
+
+namespace tantan {
+
+void multiplyAll(std::vector<double> &v, double factor) {
+  for (std::vector<double>::iterator i = v.begin(); i < v.end(); ++i)
+    *i *= factor;
+}
+
+double firstRepeatOffsetProb(double probMult, int maxRepeatOffset) {
+  if (probMult < 1 || probMult > 1)
+    return (1 - probMult) / (1 - std::pow(probMult, maxRepeatOffset));
+  else
+    return 1.0 / maxRepeatOffset;
+}
+
+void checkForwardAndBackwardTotals(double fTot, double bTot) {
+  double x = std::abs(fTot);
+  double y = std::abs(bTot);
+
+  // ??? Is 1e6 suitable here ???
+  if (std::abs(fTot - bTot) > std::max(x, y) / 1e6)
+    std::cerr << "tantan: warning: possible numeric inaccuracy\n"
+              << "tantan:          forward algorithm total: " << fTot << "\n"
+              << "tantan:          backward algorithm total: " << bTot << "\n";
+}
+
+struct Tantan {
+  enum { scaleStepSize = 16 };
+
+  const uchar *seqBeg;  // start of the sequence
+  const uchar *seqEnd;  // end of the sequence
+  const uchar *seqPtr;  // current position in the sequence
+
+  int maxRepeatOffset;
+
+  const const_double_ptr *likelihoodRatioMatrix;
+
+  double b2b;  // transition probability from background to background
+  double f2b;  // transition probability from foreground to background
+  double g2g;  // transition probability from gap/indel to gap/indel
+  //double f2g;  // transition probability from foreground to gap/indel
+  //double g2f;  // transition probability from gap/indel to foreground
+  double oneGapProb;  // f2g * g2f
+  double endGapProb;  // f2g * 1
+  double f2f0;  // foreground to foreground, if there are 0 indel transitions
+  double f2f1;  // foreground to foreground, if there is 1 indel transition
+  double f2f2;  // foreground to foreground, if there are 2 indel transitions
+  double b2fDecay;
+  double b2fGrowth;
+  double b2fFirst;  // background state to first foreground state
+  double b2fLast;  // background state to last foreground state
+
+  double backgroundProb;
+  std::vector<double> foregroundProbs;
+  std::vector<double> insertionProbs;
+
+  std::vector<double> scaleFactors;
+
+  Tantan(const uchar *seqBeg,
+         const uchar *seqEnd,
+         int maxRepeatOffset,
+         const const_double_ptr *likelihoodRatioMatrix,
+         double repeatProb,
+         double repeatEndProb,
+         double repeatOffsetProbDecay,
+         double firstGapProb,
+         double otherGapProb) {
+    assert(maxRepeatOffset > 0);
+    assert(repeatProb >= 0 && repeatProb < 1);
+    // (if repeatProb==1, then any sequence is impossible)
+    assert(repeatEndProb >= 0 && repeatEndProb <= 1);
+    assert(repeatOffsetProbDecay > 0 && repeatOffsetProbDecay <= 1);
+    assert(otherGapProb >= 0 && otherGapProb <= 1);
+    assert(firstGapProb >= 0);
+    assert(repeatEndProb + firstGapProb * 2 <= 1);
+
+    this->seqBeg = seqBeg;
+    this->seqEnd = seqEnd;
+    this->seqPtr = seqBeg;
+    this->maxRepeatOffset = maxRepeatOffset;
+    this->likelihoodRatioMatrix = likelihoodRatioMatrix;
+
+    b2b = 1 - repeatProb;
+    f2b = repeatEndProb;
+    g2g = otherGapProb;
+    //f2g = firstGapProb;
+    //g2f = 1 - otherGapProb;
+    oneGapProb = firstGapProb * (1 - otherGapProb);
+    endGapProb = firstGapProb * 1;
+    f2f0 = 1 - repeatEndProb;
+    f2f1 = 1 - repeatEndProb - firstGapProb;
+    f2f2 = 1 - repeatEndProb - firstGapProb * 2;
+
+    b2fDecay = repeatOffsetProbDecay;
+    b2fGrowth = 1 / repeatOffsetProbDecay;
+
+    b2fFirst = repeatProb * firstRepeatOffsetProb(b2fDecay, maxRepeatOffset);
+    b2fLast = repeatProb * firstRepeatOffsetProb(b2fGrowth, maxRepeatOffset);
+
+    foregroundProbs.resize(maxRepeatOffset);
+    insertionProbs.resize(maxRepeatOffset - 1);
+
+    scaleFactors.resize((seqEnd - seqBeg) / scaleStepSize);
+  }
+
+  void initializeForwardAlgorithm() {
+    backgroundProb = 1.0;
+    std::fill(foregroundProbs.begin(), foregroundProbs.end(), 0.0);
+    std::fill(insertionProbs.begin(), insertionProbs.end(), 0.0);
+  }
+
+  double forwardTotal() {
+    double fromForeground = std::accumulate(foregroundProbs.begin(),
+                                            foregroundProbs.end(), 0.0);
+    fromForeground *= f2b;
+    double total = backgroundProb * b2b + fromForeground;
+    assert(total > 0);
+    return total;
+  }
+
+  void initializeBackwardAlgorithm() {
+    backgroundProb = b2b;
+    std::fill(foregroundProbs.begin(), foregroundProbs.end(), f2b);
+    std::fill(insertionProbs.begin(), insertionProbs.end(), 0.0);
+  }
+
+  double backwardTotal() {
+    assert(backgroundProb > 0);
+    return backgroundProb;
+  }
+
+  void calcForwardTransitionProbsWithGaps() {
+    double fromBackground = backgroundProb * b2fLast;
+    double *foregroundPtr = &foregroundProbs.back();
+    double f = *foregroundPtr;
+    double fromForeground = f;
+
+    if (insertionProbs.empty()) {
+      *foregroundPtr = fromBackground + f * f2f0;
+    } else {
+      double *insertionPtr = &insertionProbs.back();
+      double i = *insertionPtr;
+      *foregroundPtr = fromBackground + f * f2f1 + i * endGapProb;
+      double d = f;
+      --foregroundPtr;
+      fromBackground *= b2fGrowth;
+
+      while (foregroundPtr > &foregroundProbs.front()) {
+        f = *foregroundPtr;
+        fromForeground += f;
+        i = *(insertionPtr - 1);
+        *foregroundPtr = fromBackground + f * f2f2 + (i + d) * oneGapProb;
+        *insertionPtr = f + i * g2g;
+        d = f + d * g2g;
+        --foregroundPtr;
+        --insertionPtr;
+        fromBackground *= b2fGrowth;
+      }
+
+      f = *foregroundPtr;
+      fromForeground += f;
+      *foregroundPtr = fromBackground + f * f2f1 + d * endGapProb;
+      *insertionPtr = f;
+    }
+
+    fromForeground *= f2b;
+    backgroundProb = backgroundProb * b2b + fromForeground;
+  }
+
+  void calcBackwardTransitionProbsWithGaps() {
+    double toBackground = f2b * backgroundProb;
+    double *foregroundPtr = &foregroundProbs.front();
+    double f = *foregroundPtr;
+    double toForeground = f;
+
+    if (insertionProbs.empty()) {
+      *foregroundPtr = toBackground + f2f0 * f;
+    } else {
+      double *insertionPtr = &insertionProbs.front();
+      double i = *insertionPtr;
+      *foregroundPtr = toBackground + f2f1 * f + i;
+      double d = endGapProb * f;
+      ++foregroundPtr;
+      toForeground *= b2fGrowth;
+
+      while (foregroundPtr < &foregroundProbs.back()) {
+        f = *foregroundPtr;
+        toForeground += f;
+        i = *(insertionPtr + 1);
+        *foregroundPtr = toBackground + f2f2 * f + (i + d);
+        double oneGapProb_f = oneGapProb * f;
+        *insertionPtr = oneGapProb_f + g2g * i;
+        d = oneGapProb_f + g2g * d;
+        ++foregroundPtr;
+        ++insertionPtr;
+        toForeground *= b2fGrowth;
+      }
+
+      f = *foregroundPtr;
+      toForeground += f;
+      *foregroundPtr = toBackground + f2f1 * f + d;
+      *insertionPtr = endGapProb * f;
+    }
+
+    toForeground *= b2fLast;
+    backgroundProb = b2b * backgroundProb + toForeground;
+  }
+
+  void calcForwardTransitionProbs() {
+    if (endGapProb > 0) return calcForwardTransitionProbsWithGaps();
+
+    double fromBackground = backgroundProb * b2fLast;
+    double fromForeground = 0;
+    double *foregroundPtr = END(foregroundProbs);
+    double *foregroundBeg = BEG(foregroundProbs);
+
+    while (foregroundPtr > foregroundBeg) {
+      --foregroundPtr;
+      double f = *foregroundPtr;
+      fromForeground += f;
+      *foregroundPtr = fromBackground + f * f2f0;
+      fromBackground *= b2fGrowth;
+    }
+
+    fromForeground *= f2b;
+    backgroundProb = backgroundProb * b2b + fromForeground;
+  }
+
+  void calcBackwardTransitionProbs() {
+    if (endGapProb > 0) return calcBackwardTransitionProbsWithGaps();
+
+    double toBackground = f2b * backgroundProb;
+    double toForeground = 0;
+    double *foregroundPtr = BEG(foregroundProbs);
+    double *foregroundEnd = END(foregroundProbs);
+
+    while (foregroundPtr < foregroundEnd) {
+      toForeground *= b2fGrowth;
+      double f = *foregroundPtr;
+      toForeground += f;
+      *foregroundPtr = toBackground + f2f0 * f;
+      ++foregroundPtr;
+    }
+
+    toForeground *= b2fLast;
+    backgroundProb = b2b * backgroundProb + toForeground;
+  }
+
+  void addEndCounts(double forwardProb,
+                    double totalProb,
+                    double *transitionCounts) {
+    double toEnd = forwardProb * b2b / totalProb;
+    transitionCounts[0] += toEnd;
+  }
+
+  void addTransitionCounts(double forwardProb,
+                           double totalProb,
+                           double *transitionCounts) {
+    double toBg = forwardProb * b2b / totalProb;
+    double toFg = forwardProb * b2fFirst / totalProb;
+
+    transitionCounts[0] += backgroundProb * toBg;
+
+    for (double *i = BEG(foregroundProbs); i < END(foregroundProbs); ++i) {
+      ++transitionCounts;
+      *transitionCounts += *i * toFg;
+      toFg *= b2fDecay;
+    }
+  }
+
+  void calcEmissionProbs() {
+    const double *lrRow = likelihoodRatioMatrix[*seqPtr];
+
+    bool isNearSeqBeg = (seqPtr - seqBeg < maxRepeatOffset);
+    const uchar *seqStop = isNearSeqBeg ? seqBeg : seqPtr - maxRepeatOffset;
+
+    double *foregroundPtr = BEG(foregroundProbs);
+    const uchar *offsetPtr = seqPtr;
+
+    while (offsetPtr > seqStop) {
+      --offsetPtr;
+      *foregroundPtr *= lrRow[*offsetPtr];
+      ++foregroundPtr;
+    }
+
+    while (foregroundPtr < END(foregroundProbs)) {
+      *foregroundPtr *= 0;
+      ++foregroundPtr;
+    }
+  }
+
+  void rescale(double scale) {
+    backgroundProb *= scale;
+    multiplyAll(foregroundProbs, scale);
+    multiplyAll(insertionProbs, scale);
+  }
+
+  void rescaleForward() {
+    if ((seqPtr - seqBeg) % scaleStepSize == scaleStepSize - 1) {
+      assert(backgroundProb > 0);
+      double scale = 1 / backgroundProb;
+      scaleFactors[(seqPtr - seqBeg) / scaleStepSize] = scale;
+      rescale(scale);
+    }
+  }
+
+  void rescaleBackward() {
+    if ((seqPtr - seqBeg) % scaleStepSize == scaleStepSize - 1) {
+      double scale = scaleFactors[(seqPtr - seqBeg) / scaleStepSize];
+      rescale(scale);
+    }
+  }
+
+  void calcRepeatProbs(float *letterProbs) {
+    initializeForwardAlgorithm();
+
+    while (seqPtr < seqEnd) {
+      calcForwardTransitionProbs();
+      calcEmissionProbs();
+      rescaleForward();
+      *letterProbs = static_cast<float>(backgroundProb);
+      ++letterProbs;
+      ++seqPtr;
+    }
+
+    double z = forwardTotal();
+
+    initializeBackwardAlgorithm();
+
+    while (seqPtr > seqBeg) {
+      --seqPtr;
+      --letterProbs;
+      double nonRepeatProb = *letterProbs * backgroundProb / z;
+      // Convert nonRepeatProb to a float, so that it is more likely
+      // to be exactly 1 when it should be, e.g. for the 1st letter of
+      // a sequence:
+      *letterProbs = 1 - static_cast<float>(nonRepeatProb);
+      rescaleBackward();
+      calcEmissionProbs();
+      calcBackwardTransitionProbs();
+    }
+
+    double z2 = backwardTotal();
+    checkForwardAndBackwardTotals(z, z2);
+  }
+
+  void countTransitions(double *transitionCounts) {
+    std::vector<float> p(seqEnd - seqBeg);
+    float *letterProbs = BEG(p);
+
+    initializeForwardAlgorithm();
+
+    while (seqPtr < seqEnd) {
+      *letterProbs = static_cast<float>(backgroundProb);
+      calcForwardTransitionProbs();
+      calcEmissionProbs();
+      rescaleForward();
+      ++letterProbs;
+      ++seqPtr;
+    }
+
+    double z = forwardTotal();
+
+    addEndCounts(backgroundProb, z, transitionCounts);
+
+    initializeBackwardAlgorithm();
+
+    while (seqPtr > seqBeg) {
+      --seqPtr;
+      --letterProbs;
+      rescaleBackward();
+      calcEmissionProbs();
+      addTransitionCounts(*letterProbs, z, transitionCounts);
+      calcBackwardTransitionProbs();
+    }
+
+    double z2 = backwardTotal();
+    checkForwardAndBackwardTotals(z, z2);
+  }
+};
+
+void maskSequences(uchar *seqBeg,
+                   uchar *seqEnd,
+                   int maxRepeatOffset,
+                   const const_double_ptr *likelihoodRatioMatrix,
+                   double repeatProb,
+                   double repeatEndProb,
+                   double repeatOffsetProbDecay,
+                   double firstGapProb,
+                   double otherGapProb,
+                   double minMaskProb,
+                   const uchar *maskTable) {
+  std::vector<float> p(seqEnd - seqBeg);
+  float *probabilities = BEG(p);
+
+  getProbabilities(seqBeg, seqEnd, maxRepeatOffset,
+                   likelihoodRatioMatrix, repeatProb, repeatEndProb,
+                   repeatOffsetProbDecay, firstGapProb, otherGapProb,
+                   probabilities);
+
+  maskProbableLetters(seqBeg, seqEnd, probabilities, minMaskProb, maskTable);
+}
+
+void getProbabilities(const uchar *seqBeg,
+                      const uchar *seqEnd,
+                      int maxRepeatOffset,
+                      const const_double_ptr *likelihoodRatioMatrix,
+                      double repeatProb,
+                      double repeatEndProb,
+                      double repeatOffsetProbDecay,
+                      double firstGapProb,
+                      double otherGapProb,
+                      float *probabilities) {
+  Tantan tantan(seqBeg, seqEnd, maxRepeatOffset, likelihoodRatioMatrix,
+                repeatProb, repeatEndProb, repeatOffsetProbDecay,
+                firstGapProb, otherGapProb);
+  tantan.calcRepeatProbs(probabilities);
+}
+
+void maskProbableLetters(uchar *seqBeg,
+                         uchar *seqEnd,
+                         const float *probabilities,
+                         double minMaskProb,
+                         const uchar *maskTable) {
+  while (seqBeg < seqEnd) {
+    if (*probabilities >= minMaskProb)
+      *seqBeg = maskTable[*seqBeg];
+    ++probabilities;
+    ++seqBeg;
+  }
+}
+
+void countTransitions(const uchar *seqBeg,
+                      const uchar *seqEnd,
+                      int maxRepeatOffset,
+                      const const_double_ptr *likelihoodRatioMatrix,
+                      double repeatProb,
+                      double repeatEndProb,
+                      double repeatOffsetProbDecay,
+                      double firstGapProb,
+                      double otherGapProb,
+                      double *transitionCounts) {
+  Tantan tantan(seqBeg, seqEnd, maxRepeatOffset, likelihoodRatioMatrix,
+                repeatProb, repeatEndProb, repeatOffsetProbDecay,
+                firstGapProb, otherGapProb);
+  tantan.countTransitions(transitionCounts);
+}
+
+}
diff --git a/src/tantan.hh b/src/tantan.hh
new file mode 100644
index 0000000..53d4648
--- /dev/null
+++ b/src/tantan.hh
@@ -0,0 +1,120 @@
+// Copyright 2010 Martin C. Frith
+
+// These are routines for masking simple regions (low-complexity and
+// short-period tandem repeats) in biological sequences.  To
+// understand them in detail, see the published article (in
+// preparation).
+
+// Typically, you would just use the maskSequences routine.  The other
+// routines are more specialized.  The inputs to maskSequences are as
+// follows.
+
+// seqBeg: pointer to the start of the sequence.
+// seqEnd: pointer to one-past-the-end of the sequence.
+// maxRepeatOffset: the maximum tandem-repeat period-size to consider.
+
+// likelihoodRatioMatrix: a matrix of the form Qxy / (Px * Py), where
+// Qxy is the probability of seeing letters x and y in equivalent
+// positions of a tandem repeat, and Px and Py are the background
+// probabilities of the letters.  This matrix is related to a scoring
+// matrix (e.g. blosum62) by:
+// likelihoodRatioMatrix[x][y] = exp(lambda * scoringMatrix[x][y]).
+
+// The uchars in the sequence will be used as indexes into the matrix
+// (e.g. likelihoodRatioMatrix[x][y]).  So typically the uchars are
+// small integers (e.g. 0, 1, 2, 3).  The matrix needs to have entries
+// for any uchars that can occur.
+
+// repeatProb: the probability of a repetitive segment starting per position.
+// repeatEndProb: the probability of a repetitive segment ending per position.
+
+// repeatOffsetProbDecay: the probability of a period-(i) repeat
+// divided by the probability of a period-(i-1) repeat.
+
+// firstGapProb: the probability of initiating an insertion or
+// deletion in a repetitive region.
+
+// otherGapProb: the probability of extending an insertion or deletion
+// by one more letter.
+
+// minMaskProb: mask letters whose posterior probability of being
+// repetitive is >= this.
+
+// maskTable: how to do the masking.  Letter x will be changed to
+// maskTable[x].  So maskTable needs to have entries for any uchar
+// that can occur.
+
+// Typical usage:
+// tantan::maskSequences(seqBeg, seqEnd, 100, likelihoodRatioMatrix,
+// 0.005, 0.05, 0.9, 0, 0, 0.5, maskTable)
+
+#ifndef TANTAN_HH
+#define TANTAN_HH
+
+namespace tantan {
+
+typedef unsigned char uchar;
+typedef const double *const_double_ptr;
+
+void maskSequences(uchar *seqBeg,
+                   uchar *seqEnd,
+                   int maxRepeatOffset,
+                   const const_double_ptr *likelihoodRatioMatrix,
+                   double repeatProb,
+                   double repeatEndProb,
+                   double repeatOffsetProbDecay,
+                   double firstGapProb,
+                   double otherGapProb,
+                   double minMaskProb,
+                   const uchar *maskTable);
+
+// The following routine gets the posterior probability that each
+// letter is repetitive.  It stores the results in "probabilities",
+// which must point to enough pre-allocated space to fit the results.
+
+void getProbabilities(const uchar *seqBeg,
+                      const uchar *seqEnd,
+                      int maxRepeatOffset,
+                      const const_double_ptr *likelihoodRatioMatrix,
+                      double repeatProb,
+                      double repeatEndProb,
+                      double repeatOffsetProbDecay,
+                      double firstGapProb,
+                      double otherGapProb,
+                      float *probabilities);
+
+// The following routine masks each letter whose corresponding entry
+// in "probabilities" is >= minMaskProb.
+
+void maskProbableLetters(uchar *seqBeg,
+                         uchar *seqEnd,
+                         const float *probabilities,
+                         double minMaskProb,
+                         const uchar *maskTable);
+
+// The following routine counts the expected number of transitions
+// from the background (non-repeat) state to other states.  It adds
+// the results to "transitionCounts", which must point to
+// pre-initialized space for (maxRepeatOffset+1) items.  The
+// background->background transition count is stored in
+// transitionCounts[0].  The background->(period-i repeat) transition
+// count is stored in transitionCounts[i].
+
+// (In this routine, the HMM begin and end states are counted as
+// background states.  Thus, begin->X is added to background->X, and
+// X->end is added to X->background.)
+
+void countTransitions(const uchar *seqBeg,
+                      const uchar *seqEnd,
+                      int maxRepeatOffset,
+                      const const_double_ptr *likelihoodRatioMatrix,
+                      double repeatProb,
+                      double repeatEndProb,
+                      double repeatOffsetProbDecay,
+                      double firstGapProb,
+                      double otherGapProb,
+                      double *transitionCounts);
+
+}
+
+#endif
diff --git a/src/tantan_app.cc b/src/tantan_app.cc
new file mode 100644
index 0000000..b343ecd
--- /dev/null
+++ b/src/tantan_app.cc
@@ -0,0 +1,293 @@
+// Copyright 2010 Martin C. Frith
+
+// Mask simple regions (low complexity & short-period tandem repeats)
+// in biological sequences.
+
+#include "mcf_alphabet.hh"
+#include "mcf_fasta_sequence.hh"
+#include "mcf_score_matrix.hh"
+#include "mcf_score_matrix_probs.hh"
+#include "mcf_tantan_options.hh"
+#include "mcf_util.hh"
+#include "tantan.hh"
+
+#include <algorithm>  // copy, fill_n
+#include <cassert>
+#include <cmath>
+#include <cstring>  // strchr
+#include <cstdlib>  // EXIT_SUCCESS, EXIT_FAILURE
+#include <exception>  // exception
+#include <fstream>
+#include <iostream>
+#include <new>  // bad_alloc
+
+#define BEG(v) ((v).empty() ? 0 : &(v).front())
+#define END(v) ((v).empty() ? 0 : &(v).back() + 1)
+
+typedef std::runtime_error Error;
+
+using namespace mcf;
+
+// move this function to a reusable file?
+bool isDubiousDna(const uchar *beg, const uchar *end) {
+  int badLetters = 0;
+  if (end - beg > 100) end = beg + 100;  // just check the first 100 letters
+  while (beg < end) {
+    if (!std::strchr("AaCcGgTtNnUu", *beg)) {
+      ++badLetters;
+      if (badLetters > 10) return true;
+    }
+    ++beg;
+  }
+  return false;
+}
+
+namespace {
+TantanOptions options;
+Alphabet alphabet;
+
+enum { scoreMatrixSize = 64 };
+int fastMatrix[scoreMatrixSize][scoreMatrixSize];
+int *fastMatrixPointers[scoreMatrixSize];
+double probMatrix[scoreMatrixSize][scoreMatrixSize];
+double *probMatrixPointers[scoreMatrixSize];
+
+double firstGapProb;
+double otherGapProb;
+
+uchar hardMaskTable[Alphabet::capacity];
+const uchar *maskTable;
+
+std::vector<double> transitionCounts;
+double transitionTotal;
+}
+
+void initAlphabet() {
+  if (options.isProtein) alphabet.fromString(Alphabet::protein);
+  else                   alphabet.fromString(Alphabet::dna);
+}
+
+void initScoresAndProbabilities() {
+  std::copy(fastMatrix, fastMatrix + scoreMatrixSize, fastMatrixPointers);
+  std::copy(probMatrix, probMatrix + scoreMatrixSize, probMatrixPointers);
+
+  ScoreMatrix scoreMatrix;
+
+  if (options.scoreMatrixFileName)
+    unfilify(scoreMatrix, options.scoreMatrixFileName);
+  else if (options.isProtein)
+    unstringify(scoreMatrix, ScoreMatrix::blosum62);
+  else
+    scoreMatrix.initMatchMismatch(1, 1, "ACGTU");  // allow for RNA
+
+  scoreMatrix.makeFastMatrix(fastMatrixPointers, scoreMatrixSize,
+                             alphabet.lettersToNumbers,
+                             scoreMatrix.minScore(), false);
+
+  ScoreMatrixProbs smp(fastMatrixPointers, alphabet.size);
+  if (smp.isBad())
+    throw Error("can't calculate probabilities for this score matrix");
+
+  for (int i = 0; i < scoreMatrixSize; ++i)
+    for (int j = 0; j < scoreMatrixSize; ++j)
+      probMatrix[i][j] = std::exp(smp.lambda() * fastMatrix[i][j]);
+
+  if (options.gapExtensionCost > 0) {
+    int firstGapCost = options.gapExistenceCost + options.gapExtensionCost;
+    firstGapProb = std::exp(-smp.lambda() * firstGapCost);
+    otherGapProb = std::exp(-smp.lambda() * options.gapExtensionCost);
+
+    // the gap existence cost includes the gap ending cost:
+    firstGapProb /= (1 - otherGapProb);
+
+    // XXX check if firstGapProb is too high
+  }
+
+  //std::cerr << "lambda: " << smp.lambda() << "\n";
+  //std::cerr << "firstGapProb: " << firstGapProb << "\n";
+  //std::cerr << "otherGapProb: " << otherGapProb << "\n";
+}
+
+void initMaskTable() {
+  uchar maskSymbol = static_cast<uchar>(options.maskSymbol);
+  uchar maskNumber = alphabet.lettersToNumbers[maskSymbol];
+  std::fill_n(hardMaskTable, Alphabet::capacity, maskNumber);
+
+  if (maskSymbol == 0) maskTable = alphabet.numbersToLowercase;
+  else                 maskTable = hardMaskTable;
+}
+
+std::string firstWord(const std::string &s) {
+  std::string word;
+  std::istringstream iss(s);
+  iss >> word;
+  return word;  // might be empty
+}
+
+void writeBedLine(const std::string &seqName, const float *origin,
+                  const float *beg, const float *end, std::ostream &out) {
+  out << seqName << '\t' << (beg - origin) << '\t' << (end - origin) << '\n';
+}
+
+void writeBed(const float *probBeg, const float *probEnd,
+              const std::string &seqName, std::ostream &output) {
+  if (seqName.empty()) throw Error("missing sequence name");
+  const float *maskBeg = 0;  // pointer to start of masked tract
+  for (const float *i = probBeg; i < probEnd; ++i) {
+    if (*i >= options.minMaskProb) {  // this position is masked
+      if (maskBeg == 0) maskBeg = i;
+    } else {  // this position is not masked
+      if (maskBeg) writeBedLine(seqName, probBeg, maskBeg, i, output);
+      maskBeg = 0;
+    }
+  }
+  if (maskBeg) writeBedLine(seqName, probBeg, maskBeg, probEnd, output);
+}
+
+void processOneSequence(FastaSequence &f, std::ostream &output) {
+  uchar *beg = BEG(f.sequence);
+  uchar *end = END(f.sequence);
+
+  alphabet.encodeInPlace(beg, end);
+
+  if (options.outputType == options.maskOut) {
+    tantan::maskSequences(beg, end, options.maxCycleLength,
+                          probMatrixPointers,
+                          options.repeatProb, options.repeatEndProb,
+                          options.repeatOffsetProbDecay,
+                          firstGapProb, otherGapProb,
+                          options.minMaskProb, maskTable);
+    alphabet.decodeInPlace(beg, end);
+    output << f;
+  } else if (options.outputType == options.countOut) {
+    tantan::countTransitions(beg, end, options.maxCycleLength,
+                             probMatrixPointers,
+                             options.repeatProb, options.repeatEndProb,
+                             options.repeatOffsetProbDecay,
+                             firstGapProb, otherGapProb,
+                             BEG(transitionCounts));
+    double sequenceLength = static_cast<double>(f.sequence.size());
+    transitionTotal += sequenceLength + 1;
+  } else {
+    std::vector<float> probabilities(end - beg);
+    float *probBeg = BEG(probabilities);
+    float *probEnd = END(probabilities);
+    tantan::getProbabilities(beg, end, options.maxCycleLength,
+                             probMatrixPointers,
+                             options.repeatProb, options.repeatEndProb,
+                             options.repeatOffsetProbDecay,
+                             firstGapProb, otherGapProb, probBeg);
+    if (options.outputType == options.probOut) {
+      output << '>' << f.title << '\n';
+      for (float *i = probBeg; i < probEnd; ++i)
+        output << *i << '\n';
+    } else {
+      writeBed(probBeg, probEnd, firstWord(f.title), output);
+    }
+  }
+}
+
+void processOneFile(std::istream &input, std::ostream &output) {
+  bool isFirstSequence = true;
+
+  // This code strives to minimize memory usage.  The sequence-reading
+  // operation does not overwrite the sequence until it finishes
+  // reading successfully.  So, we don't want to overwrite a large,
+  // old sequence.  Hence, we make a brand-new FastaSequence each time
+  // through the loop.
+  while (true) {
+    FastaSequence f;
+    if (!(input >> f)) break;
+    if (isFirstSequence && !options.isProtein &&
+        isDubiousDna(BEG(f.sequence), END(f.sequence)))
+      std::cerr << "tantan: that's some funny-lookin DNA\n";
+    processOneSequence(f, output);
+    isFirstSequence = false;
+  }
+}
+
+void writeCounts(std::ostream &output) {
+  double bg2bg = transitionCounts[0];
+
+  output << "#period" << '\t' << "estimated number of tracts" << '\n';
+  double repeatCountSum = 0;
+  double weightedSum = 0;
+  for (int i = 1; i <= options.maxCycleLength; ++i) {
+    assert(transitionCounts[i] >= 0);
+    output << i << '\t' << transitionCounts[i] << '\n';
+    repeatCountSum += transitionCounts[i];
+    weightedSum += i * transitionCounts[i];
+  }
+
+  output << "# estimated total number of repetitive tracts: "
+         << repeatCountSum << '\n';
+
+  output << "# estimated number of background-to-background transitions: "
+         << bg2bg << '\n';
+
+  output << "# total number of transitions (#letters + #sequences): "
+         << transitionTotal << '\n';
+
+  double probDecay = 1 - repeatCountSum / weightedSum;
+  output << "# best-fit probability decay per period: " << probDecay << '\n';
+
+  double repeatProb = repeatCountSum / (repeatCountSum + bg2bg);
+  output << "# best-fit probability of a repeat starting per position: "
+         << repeatProb << '\n';
+
+  if (firstGapProb > 0) return;
+  // The remaining calculations are correct only if there are no gaps.
+
+  // If repeatProb and repeatEndProb are fixed to be the same value,
+  // and there are no gaps:
+  // repeatProb = 2 * repeatCountSum / transitionTotal;
+
+  double fg2fg = transitionTotal - bg2bg - 2 * repeatCountSum;
+  double repeatEndProb = repeatCountSum / (repeatCountSum + fg2fg);
+  output << "# best-fit probability of a repeat ending per position: "
+         << repeatEndProb << '\n';
+}
+
+int main(int argc, char **argv)
+try {
+  options.fromArgs(argc, argv);
+
+  initAlphabet();
+  initScoresAndProbabilities();
+  initMaskTable();
+
+  // do this after initMaskTable, so that the mask symbol can be lowercase:
+  if (!options.isPreserveLowercase) alphabet.makeCaseInsensitive();
+
+  if (options.outputType == options.countOut)
+    transitionCounts.resize(options.maxCycleLength + 1);
+
+  std::ostream &output = std::cout;
+  if (options.outputType == options.probOut)
+    output.precision(3);
+
+  if (options.indexOfFirstNonOptionArgument == argc)
+    processOneFile(std::cin, output);
+
+  for (int i = options.indexOfFirstNonOptionArgument; i < argc; ++i) {
+    std::ifstream ifs;
+    std::istream &input = openIn(argv[i], ifs);
+    processOneFile(input, output);
+  }
+
+  if (options.outputType == options.countOut)
+    writeCounts(output);
+
+  return EXIT_SUCCESS;
+}
+catch( const std::bad_alloc& e ) {  // bad_alloc::what() may be unfriendly
+  std::cerr << "tantan: out of memory\n";
+  return EXIT_FAILURE;
+}
+catch (const std::exception &e) {
+  std::cerr << "tantan: " << e.what() << '\n';
+  return EXIT_FAILURE;
+}
+catch (int i) {
+  return i;
+}
diff --git a/src/version.hh b/src/version.hh
new file mode 100644
index 0000000..ff97115
--- /dev/null
+++ b/src/version.hh
@@ -0,0 +1 @@
+"13"
diff --git a/test/atMask.mat b/test/atMask.mat
new file mode 100644
index 0000000..39f35a4
--- /dev/null
+++ b/test/atMask.mat
@@ -0,0 +1,14 @@
+# This scoring matrix targets alignments with the following properties.
+# Percent identity: 92.1563
+# Percent A+T: 78.935
+# Ratio of transitions to transversions: 0.332553
+# Ratio of transition rate to transversion rate (alpha/beta): 1
+# Expected number of transitions per site: 0.0208262
+# Expected number of transversions per site: 0.0626253
+# Expected number of substitutions per site: 0.0834515
+# Scale parameter (lambda): 0.427882
+   a  c  g  t
+a  2 -5 -5 -5
+c -5  5 -5 -5
+g -5 -5  5 -5
+t -5 -5 -5  2
diff --git a/test/hg19_chrM.fa b/test/hg19_chrM.fa
new file mode 100644
index 0000000..020e694
--- /dev/null
+++ b/test/hg19_chrM.fa
@@ -0,0 +1,333 @@
+>chrM
+GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT
+TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG
+GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT
+CTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACCTACTA
+AAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATAACAATTGAAT
+GTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
+AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGC
+CAAACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAAT
+TTTATCTTTAGGCGGTATGCACTTTTAACAGTCACCCCCCAACTAACACA
+TTATTTTCCCCTCCCACTCCCATACTACTAATCTCATCAATACAACCCCC
+GCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAAC
+CAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
+AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAA
+ATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGC
+AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAG
+GGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCC
+ACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAATAAACGAAAGT
+TTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
+GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTT
+TAGATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAA
+CTCCAGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAAC
+ACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGC
+CCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGA
+GCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
+GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGC
+TCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGT
+AAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGG
+TGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTT
+ATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGT
+GCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
+TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATA
+GAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACG
+AACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTT
+CAACTTAACTTGACCGCTCTGAGCTAAACCTAGCCCCAAACCCACTCCAC
+CTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGG
+CGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
+TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTT
+CTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAA
+GACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCC
+GTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCT
+ACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTT
+TAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
+TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGA
+GTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGA
+AAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCCAAACATATAACT
+GAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAA
+TGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCA
+GATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
+ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAG
+GAAAGGTTAAAAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTT
+TACCAAAAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCC
+CAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAaaggtagca
+taatcacttgttccttaaatagggacctgtatgaatggctccacgagggt
+tcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
+cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTA
+ATGCAAACAGTACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCA
+TTAAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCA
+GTACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGAT
+CCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATC
+CTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
+CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGA
+TTAAAGTCCTACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTT
+CTATCTACTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCC
+TACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTAT
+TATACCCACACCCACCCAAGAACAGGGTTTgttaagatggcagagcccgg
+taatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
+taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAA
+TCGCAATGGCATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATA
+CAACTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACC
+CTTCGCTGACGCCATAAAACTCTTCACCAAAGAGCCCCTAAAACCCGCCA
+CATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCATC
+GCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
+CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACT
+CAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGC
+GCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCAT
+CATTCTACTATCAACATTACTAATAAGTGGCTCCTTTAACCTCTCCACCC
+TTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTG
+GCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
+CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAAT
+ACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATT
+ATTATAATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGA
+CGCACTCTCCCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTAC
+TTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGC
+TACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
+AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTC
+CCCCTCAAACCTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGT
+AAATAATAGGAGCTTAAACCCCCTTATTTctaggactatgagaatcgaac
+ccatccctgagaatccaaaattctccgtgccacctatcacaccccatcct
+aAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTG
+GTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
+TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATT
+TTTTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTC
+TAACCAAAAAAATAAACCCTCGTTCCACAGAAGCTGCCATCAAGTATTTC
+CTCACGCAAGCAACCGCATCCATAATCCTTCTAATAGCTATCCTCTTCAA
+CAATATACTCTCCGGACAATGAACCATAACCAATACTACCAATCAATACT
+CATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
+TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGG
+CCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACC
+AAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTA
+TCCATCATAGCAGGCAGTTGAGGTGGATTAAACCAAACCCAGCTACGCAA
+AATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTC
+TACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
+CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGAC
+CCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAA
+TTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGCTAACCGGCTTT
+TTGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAACAATAGCCTCAT
+CATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACC
+TACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
+GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCC
+CACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATAC
+TAATAATCTTATAGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAG
+CCCTCAGTAAGTTGCAATACTTAATTTCTGCAACAGCTAAGGACTGCAAA
+ACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAA
+GCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
+TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAA
+AAAGGCGGGAGAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCA
+ATTCAATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTG
+TCTTTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCC
+ACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTG
+GAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
+CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGG
+TAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAA
+TCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTA
+GTTCCCCTAATAATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAA
+CATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTG
+CTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
+GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTC
+CTTACACCTAGCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCA
+CAACAATTATCAATATAAAACCCCCTGCCATAACCCAATACCAAACGCCC
+CTCTTCGTCTGATCCGTCCTAATCACAGCAGTCCTACTTCTCCTATCTCT
+CCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCA
+ACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
+CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACC
+AGGCTTCGGAATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAG
+AACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTC
+CTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGT
+AGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCA
+CCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
+AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCAC
+CGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCG
+TACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCA
+ATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCT
+ATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATCCATTTCACTA
+TCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
+CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCAC
+ATGAAACATCCTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAA
+TATTAATAATTTTCATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTC
+CTAATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCC
+CCCACCCTACCACACATTCGAAGAACCCGTATACATAAAATCTAGACAaa
+aaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
+ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGT
+CAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGC
+GCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCA
+CCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTC
+CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACAT
+CTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
+TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGAC
+GAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTA
+CTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACA
+TACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTT
+GACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTAC
+ATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
+CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGA
+CCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAG
+TTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAG
+GGCCCGTATTTACCCTATAGCACCCCCTCTACCCCCTCTAGAGCCCACTG
+TAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAAC
+ACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
+TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATA
+TTAAACACAAACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAA
+AAATTATAACAAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTC
+ATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTC
+TATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCGA
+CTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
+AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCT
+TAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCA
+TTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCCCTT
+ATGAGCGGGCGCAGTGATTATAGGCTTTCGCTCTAAGATTAAAAATGCCC
+TAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTATCCCCATACTA
+GTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
+ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTG
+GAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATC
+ATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTT
+AATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACA
+ACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACCCAGCC
+CATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
+GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACT
+AACCAACACACTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAA
+GCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATAC
+GGGATAATCCTATTTATTACCTCAGAAGTTTTTTTCTTCGCAGGATTTTT
+CTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAACTAGGAGGGC
+ACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
+CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCA
+CCATAGTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTA
+TTACAATTTTACTGGGTCTCTATTTTACCCTCCTACAAGCCTCAGAGTAC
+TTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTT
+TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCC
+TCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
+CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGT
+TTGACTATTTCTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTA
+GTATAAATAGTACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAA
+AAAAGAGTAATAAACTTCGCCTTAATTTTAATAATCAACACCCTCCTAGC
+CTTACTACTAATAATTATTACATTTTGACTACCACAACTCAACGGCTACA
+TAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
+CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATT
+ATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAA
+CAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATC
+CTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAGC
+CGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGACTCATTAAATT
+ATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
+GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCAT
+ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAG
+CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCT
+ATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCT
+ACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAA
+ACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
+TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCAC
+AGCCTAATTATTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAA
+CAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCC
+CCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGC
+CAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAACTCTACCTCTC
+TATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
+AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTG
+GCTATCATCACCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCAC
+ATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCAC
+TAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACT
+CTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACT
+AGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
+TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTA
+CTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCAC
+ACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTAC
+TATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACA
+GACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGT
+AGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
+TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCA
+AACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGG
+ACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCC
+TCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCT
+GTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGG
+ACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
+CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTC
+ACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCT
+ATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTT
+TAACCAAAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTT
+ATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAA
+CAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
+GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACA
+CTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACC
+ACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATC
+CATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCA
+TGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACC
+CAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
+ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCAC
+TGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTA
+CTCATTTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACCTATT
+CCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCA
+TCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCA
+GTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
+ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAA
+ACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCA
+GGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGA
+AGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAG
+CAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCA
+CTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
+AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCT
+CCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAA
+CCACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCAT
+ACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAG
+ATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACC
+TCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
+TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAA
+ACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCC
+TATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCC
+CACCCTTACTAACATTAACGAAAATAACCCCACCCTACTAAACCCCATTA
+AACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCATTACTAACAAC
+ATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
+CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCA
+ACTACCTAACCAACAAACTTAAAATAAAATCCCCACTATGCACATTTTAT
+TTCTCCAACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCC
+CTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACC
+TAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATC
+TCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
+CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAAC
+CTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGT
+TCAACCAGTAACCACTACTAATCAACGCCCATAATCATACAAAGCCCCCG
+CACCAATAGGATCCTCCCGAATCAACCCTGACCCCTCTCCTTCATAAATT
+ATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCATCATA
+CTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
+CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCA
+ATAGCCATCGCTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATA
+AATTAAAAAAACTATTAAACCCATATAACCTCCCCCAAAATTCAGAATAA
+TAACACACCCGACCACACCGCTAACAATCAGTACTAAACCCCCATAAATA
+GGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTAAACCCACACT
+CAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
+CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATG
+ACCCCAATACGCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATT
+CATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCT
+CACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTA
+GCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCA
+CATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
+ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGC
+CTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTAT
+CCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGT
+GAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCC
+GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTA
+CTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
+TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCAC
+GAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAAT
+CACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTCT
+TCCTTCTCTCCTTAATGACATTAACACTATTCTCACCAGACCTCCTAGGC
+GACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCCCTCCCCACAT
+CAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
+CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTA
+GCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCG
+CCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATTC
+TAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGA
+CAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAAC
+TATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
+TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAG
+GACAAATCAGAGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAA
+GATTCTAATTTAAACTATTCTCTGTTCTTTCATGGGGAAGCAGATTTGGG
+TACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTAC
+ATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCA
+CCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
+TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAAC
+TCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTT
+AACAGTACATAGTACATAAAGTCATTTACCGTACATAGCACATTACAGTC
+AAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTG
+ACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCT
+CGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
+ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCC
+CTTAAATAAGACATCACGATG
diff --git a/test/panda.fastq b/test/panda.fastq
new file mode 100644
index 0000000..94630a8
--- /dev/null
+++ b/test/panda.fastq
@@ -0,0 +1,400 @@
+ at SRR019778.1 I331_2_FC3076HAAXX:1:1:1416:1963 length=45
+GTTCAATGGGGGAAAGGAGAGTCCTTCAACAAATGGTGCGGAGAA
++SRR019778.1 I331_2_FC3076HAAXX:1:1:1416:1963 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIIIIB2I<F4HII6I:HI+I//
+ at SRR019778.2 I331_2_FC3076HAAXX:1:1:1830:1688 length=45
+GTTTTCAATGTGTTGAAAAGTGTATTCTATATTTTTAGTTTGAAC
++SRR019778.2 I331_2_FC3076HAAXX:1:1:1830:1688 length=45
+IIIIIIIIIIIIIIID0A:IDCF<IIII3I-IIIII,&>HH(-0+
+ at SRR019778.3 I331_2_FC3076HAAXX:1:1:1611:1333 length=45
+GTTTTCCCATTTGTCCTTAATCCACCTAAAAAAGATTTGCATGGG
++SRR019778.3 I331_2_FC3076HAAXX:1:1:1611:1333 length=45
+IIIIIIIIIIIIIEIIIIG:IDIGECI454,10+0A?8/4+40%(
+ at SRR019778.4 I331_2_FC3076HAAXX:1:1:1277:1927 length=45
+GTTGTGTGTGTATTGTGTGTTGTGTGTGGTGTGTGTGTTTTTTTT
++SRR019778.4 I331_2_FC3076HAAXX:1:1:1277:1927 length=45
+IIIIIIIIIIIIII6IIIIIIDIII4I%4I*I0IAI+II8/3I+I
+ at SRR019778.5 I331_2_FC3076HAAXX:1:1:1494:1984 length=45
+GGATGTTTATTTTCCTGAACCAGGGTTTGGCATTGAAGAGACAGA
++SRR019778.5 I331_2_FC3076HAAXX:1:1:1494:1984 length=45
+IIIIIIIIIIIIIIIIIIIII/III at III@<-I6I'3I67-++>)
+ at SRR019778.6 I331_2_FC3076HAAXX:1:1:682:1158 length=45
+GTTTGTTTCCTAGAGTTAAGAGTCTCTCATGGTTTGTCTCCCTCT
++SRR019778.6 I331_2_FC3076HAAXX:1:1:682:1158 length=45
+IIIIIIIIIIIII:IIII=IEIIHI at IC2I9;<II*I*H/.%2+9
+ at SRR019778.7 I331_2_FC3076HAAXX:1:1:1277:1951 length=45
+GAGTGAGAATCATGCAAAGTTACAAAAAATGGCCTTTCCTACCAT
++SRR019778.7 I331_2_FC3076HAAXX:1:1:1277:1951 length=45
+IIIIIIIIIIIIIIII9IIIIIIIFIB at AIFIIIIIEEA=1 at 6+9
+ at SRR019778.8 I331_2_FC3076HAAXX:1:1:1316:1943 length=45
+GTCTATATTCTTTATCATGTGTGACCATGGAAGTCTCTAATTCGT
++SRR019778.8 I331_2_FC3076HAAXX:1:1:1316:1943 length=45
+IIIIIIIIIIIIIIIIIIIIHI0IIIGIIA6=EE at C?I,,IA+/=
+ at SRR019778.9 I331_2_FC3076HAAXX:1:1:1222:1934 length=45
+GAATACCCACCATTTGCATCAATATGGACGGAGCTGGAGGAGATT
++SRR019778.9 I331_2_FC3076HAAXX:1:1:1222:1934 length=45
+IIIIIIIIIIIIIIIIIIIII+E<AII*IIICAECI++?I&I*A.
+ at SRR019778.10 I331_2_FC3076HAAXX:1:1:1703:940 length=45
+GGGAAAGTGATAGATAAGGTAGCAAGGCAGATAAGCAAATTCATA
++SRR019778.10 I331_2_FC3076HAAXX:1:1:1703:940 length=45
+IIIIIIIIIIIIIHII7II7IIF59598.:/=42/..-+:/')2)
+ at SRR019778.11 I331_2_FC3076HAAXX:1:1:1444:1980 length=45
+GTTCGGGGGTGTAGTGTTCTATATATATCTATGAGGTCCAACTCA
++SRR019778.11 I331_2_FC3076HAAXX:1:1:1444:1980 length=45
+IIIIIIIIIIIIIIIIIIIIBICI1I=III9I@)I54C1+*,60&
+ at SRR019778.12 I331_2_FC3076HAAXX:1:1:1371:104 length=45
+GATTAAGAAGTTGTGGTCCATATATACAATGGAATATTACTCAGC
++SRR019778.12 I331_2_FC3076HAAXX:1:1:1371:104 length=45
+IIIIIIIIIIIIIIII0II5IDI9I;I;>I@@//?4DA5080,&,
+ at SRR019778.13 I331_2_FC3076HAAXX:1:1:1245:2003 length=45
+GTTTCCATAACCAGAAATATACAGCGGATTAGAGAAGTGATTTTT
++SRR019778.13 I331_2_FC3076HAAXX:1:1:1245:2003 length=45
+IIIIIIIIIIIIIIG>1I4I5I9IIII*II.I+G)-B7G&:B at C@
+ at SRR019778.14 I331_2_FC3076HAAXX:1:1:1226:1990 length=45
+GGGAGGATCTAGCCTTAGAACCAAGAAACAAAATGTGAGGGGAAA
++SRR019778.14 I331_2_FC3076HAAXX:1:1:1226:1990 length=45
+IIIIIIIIIIIIIIII6IIIIIAII>.III-3/II3I1IIII.--
+ at SRR019778.15 I331_2_FC3076HAAXX:1:1:1879:1017 length=45
+GTGATGTGCCATTGACCTATTTGTTTATCTTTATACCAATACTTC
++SRR019778.15 I331_2_FC3076HAAXX:1:1:1879:1017 length=45
+IIIIIIIIIIIIII2III/IIDGFII/I7IG:5CC;/0&=)+;4+
+ at SRR019778.16 I331_2_FC3076HAAXX:1:1:1478:1340 length=45
+GTATTTTACAGAAGTTTCTCTGGGTCTCAGATTCCTACCTGACCC
++SRR019778.16 I331_2_FC3076HAAXX:1:1:1478:1340 length=45
+IIIIIIIIIIIIIIDIIIIII>;C;DI at D*3IE<2B/20;&'/-/
+ at SRR019778.17 I331_2_FC3076HAAXX:1:1:1489:1981 length=45
+GGGAAAGATAGAGAGCCTTGTCTTCAAAATGGCTTATCCAGTAAG
++SRR019778.17 I331_2_FC3076HAAXX:1:1:1489:1981 length=45
+IIIIIIIIIIIIIIIIIIIIIIIII?+<5IIIIIB*66<%=3'(5
+ at SRR019778.18 I331_2_FC3076HAAXX:1:1:1710:940 length=45
+GAGAATCCACAAGAAGTTGCTGTTAGGGATTTGTTCTTATTTTAA
++SRR019778.18 I331_2_FC3076HAAXX:1:1:1710:940 length=45
+IIIIIIIIIIIII0CIIIIIII at I(-?6-@?C.37,A:%D;:&**
+ at SRR019778.19 I331_2_FC3076HAAXX:1:1:1339:973 length=45
+GAAAAGGCATAAATATTTCATTCAATTGCAAGCTTAATATAAGTC
++SRR019778.19 I331_2_FC3076HAAXX:1:1:1339:973 length=45
+IIIIIIIIIIIIIIFIIIIHIIII:II;II63=IIC.GFI76(..
+ at SRR019778.20 I331_2_FC3076HAAXX:1:1:1408:1952 length=45
+GAGTTTTCCATTTAAGAACTTGAGTGTCATCGCCTTAGGAAAGAC
++SRR019778.20 I331_2_FC3076HAAXX:1:1:1408:1952 length=45
+IIIIIIIIIIIII at FIFGIIII8I?+HIIDI=E>I>8?1)1&*//
+ at SRR019778.21 I331_2_FC3076HAAXX:1:1:1468:1371 length=45
+GAAGAGAAAGGAGATACCATCATTTGTCATTAACAGGATTACCTT
++SRR019778.21 I331_2_FC3076HAAXX:1:1:1468:1371 length=45
+IIIIIIIIIIIIIIIIIIIIIFIIII=I<I=88;29007=3-250
+ at SRR019778.22 I331_2_FC3076HAAXX:1:1:1903:903 length=45
+GCGAGAAGATAAAATGGAAGAAAAAGGTCTCATTTGTAACAGTGA
++SRR019778.22 I331_2_FC3076HAAXX:1:1:1903:903 length=45
+IIIIIIIIIIIIIIIIIAGIHIA@@E?:BII1IFD:76;94000+
+ at SRR019778.23 I331_2_FC3076HAAXX:1:1:1757:1008 length=45
+GCTGAGAATTTCGCGGCAACTTTTGAAATAATTGGGAGATAAAGG
++SRR019778.23 I331_2_FC3076HAAXX:1:1:1757:1008 length=45
+IIIIIIIIIIIIIIIIIB:BIIII@</9G;0GI3'+*0+B*4+(/
+ at SRR019778.24 I331_2_FC3076HAAXX:1:1:1902:948 length=45
+GAAGGTTGACAAGCAGTATTTAGTGGGCAAAGGAGGAGAGAGGAG
++SRR019778.24 I331_2_FC3076HAAXX:1:1:1902:948 length=45
+IIIIIIIIIIIIIIIIG at III=IIII9C=9,HB4B at +A+@(=9+7
+ at SRR019778.25 I331_2_FC3076HAAXX:1:1:665:1242 length=45
+GATTATATTTGGTCTTGAAAGAGGGAAGGACGATAGGCAGATAGG
++SRR019778.25 I331_2_FC3076HAAXX:1:1:665:1242 length=45
+IIIIIIIIIIIIIIIIDI<IBAIII>3I:13=A<@,/03I2<+:-
+ at SRR019778.26 I331_2_FC3076HAAXX:1:1:1225:1945 length=45
+GTAATGATTGAATAAATCTTATTAACTTCTTAATCTTTTAATTTT
++SRR019778.26 I331_2_FC3076HAAXX:1:1:1225:1945 length=45
+IIIIIIIIIIIIIIIIIIIIIIIB4HIIIII:3IIIIII5)IIGI
+ at SRR019778.27 I331_2_FC3076HAAXX:1:1:1506:1294 length=45
+GCTTCAAGAAGAAGGGCATGACTCACCCCCCAGGAACAGAAGCTG
++SRR019778.27 I331_2_FC3076HAAXX:1:1:1506:1294 length=45
+IIIIIIIIIIIIIIIIIIIIIIII at IIICDB15B+39.9*.B4:5
+ at SRR019778.28 I331_2_FC3076HAAXX:1:1:1318:1418 length=45
+GATTTTATTCTTATTGTTTTGATGGTGACCTTTAATATTTTCTTA
++SRR019778.28 I331_2_FC3076HAAXX:1:1:1318:1418 length=45
+IIIIIIIIIIIIIIIIIIIIADI,BFIA..IIIC2$7IFEC1&;)
+ at SRR019778.29 I331_2_FC3076HAAXX:1:1:1332:1930 length=45
+GAGAATAAGTCAATACCAAGGTGAATTGAATAATGGCCAAGAATT
++SRR019778.29 I331_2_FC3076HAAXX:1:1:1332:1930 length=45
+IIIIIIIIIIIIIIIIGIHIIII58IIII5I at 9AI8I0=,B,-3>
+ at SRR019778.30 I331_2_FC3076HAAXX:1:1:1099:1168 length=45
+GTTTATTCTCTATCATTTAGAGTCTCAGCTGTTTGGGTTTCTAGA
++SRR019778.30 I331_2_FC3076HAAXX:1:1:1099:1168 length=45
+IIIIIIIIIIIIII;IIII8I+BFII+C.2+8I.,&%3$$3/$)$
+ at SRR019778.31 I331_2_FC3076HAAXX:1:1:1529:1292 length=45
+GGATAGCCCCAAGTGTTACAAATTGTAAGTAAATATTTGTAGGGA
++SRR019778.31 I331_2_FC3076HAAXX:1:1:1529:1292 length=45
+IIIIIIIIIIIIIIIII>I<<8IIIID2I=/7.;2EH at 22/6+&*
+ at SRR019778.32 I331_2_FC3076HAAXX:1:1:1256:1996 length=45
+GTTGGGGATTAGAAAGTAGATGTAAGGAGTAGTAAAGGGAATACA
++SRR019778.32 I331_2_FC3076HAAXX:1:1:1256:1996 length=45
+IIIIIIIIIIIIIHIIIIIIIIHI6II5I;<IB61.EFI/5A52,
+ at SRR019778.33 I331_2_FC3076HAAXX:1:1:1774:1770 length=45
+GAGATGTGTGGAAGAGAACGTTGTAACACAAAGAACTTCACCATA
++SRR019778.33 I331_2_FC3076HAAXX:1:1:1774:1770 length=45
+IIIIIIIIIIIIIIII<8IIAII@/E<7H63:6.)420-'32*-%
+ at SRR019778.34 I331_2_FC3076HAAXX:1:1:1391:1422 length=45
+GATGAATGTTCTGTGAAGTTATAGCAGCATTTTACTTAATATTTT
++SRR019778.34 I331_2_FC3076HAAXX:1:1:1391:1422 length=45
+IIIIIIIIIIIIIIIFDIIIIIGIIGFB,IIII.+ at I.*:*9$=B
+ at SRR019778.35 I331_2_FC3076HAAXX:1:1:1926:930 length=45
+GAAATTACAAGCGTGATGGATGGGTTTAATAGCAAATTAGACACA
++SRR019778.35 I331_2_FC3076HAAXX:1:1:1926:930 length=45
+IIIIIIIIIIIIIIIIIII/IIIADIIA3I1A5.5.H220*.-+)
+ at SRR019778.36 I331_2_FC3076HAAXX:1:1:1351:632 length=45
+GTGAAAAAAACAGAATGATAGAGGTATATCAAAGGGACACAACAG
++SRR019778.36 I331_2_FC3076HAAXX:1:1:1351:632 length=45
+IIIIIIIIIIIIIIIII<III.IIB8I5II6=4II8<F@<2.+/6
+ at SRR019778.37 I331_2_FC3076HAAXX:1:1:1307:1953 length=45
+GGTCTTCAAGCAACACTGAGATTTGGAAAATGAAAAGTAGAAATT
++SRR019778.37 I331_2_FC3076HAAXX:1:1:1307:1953 length=45
+IIIIIIIIIIIIIIIIII7IIIIIII34;8II:@/3I(<I6.02D
+ at SRR019778.38 I331_2_FC3076HAAXX:1:1:1283:1919 length=45
+GCCCCAGGCCTGGTTCCTTCTGAGGACTATGCTGTTCCATGCCTT
++SRR019778.38 I331_2_FC3076HAAXX:1:1:1283:1919 length=45
+IIIIIIIIIIIIIIIIIIIIII7IFCIIIIIIIIIHII:BI:>I3
+ at SRR019778.39 I331_2_FC3076HAAXX:1:1:1136:1244 length=45
+GTTATATGTGAGTAATGAACCATTGAACACTACACCAAAAATTAA
++SRR019778.39 I331_2_FC3076HAAXX:1:1:1136:1244 length=45
+IIIIIIIIIIIIIIIIIIIIDIIIII:8B8IH3;72<8031D92-
+ at SRR019778.40 I331_2_FC3076HAAXX:1:1:1819:927 length=45
+GGGTTTGGAGTTTAAAGAGAGAATAAGTCATGTGCCAATATATGA
++SRR019778.40 I331_2_FC3076HAAXX:1:1:1819:927 length=45
+IIIIIIIIIIIIIIG;IFIIII6II?IEBE?8 at A<79,D5<4F1)
+ at SRR019778.41 I331_2_FC3076HAAXX:1:1:1250:1938 length=45
+GTTTGTGTCCCTCTAAAGTTCATATACTGAAGCCCTAACCCCCAG
++SRR019778.41 I331_2_FC3076HAAXX:1:1:1250:1938 length=45
+IIIIIIIIIIIIIIII2IIIIIIIIIIII=:=IIEI3/I7I7G+0
+ at SRR019778.42 I331_2_FC3076HAAXX:1:1:1648:1646 length=45
+GGTTGTGTGTGTGTGTGTGTGTGTGTGTGTTTGTTTTTTTTTTTA
++SRR019778.42 I331_2_FC3076HAAXX:1:1:1648:1646 length=45
+IIIIIIIIIIIIIIIIIIII7I at I.IDIB,.@%I0*-E(G%(/.%
+ at SRR019778.43 I331_2_FC3076HAAXX:1:1:690:962 length=45
+GTGAGATGATGTTCGTTGATATTTCCCTGTATTTTTTGTTTTTTC
++SRR019778.43 I331_2_FC3076HAAXX:1:1:690:962 length=45
+IIIIIIIIIIIIIIIIII>I?III??,I'$)II%:&B&'8(9$=$
+ at SRR019778.44 I331_2_FC3076HAAXX:1:1:1399:1957 length=45
+GTTGATATTTCCCTGGACTGTGTGGGGTCTCAGAGACCACTATGG
++SRR019778.44 I331_2_FC3076HAAXX:1:1:1399:1957 length=45
+IIIIIIIIIIIIIIII=IIIIIIIIIIIIIG4>,I/9;*3D*:<+
+ at SRR019778.45 I331_2_FC3076HAAXX:1:1:1797:1797 length=45
+GTGTGTATTGTGTGTGGGTGTGTGTGTTGTGTGTGTTTTGGGTGG
++SRR019778.45 I331_2_FC3076HAAXX:1:1:1797:1797 length=45
+IIIIIIIIIIIIII at IIIIIIIAII?II?I0(+D)II$:&5%'&%
+ at SRR019778.46 I331_2_FC3076HAAXX:1:1:721:921 length=45
+GATGTCATAGAAGTTGTTGCCTATGTTCTCCTCTAGAATTTTGAT
++SRR019778.46 I331_2_FC3076HAAXX:1:1:721:921 length=45
+IIIIIIIIIIIIIIIIIIH?CI6I7II0I11F5I+&+(ICIH&&=
+ at SRR019778.47 I331_2_FC3076HAAXX:1:1:1584:1300 length=45
+GGTAGTGAGTATCAGCCCTGTGCAGGTTTCTGCAGATGGCCATGT
++SRR019778.47 I331_2_FC3076HAAXX:1:1:1584:1300 length=45
+IIIII-IIIIIIIHIIIII4;GCIEI-II320-&-#)%,.,$-%$
+ at SRR019778.48 I331_2_FC3076HAAXX:1:1:1397:1963 length=45
+GAAAACTTACTTACAAATTCATTCTATGAGGCCAGCATTACCCTG
++SRR019778.48 I331_2_FC3076HAAXX:1:1:1397:1963 length=45
+IIIIIIIIIIIIIIII:IIIIIIII4II4FIIH0F@*CI47><:1
+ at SRR019778.49 I331_2_FC3076HAAXX:1:1:1550:1296 length=45
+GGTAGATGTGACTCTTGATCTCAGGGTCATGAGTTCAAGCCCCAT
++SRR019778.49 I331_2_FC3076HAAXX:1:1:1550:1296 length=45
+IIIIIIIIIIIIIIIIICIIBI6D%I9B5C;0I+;37-4)0**)3
+ at SRR019778.50 I331_2_FC3076HAAXX:1:1:913:1939 length=45
+GTGTGTTGTGTGTTGAGTGTTTTGTGTGTGTGTTGTGTTTTTTGT
++SRR019778.50 I331_2_FC3076HAAXX:1:1:913:1939 length=45
+IIIIIIIIIIIIIII2IIIIIII at IIG2I.I,II&9&4%II,:%,
+ at SRR019778.51 I331_2_FC3076HAAXX:1:1:1734:1009 length=45
+GAAACAATGGTTTTCAAGACACTGGACATCAGCCTACAATGGACA
++SRR019778.51 I331_2_FC3076HAAXX:1:1:1734:1009 length=45
+IIIIIIIIIIIIIIIIIIEIBIIID.>2I?186C?)/&-8,1)1+
+ at SRR019778.52 I331_2_FC3076HAAXX:1:1:1355:100 length=45
+GTACACAAATCTACGTGATATTTCGAAAGGTAAACAGATAATGCT
++SRR019778.52 I331_2_FC3076HAAXX:1:1:1355:100 length=45
+IIIIIIIIIIII<IICIGI:II:;HB<78+*;5%8160I6'..$,
+ at SRR019778.53 I331_2_FC3076HAAXX:1:1:1500:1983 length=45
+GTAACTTCTTCCTGAGTTTAGGGTCTGTAGCTCTTTCTGATTGGA
++SRR019778.53 I331_2_FC3076HAAXX:1:1:1500:1983 length=45
+IIIIIIIIIIIIII4IIII/IIIIIIII-?IIGIII8I++IC)((
+ at SRR019778.54 I331_2_FC3076HAAXX:1:1:1871:1008 length=45
+GCTGTATCTTTTATCTCCAAGACTTATTCATTCCCTACCTGGAAG
++SRR019778.54 I331_2_FC3076HAAXX:1:1:1871:1008 length=45
+IIIIIIIIIIIIIIIIII<2I8DII;IGG6D at A<<@+830%)&+(
+ at SRR019778.55 I331_2_FC3076HAAXX:1:1:1752:1721 length=45
+GAGGTGTTTTTATTCCCTTTTTACAGATGGCCGATCCGATGAAAG
++SRR019778.55 I331_2_FC3076HAAXX:1:1:1752:1721 length=45
+IIIIIIIIIIIIIIIIIIIIIIII>I7I7,IIC&FD>1->9'+00
+ at SRR019778.56 I331_2_FC3076HAAXX:1:1:1759:1586 length=45
+GGTACTCTAATAGCGTTTTATGGTAAGAGATGGTAGCTGTACTTG
++SRR019778.56 I331_2_FC3076HAAXX:1:1:1759:1586 length=45
+IIIIIIIII<IIIIIIIII=III=E6I,I:IIF2:I$2+1&+?H%
+ at SRR019778.57 I331_2_FC3076HAAXX:1:1:1537:1308 length=45
+GCTGTGCCACCCAGGCGCCCCTGCTTTTTTGTCTAGTCTTATGTA
++SRR019778.57 I331_2_FC3076HAAXX:1:1:1537:1308 length=45
+IIIIIIIIIIII4IIIIICHII>F0I1III++;6.':594*7)4*
+ at SRR019778.58 I331_2_FC3076HAAXX:1:1:1371:1534 length=45
+GTGATGGGAAAGGAAAGAGCCAATCCTGTAGGGCCTGGTAGATCA
++SRR019778.58 I331_2_FC3076HAAXX:1:1:1371:1534 length=45
+I7IIIIIIIIIIIIIIIIIIII>III@*86IIIF??I7+)6-9+0
+ at SRR019778.59 I331_2_FC3076HAAXX:1:1:1780:1771 length=45
+GTAAAATGGAGTAAATAGAGTAGAATAACATAAAAATTACAATGT
++SRR019778.59 I331_2_FC3076HAAXX:1:1:1780:1771 length=45
+IIIIIIIIIIIII;II<I5I6IIB=I=II>IE.-/0827:4./3-
+ at SRR019778.60 I331_2_FC3076HAAXX:1:1:1539:1636 length=45
+GTGTTGCTCTTTCTGAGGTGGTAATTGTGGTTTCCTTGGGCCTTT
++SRR019778.60 I331_2_FC3076HAAXX:1:1:1539:1636 length=45
+IIIIIIIIIIIIIIIIIICII:7III9I9IFII1(4I%%+&*1&.
+ at SRR019778.61 I331_2_FC3076HAAXX:1:1:1360:1444 length=45
+GTTGGGTTGATTTTCATTGGTGCTAATGTAATGGGGTATTGATCC
++SRR019778.61 I331_2_FC3076HAAXX:1:1:1360:1444 length=45
+IIIIIIIIIIIIIIIIIIIBI/GI>1II%).I),,+9'IB)+B+)
+ at SRR019778.62 I331_2_FC3076HAAXX:1:1:1763:997 length=45
+GAGATGAGTCAGCAGAGGTAAAAGCTAGAAGGATGTTAGGATGAT
++SRR019778.62 I331_2_FC3076HAAXX:1:1:1763:997 length=45
+IIIIIIIIIIIII?I at IID=II at A?E?I1;D=:C at 6>-<0+A2.=
+ at SRR019778.63 I331_2_FC3076HAAXX:1:1:996:1270 length=45
+GTCAGGGACTTAATATCTTTCCCTTAAAATATGTGTGTTATTTTC
++SRR019778.63 I331_2_FC3076HAAXX:1:1:996:1270 length=45
+IIIIIIIIIIIIIIIIIIIIIEIII<:9<I?DDA-9&7I1$4I:&
+ at SRR019778.64 I331_2_FC3076HAAXX:1:1:1724:914 length=45
+GAAAGGAATAAGGAAGGAAGCAAGGGAAAAGAGGAGGAGGAGGAA
++SRR019778.64 I331_2_FC3076HAAXX:1:1:1724:914 length=45
+IIIIIIIIIIIIIIII:IIIIA7II1+30=@*II'B<,44'I6+.
+ at SRR019778.65 I331_2_FC3076HAAXX:1:1:1356:1969 length=45
+GTTGTGTGTGTGTTTTCTGTTGTGTGTGTTTTTTGTTTTTTTTGT
++SRR019778.65 I331_2_FC3076HAAXX:1:1:1356:1969 length=45
+IIIIIIIIIIIIII%IIIIII%III%;$9,II2I'/%>)<(:I%:
+ at SRR019778.66 I331_2_FC3076HAAXX:1:1:1314:76 length=45
+GTGCTTAGCAGATAGGAGGGGCTCATTAACATGTTGAACAAATGT
++SRR019778.66 I331_2_FC3076HAAXX:1:1:1314:76 length=45
+IIIIIIIIIIIII7II7IIII?II4II/14+I*<I&0&//-+;)6
+ at SRR019778.67 I331_2_FC3076HAAXX:1:1:1284:8 length=45
+GGGTAGAAGGGTTCATTTTACTCTCTGAATCCTTAACAACATTTA
++SRR019778.67 I331_2_FC3076HAAXX:1:1:1284:8 length=45
+IIIIIIIIIIIIIIIIIII7IIIIIII/-II>I@/.:/.6*F>>+
+ at SRR019778.68 I331_2_FC3076HAAXX:1:1:1459:1955 length=45
+GTGTTCCCATACTTTAACTTGTGTGTGTTGTGGGGGGAAGCATAT
++SRR019778.68 I331_2_FC3076HAAXX:1:1:1459:1955 length=45
+IIIIIIIIDIIIIII>FIIIIIIIIIIII6I>47>I+*(/#$I$@
+ at SRR019778.69 I331_2_FC3076HAAXX:1:1:1381:1967 length=45
+GCCCTAAGAACCAAGAAACAAAGTGTGAGGGGAAAGCCCTTGAAT
++SRR019778.69 I331_2_FC3076HAAXX:1:1:1381:1967 length=45
+IIIIIIIIIIIII:IE)CIC?1F4I+I8IIII.,/I959-:B&'9
+ at SRR019778.70 I331_2_FC3076HAAXX:1:1:1224:2001 length=45
+GATACGTCAAATTTATGGAAGTGTTTTATAAGTGCATTTAAGTTT
++SRR019778.70 I331_2_FC3076HAAXX:1:1:1224:2001 length=45
+IIIIIIIIIIIIIIIIII8EI=IIIII8I4.9E9+$II&%+(:?&
+ at SRR019778.71 I331_2_FC3076HAAXX:1:1:1771:1569 length=45
+GTTTTTATAATGACTTCCTTAGGCTGTACCCCCAATTTACTATAT
++SRR019778.71 I331_2_FC3076HAAXX:1:1:1771:1569 length=45
+IIIIIIIIIIIIIIIIIIII<IBCIII4C9CI>*(IAB(4?'D'F
+ at SRR019778.72 I331_2_FC3076HAAXX:1:1:1745:1606 length=45
+GATTTGCAGTCAAGGACAGGTCCACACAGTCAGGACCACAGTGTT
++SRR019778.72 I331_2_FC3076HAAXX:1:1:1745:1606 length=45
+IIIIIIIIIIIIEIIII<IIIIIIIFI5IAI8GA-?=3:->-I2;
+ at SRR019778.73 I331_2_FC3076HAAXX:1:1:1279:1959 length=45
+GGAGGAAGACCACAGAGCTGAAGCACCGTCCTCATCACATCAGGT
++SRR019778.73 I331_2_FC3076HAAXX:1:1:1279:1959 length=45
+IIIIIIIIIIIIIIIIIIIIHFII86II6IICI1CI4I4*5*4B(
+ at SRR019778.74 I331_2_FC3076HAAXX:1:1:1769:1745 length=45
+GAAGTGATGTAGATGCCTATATGAATACAGGCACATATGGTTTCC
++SRR019778.74 I331_2_FC3076HAAXX:1:1:1769:1745 length=45
+IIIIDIIIIIIIIIIIII7IIIIG>I0E2II=+7/:+7DA04*'7
+ at SRR019778.75 I331_2_FC3076HAAXX:1:1:721:1248 length=45
+GACAAGTTTAGGAAGCCTGTTATTTTACTACATGAAACATTCATA
++SRR019778.75 I331_2_FC3076HAAXX:1:1:721:1248 length=45
+IIEIIIIIIIIIIIIIIII>IIIIII>III9AI+75>76?84-2I
+ at SRR019778.76 I331_2_FC3076HAAXX:1:1:1306:616 length=45
+GTTAAGATAAATCACAGAGCACCAACCTCAAGCGATGGCAGCTGC
++SRR019778.76 I331_2_FC3076HAAXX:1:1:1306:616 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIAIC=B6:57:274.2,+(+%&
+ at SRR019778.77 I331_2_FC3076HAAXX:1:1:1474:1625 length=45
+GTAAAGGACTTTCAGGACCTAATTTAAATGATCACTCAGGCTGAG
++SRR019778.77 I331_2_FC3076HAAXX:1:1:1474:1625 length=45
+IIIIIIIIIIIIIIIIIIII>9III at 7GII3IIFIIA34'1FA)7
+ at SRR019778.78 I331_2_FC3076HAAXX:1:1:1866:942 length=45
+GACAGATACTGCCTTACTATGCCTTACTATGTGCACATATACACA
++SRR019778.78 I331_2_FC3076HAAXX:1:1:1866:942 length=45
+IIIIIIIIIIIIIIIIII5IIIIII1II.I+:,C33,?/;,,)/)
+ at SRR019778.79 I331_2_FC3076HAAXX:1:1:1803:1776 length=45
+GTAATATATAAACAGCATAGATAATATCAGATAAAAGGACTTTCT
++SRR019778.79 I331_2_FC3076HAAXX:1:1:1803:1776 length=45
+IIIIIIIIIIIII:II8IDI;I9:I/=E;I>AA0132/29>=/15
+ at SRR019778.80 I331_2_FC3076HAAXX:1:1:716:927 length=45
+GCAAGGTAGGGACACGGGGACTCAGACAGATGAACAGATTAGACT
++SRR019778.80 I331_2_FC3076HAAXX:1:1:716:927 length=45
+IIIIIIIIIIIIIIIIIIIACIGBI=?2I6DA8;3+;/5:/./+1
+ at SRR019778.81 I331_2_FC3076HAAXX:1:1:1294:71 length=45
+GTAAACATGGAACACAACAAAAAAACTTCAAAAAGGCAAAACTAG
++SRR019778.81 I331_2_FC3076HAAXX:1:1:1294:71 length=45
+IIIIIIIIIIIIIDIIII93I at AE.HE7I632-,63?72/1476,
+ at SRR019778.82 I331_2_FC3076HAAXX:1:1:1486:1393 length=45
+GATTTAAACAATTACATCAAAATGCATTGATTCAATTGTTTTTTA
++SRR019778.82 I331_2_FC3076HAAXX:1:1:1486:1393 length=45
+IIIIIIIIIIIIIIIIIIIBIIIID<II>9:I@;4 at 8*B0I4A77
+ at SRR019778.83 I331_2_FC3076HAAXX:1:1:1880:1764 length=45
+GTAAAAATAACTACATTAACTGTGACAAGGGATACCCAAGAAGAT
++SRR019778.83 I331_2_FC3076HAAXX:1:1:1880:1764 length=45
+IIIIIIIIIIIIIIIIIIIIIIAI:I8:IHI.52IG4'/4-+2)0
+ at SRR019778.84 I331_2_FC3076HAAXX:1:1:1410:1972 length=45
+GCATGTGGATATCCAGTTTTCCCATTTCTTGAAAAGTGTGTCCTT
++SRR019778.84 I331_2_FC3076HAAXX:1:1:1410:1972 length=45
+IIIIIIIIIIIIII/IIIIIIII7IIIIII;3.)1=<<8-D86G>
+ at SRR019778.85 I331_2_FC3076HAAXX:1:1:1681:1342 length=45
+GTAGAAATGACCTTAGCCCACTATACTAGAAACTTCGGGTTTGTG
++SRR019778.85 I331_2_FC3076HAAXX:1:1:1681:1342 length=45
+IIIIIIIIIIIIIIIIIIFDII3I<II+<0-45B9B2,0,<7/2*
+ at SRR019778.86 I331_2_FC3076HAAXX:1:1:1827:1750 length=45
+GATTTTAGAATACTATTCAGAAGCGTTTCTAGTGAGGGTCAAACA
++SRR019778.86 I331_2_FC3076HAAXX:1:1:1827:1750 length=45
+IIIIIIIIIIIIIIIIIIIIB8III>FIII)712145+.5,1&3+
+ at SRR019778.87 I331_2_FC3076HAAXX:1:1:1395:1991 length=45
+GTGCTATCTCATCATGGTTTTGATCTGTATTTCCCTGATAATGAG
++SRR019778.87 I331_2_FC3076HAAXX:1:1:1395:1991 length=45
+IIIIIIIIIIIII?IIIIIIII2IIIIF7IIIGCEI;+D&-B+**
+ at SRR019778.88 I331_2_FC3076HAAXX:1:1:1332:1959 length=45
+GATAGTAACTCCTGTCTTCCTACGGGGTTAAAAAAAGCCTTCTGC
++SRR019778.88 I331_2_FC3076HAAXX:1:1:1332:1959 length=45
+IIIIIIIIIIIIIIIIIIII3IIIIII=ID-2/+824<;4?A872
+ at SRR019778.89 I331_2_FC3076HAAXX:1:1:1304:77 length=45
+GAAGAGAGAAGTCTGGGGGATCAGAGGCCACCAAAAGCAAAACAA
++SRR019778.89 I331_2_FC3076HAAXX:1:1:1304:77 length=45
+IIIIIIIIIIIIIIICIDI?D97957@;+839,))+5-2*')**)
+ at SRR019778.90 I331_2_FC3076HAAXX:1:1:1478:1372 length=45
+GTTAAAGGTGAAGAAGGAAGAGAAGTTCCTTCCATTTGGCAGATT
++SRR019778.90 I331_2_FC3076HAAXX:1:1:1478:1372 length=45
+IIIIIIIIIIIIIIIIIIIIII2AI3II>IB at 50A:3<*5+@):2
+ at SRR019778.91 I331_2_FC3076HAAXX:1:1:1518:630 length=45
+GTAGTGGTGAAAGTATTTATTTTTCCCTATATCTTTGTTAATTGC
++SRR019778.91 I331_2_FC3076HAAXX:1:1:1518:630 length=45
+IIIIIIIIIIIIICIIII at IIIIIIDFI?I1I9IHC$:B.+BI%)
+ at SRR019778.92 I331_2_FC3076HAAXX:1:1:1486:1973 length=45
+GAAACAGACAAAAGCCTTAGTAACCTGGGGCTCAGCAAAAGGCCA
++SRR019778.92 I331_2_FC3076HAAXX:1:1:1486:1973 length=45
+IIIIIIIIIIIIIIIIIIIIIH?IIIIIIIIII3IH-//(I??I3
+ at SRR019778.93 I331_2_FC3076HAAXX:1:1:1296:1435 length=45
+GAGTTTTGAACTCAGGCTGTTCTGGCCTCAAAATTCATGCTCATT
++SRR019778.93 I331_2_FC3076HAAXX:1:1:1296:1435 length=45
+IIIIIIIIIIIIIIIIIIIII4@&;74C1)01/9I)'9&-7+(29
+ at SRR019778.94 I331_2_FC3076HAAXX:1:1:1502:1287 length=45
+GCACAGATGAGCCAAGAAGGGTTCCAGTTCCCCTGCTTCATTATG
++SRR019778.94 I331_2_FC3076HAAXX:1:1:1502:1287 length=45
+IIIIIIIIIIIIII<I73IIIDIIIFIFIA@:<<1=I<7+::.=.
+ at SRR019778.95 I331_2_FC3076HAAXX:1:1:1319:1432 length=45
+GATGATTGATTGATTGATAGACATAGATAGATAGATAGATAGATA
++SRR019778.95 I331_2_FC3076HAAXX:1:1:1319:1432 length=45
+IIIIIIIIIIIIIIII6I;I?H0I3I3 at 775>;'*B63'20,%6-
+ at SRR019778.96 I331_2_FC3076HAAXX:1:1:1878:956 length=45
+GATAATATACTATGGCTCTGCAAGATAGTACTTGGGGGAAACAAA
++SRR019778.96 I331_2_FC3076HAAXX:1:1:1878:956 length=45
+IIIIIIIIIIIIIIIIII(/:*--01+1.2.-$/+0&6#,2&(&4
+ at SRR019778.97 I331_2_FC3076HAAXX:1:1:608:1209 length=45
+GAAATTTTCCTTCAATAAAGGGAGATTCTAATCTACATATTTTAA
++SRR019778.97 I331_2_FC3076HAAXX:1:1:608:1209 length=45
+IIIIIIIIIIIIIIIIHH4I=A<I:@IGI73E=I=7180<7=06,
+ at SRR019778.98 I331_2_FC3076HAAXX:1:1:216:1935 length=45
+GATTACAGTAAATGATAGATGCAAAGAGCCTTGTGGGCATATGGC
++SRR019778.98 I331_2_FC3076HAAXX:1:1:216:1935 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+ at SRR019778.99 I331_2_FC3076HAAXX:1:1:1374:116 length=45
+GTTTATATTTGAGTTAAACTTTGCATGCCCACCTGGTAGCTAAGC
++SRR019778.99 I331_2_FC3076HAAXX:1:1:1374:116 length=45
+IIIIIIIIIIIIIIIEI6IIII7I8I&IBI(3<@1.3,&:9/'(-
+ at SRR019778.100 I331_2_FC3076HAAXX:1:1:1682:1290 length=45
+GTGGTCCACATATACAATGGAATATTACTCAGCTATCAGAAAGAA
++SRR019778.100 I331_2_FC3076HAAXX:1:1:1682:1290 length=45
+IIIIIIIIIIIIIIIIDIII2BDHIIHCF=/-6A1921*/1-*-7
diff --git a/test/tantan_test.out b/test/tantan_test.out
new file mode 100644
index 0000000..013126f
--- /dev/null
+++ b/test/tantan_test.out
@@ -0,0 +1,1489 @@
+>chrM
+GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT
+TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG
+GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT
+CTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACCTACTA
+AAGTGTGTTAATtaattaaTGCTTGTAGGACATAATAATAACAATTGAAT
+GTCTGCACAGCCGCTTTCCACACAGACATCATAACAaaaaatttccacca
+aacccccccctccccccGCTTCTGGCCACAGCACTTAAACACATCTCTGC
+CAAACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAAT
+TTTATCTTTAGGCGGTATGCACTTTTAACAGTCACCCCCCAACTAACACA
+TTATTTTCCCCTCCCACTCCCATACTACTAATCTCATCAATACAACCCCC
+GCCCATCCTACCCAGCACacacacaCCGCTGCTAACCCCATACCCCGAAC
+CAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
+AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAA
+ATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGC
+AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAG
+GGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCC
+ACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAATAAACGAAAGT
+TTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
+GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTT
+TAGATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAA
+CTCCAGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAAC
+ACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGC
+CCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGA
+GCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
+GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGC
+TCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGT
+AAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGG
+TGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTT
+ATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGT
+GCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
+TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATA
+GAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAaagtgcacTTGGACG
+AACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTT
+CAACTTAACTTGACCGCTCTGAGCTAAACCTAGCCCCAAACCCACTCCAC
+CTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGG
+CGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
+TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTT
+CTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAA
+GACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCC
+GTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCT
+ACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTT
+TAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
+TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGA
+GTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGA
+AAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCCAAACATATAACT
+GAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAA
+TGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCA
+GATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
+ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAG
+GAAAGGTTAAAAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTT
+TACCAAAAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCC
+CAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAAAGGTAGCA
+TAATCACTTGTTCCTTAAATAGGGACCTGTATGAATGGCTCCACGAGGGT
+TCAGCTGTCTCTTACTTTTAACCAGTGAAATTGACCTGCCCGTGAAGAGG
+CGGGCATGACACAGCAAGACGAGAAGACCCTATGGAGCTTTAATTTATTA
+ATGCAAACAGTACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCA
+TTAAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAacctccgagca
+gtaCATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGAT
+CCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATC
+CTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
+CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGA
+TTAAAGTCCTACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTT
+CTATCTACTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCC
+TACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTAT
+TATACCCACACCCACCCAAGAACAGGGTTTGTTAAGATGGCAGAGCCCGG
+TAATCGCATAAAACTTAaaactTTACAGTCAGAGGTTCAATTCCTCTTCT
+TAACAACATACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAA
+TCGCAATGGCATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATA
+CAACTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACC
+CTTCGCTGACGCCATAAAACTCTTCACCAAAGAGCCCCTAAAACCCGCCA
+CATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCATC
+GCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
+CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACT
+CAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGC
+GCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCAT
+CATTCTACTATCAACATTACTAATAAGTGGCTCCTTTAACCTCTCCACCC
+TTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTG
+GCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
+CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAAT
+ACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATT
+ATtataataAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGA
+CGCACTCTCCCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTAC
+TTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGC
+TACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
+AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTC
+CCCCTCAAACCTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGT
+AAATAATAGGAGCTTAAACCCCCTTATTTCTAGGACTATGAGAATCGAAC
+CCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCT
+AAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTG
+GTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
+TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATT
+TTTTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTC
+TAACCAAAAAAATAAACCCTCGTTCCACAGAAGCTGCCATCAAGTATTTC
+CTCACGCAAGCAACCGCATCCATAATCCTTCTAATAGCTATCCTCTTCAA
+CAATATACTCTCCGGACAATGAACCATAACCAATACTACCAatcaatact
+catcattaataatcataatGGCTATAGCAATAAAACTAGGAATAGCCCCC
+TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGG
+CCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACC
+AAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTA
+TCCATCATAGCAGGCAGTTGAGGTGGATTAAACCAAACCCAGCTACGCAA
+AATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTC
+TACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
+CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGAC
+CCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAA
+TTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGCTAACCGGCTTT
+TTGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAACAATAGCCTCAT
+CATCCCCACcatcatagccaccatcaCCCTCCTTAACCTCTACTTCTACC
+TACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
+GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCC
+CACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATAC
+TAATAATCTTATAGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAG
+CCCTCAGTAAGTTGCAATACTTAATTTCTGCAACAGCTAAGGACTGCAAA
+ACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAA
+GCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
+TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAA
+AAAGGCGGGAGAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCA
+ATTCAATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTG
+TCTTTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCC
+ACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTG
+GAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
+CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGG
+TAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAA
+TCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTA
+GTTCCCCTAAtaaTCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAA
+CATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTG
+CTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
+GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTC
+CTTACACCTAGCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCA
+CAACAATTATCAATATAAAACCCCCTGCCATAACCCAATACCAAACGCCC
+CTCTTCGTCTGATCCGTCCTAATCACAGCAGTCCTACTTCTCCTATCTCT
+CCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCA
+AcaccaccttcttcgaccccgccggaggaggagACCCCATTCTATACCAA
+CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACC
+AGGCTTCGGAATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAG
+AACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTC
+CTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGT
+AGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCA
+CCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
+AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCAC
+CGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCG
+TACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCA
+ATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCT
+ATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATCCATTTCACTA
+TCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
+CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCAC
+ATGAAACATCCTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAA
+TattaataattttcatgatTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTC
+CTAATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCC
+CCCACCCTACCACACATTCGAAGAACCCGTATACATAAAATCTAGACAAA
+AAAGGAAGGAATCGAACCCCCCAAAGCTGGTTTCAAGCCAACCCCATGGC
+CTCCATGACTTTTTCAAAAAGGTATTAGAAAAACCATTTCATAACTTTGT
+CAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGC
+GCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCA
+CCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTC
+CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACAT
+CTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
+TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGAC
+GAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTA
+CTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACA
+TACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTT
+GACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTAC
+ATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
+CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGA
+CCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAG
+TTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAG
+GGCCCGTATTTACCCTATAGCACCCCCTCTaccccctctaGAGCCCACTG
+TAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAAC
+ACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
+TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATA
+TTAAACACAAACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAA
+AAATTATAACAAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTC
+ATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTC
+TATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCGA
+CTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
+AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCT
+TAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCA
+TTTACACCAAccacccaactatctATAAACCTAGCCATGGCCATCCCCTT
+ATGAGCGGGCGCAGTGATTATAGGCTTTCGCTCTAAGATTAAAAATGCCC
+TAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTATCCCCATACTA
+GTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
+ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTG
+GAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATC
+ATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTT
+AATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACA
+ACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACCCAGCC
+CATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
+GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACT
+AACCAACACACTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAA
+GCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATAC
+GGGATAATCCTATTTATTACCTCAGAAGTTTTTTTCTTCGCAGGATTTTT
+CTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAACTAGGAGGGC
+ACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
+CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCA
+CCATAGTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTA
+TTACAATTTTACTGGGTCTCTATTTTACCCTCCTACAAGCCTCAGAGTAC
+TTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTT
+TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCC
+TCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
+CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGT
+TTGACTATTTCTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTA
+GTATAAATAGTACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAA
+AAAAGAGTAATAAACTTCGCCTTAATTTTAATAATCAACACCCTCCTAGC
+CTTACtactaataattattaCATTTTGACTACCACAACTCAACGGCTACA
+TAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
+CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATT
+ATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAA
+CAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTaatcatcatC
+CTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAGC
+CGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGACTCATTAAATT
+ATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
+GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCAT
+ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAG
+CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCT
+ATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCT
+ACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAA
+ACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
+TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCAC
+AGCCTAATTATTAGcatcatccccctactattttTTAACCAAATCAACAA
+CAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCC
+CCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGC
+CAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAACTCTACCTCTC
+TATACTAAtctccctacaaatctccttaATTATAACATTCACAGCCACAG
+AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTG
+GCTATCATCACCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCAC
+ATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCAC
+TAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACT
+CTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACT
+AGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
+TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTA
+CTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCAC
+ACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTAC
+TATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACA
+GACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGT
+AGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
+TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCA
+AACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGG
+ACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCC
+TCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCT
+GTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGG
+ACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
+CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTC
+ACACGagaaaacACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCT
+ATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTT
+TAACCAAAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTT
+ATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAA
+CAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
+GGCCccaaaaatttTGGTGCAACTCCAAATAAAAGTAATAACCATGCACA
+CTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACC
+ACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATC
+CATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCA
+TGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACC
+CAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
+ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCAC
+TGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTA
+CTCATTTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACCTATT
+CCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCA
+TCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCA
+GTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
+ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAA
+ACGCTAATCCAAGCCTCACCCCACTACTAGGCCTcctcctagcagcagca
+gGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGA
+AGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAG
+CAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCA
+CTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
+AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCT
+CCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAA
+CCACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCAT
+ACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAG
+ATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACC
+TCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
+TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAA
+ACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCC
+TATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCC
+CACCCTTACTAACATTAACGAAAATAACCCCACCCTACTAAACCCCATTA
+AACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCATTACTAACAAC
+ATTTCCCCCGCATCCCCCTtccaaacaacaatccccCTCTACCTAAAACT
+CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCA
+ACTACCTAACCAACAAACTTAAAATAAAATCCCCACTATGCACATTTTAT
+TTCTCCAACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCC
+CTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACC
+TAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATC
+TCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
+CCTCTCTTTcttcttcccactcatcctaaccctactcctaaTCACATAAC
+CTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGT
+TCAACCAGTAACCACTACTAATCAACGCCCATAATCATACAAAGCCCCCG
+CACCAATAGGATCCTCCCGAATCAACCCTGACCCCTCTCCTTCATAAATT
+ATTCAGCTTCCTACACTATTAAAGTTTACCACAaccaccaccccATCATA
+CTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
+CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCA
+ATAGCCATCGCTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATA
+AATtaaaaaaactattaaacCCATATAACCTCCCCCAAAATTCAGAATAA
+TAACACACCCGACCACACCGCTAACAATCAGTACTAAACCCCCATAAATA
+GGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTAAACCCACACT
+CAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
+CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATG
+ACCCCAATACGCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATT
+CATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCT
+CACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTA
+GCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCA
+CATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
+ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGC
+CTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTAT
+CCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGT
+GAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCC
+GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTA
+CTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATct
+tacccttcaTTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCAC
+GAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAAT
+CACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTct
+tccttctctccttaatGACATTAACACTATTCTCACCAGACCTCCTAGGC
+GACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCCCTCCCCACAT
+CAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
+CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTA
+GCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCG
+CCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATTC
+TAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGA
+CAAGTAGCATCCGTACTATACTTCACAACAATCCTaatcctaatacCAAC
+TATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
+TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAG
+GACAAATCAGAGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAA
+GATTCTAATTTAAACTATTCTCTGTTCTTTCATGGGGAAGCAGATTTGGG
+TACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTAC
+ATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCA
+CCTGTAGTACATAAAAACCCAACCCACATCAaaccccccccccccATGCT
+TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAAC
+TCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTT
+AACAGTACATAGTACATAAAGTCAtttaccgtacatagcacatTACAGTC
+AAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTG
+ACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCT
+CGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
+ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCC
+CTTAAATAAGACATCACGATG
+
+>sp|Q8WZ42|TITIN_HUMAN
+MTTQAPTFTQPLQSVVVLEGSTATFEAHISGFPVPEVSWFRDGQVISTST
+LPGVQISFSDGRAKLTIPAVTKANSGRYSLKATNGSGQATSTAELLVKAE
+TAPPNFVQRLQSMTVRQGSQVRLQVRVTGIPTPVVKFYRDGAEIQSSLDF
+QISQEGDLYSLLIAEAYPEDSGTYSVNATNSVGRATSTAELLVQGEEEVP
+AKKTKTIVSTAQISESRQTRIEKKIEAHFDARSIATVEMVIDGAAGQQLP
+HKTPHRIPPKPKSRSxxxPSIAAKAQLARQQSPSPIxxxxxxxxxxxxxx
+PSPVRSVSPAAxxxxxxxxxxxxxxLMRKTQASTVATGPEVPPPWKQEGY
+VASSSEAEMRETTLTTSTQIRTEERWEGRYGVQExxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDMARVREPVISAVEQTA
+QRTTTTAVHIQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxISEEITxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxVPGAQEETTTQQxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxPREPGHLEESYAQQTTLEYGYKERISAAKVAEPP
+QRPASEPHVVPKAVKPRVIQAPSETHIKTTDQKGMHISSQIKKTTDLTTE
+RLVHVDKRPRTASPHFTVSKISVPKTEHGYEASIAGSAIATLQKELSATS
+SAQKITKSVKAPTVKPSETRVRAEPTPLPQFPFADTPDTYKSEAGVEVKK
+EVGVSITGTTVREERFEVLHGREAKVTETARVPAPVEIPVTPPTLVSGLK
+NVTVIEGESVTLECHISGYPSPTVTWYREDYQIESSIDFQITFQSGIARL
+MIREAFAEDSGRFTCSAVNEAGTVSTSCYLAVQVSEEFEKETTAVTEKFT
+TEEKRFVESRDVVMTDTSLTEEQAGPGEPAAPYFITKPVVQKLVEGGSVV
+FGCQVGGNPKPHVYWKKSGVPLTTGYRYKVSYNKQTGECKLVISMTFADD
+AGEYTIVVRNKHGETSASASLLEEADYELLMKSQQEMLYQTQVTAFVQEP
+KVGETAPGFVYSEYEKxxxxxQALIRKKMAKDTVVVRTYVEDQEFHISSF
+EERxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSGFDLRIKNY
+RILEGMGVTFHCKMSGYPLPKIAWYKDGKRIKHGERYQMDFLQDGRASLR
+IPVVLPEDEGIYTAFASNIKGNAICSGKLYVEPAAPLGAPTYIPTLEPVS
+RIRSLSPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLEETDESQ
+LERLYKPVFVLKPVSFKCLEGQTARFDLKVVGRPMPETFWFHDGQQIVND
+YTHKVVIKEDGTQSLIIVPATPSDSGEWTVVAQNRAGRSSISVILTVEAV
+EHQVKPMFVEKLKNVNIKEGSQLEMKVRATGNPNPDIVWLKNSDIIVPHK
+YPKIRIEGTKGEAALKIDSTVSQDSAWYTATAINKAGRDTTRCKVNVEVE
+FAEPEPERKLIIPRGTYRAKEIAAPELEPLHLRYGQEQWEEGDLYDKEKQ
+QKPFFKKKLTSLRLKRFGPAHFECRLTPIGDPTMVVEWLHDGKPLEAANR
+LRMINEFGYCSLDYGVAYSRDSGIITCRATNKYGTDHTSATLIVKDEKSL
+VEESQLPEGRKGLQRIEELERMAHEGALTGVTTDQKEKQKPDIVLYPEPV
+RVLEGETARFRCRVTGYPQPKVNWYLNGQLIRKSKRFRVRYDGIHYLDIV
+DCKSYDTGEVKVTAENPEGVIEHKVKLEIQQREDFRSVLRRAPEPRPEFH
+VHEPGKLQFEVQKVDRPVDTTETKEVVKLKRAERITHEKVPEESEELRSK
+FKRRTEEGYYEAITAVELKSRKKDESYEELLRKTxxxxxxxxxxxxxxxx
+xxxxxxxxITIPTFKPDKIELSPSMEAPKIFERIQSQTVGQGSDAHFRVR
+VVGKPDPECEWYKNGVKIERSDRIYWYWPEDNVCELVIRDVTAEDSASIM
+VKAINIAGETSSHAFLLVQAKQLITFTQELQDVVAKEKDTMATFECETSE
+PFVKVKWYKDGMEVHEGDKYRMHSDRKVHFLSILTIDTSDAEDYSCVLVE
+DENVKTTAKLIVEGAVVEFVKELQDIEVPESYSGELECIVSPENIEGKWY
+HNDVELKSNGKYTITSRRGRQNLTVKDVTKEDQGEYSFVIDGKKTTCKLK
+MKPRPIAILQGLSDQKVCEGDIVQLEVKVSLESVEGVWMKDGQEVQPSDR
+VHIVIDKQSHMLLIEDMTKEDAGNYSFTIPALGLSTSGRVSVYSVDVITP
+LKDVNVIEGTKAVLECKVSVPDVTSVKWYLNDEQIKPDDRVQAIVKGTKQ
+RLVINRTHASDEGPYKLIVGRVETNCNLSVEKIKIIRGLRDLTCTETQNV
+VFEVELSHSGIDVLWNFKDKEIKPSSKYKIEAHGKIYKLTVLNMMKDDEG
+KYTFYAGENITSGKLTVAGGAISKPLTDQTVAESQEAVFECEVANPDSKG
+EWLRDGKHLPLTNNIRSESDGHKRRLIIAATKLDDIGEYTYKVATSKTSA
+KLKVEAVKIKKTLKNLTVTETQDAVFTVELTHPNVKGVQWIKNGVVLESN
+EKYAISVKGTIYSLRIKNCAIVDESVYGFRLGRLGASARLHVETVKIIKK
+PKDVTALENATVAFEVSVSHDTVPVKWFHKNVEIKPSDKHRLVSERKVHK
+LMLQNISPSDAGEYTAVVGQLECKAKLFVETLHITKTMKNIEVPETKTAS
+FECEVSHFNVPSMWLKNGVEIEMSEKFKIVVQGKLHQLIIMNTSTEDSAE
+YTFVCGNDQVSATLTVTPIMITSMLKDINAEEKDTITFEVTVNYEGISYK
+WLKNGVEIKSTDKCQMRTKKLTHSLNIRNVHFGDAADYTFVAGKATSTAT
+LYVEARHIEFRKHIKDIKVLEKKRAMFECEVSEPDITVQWMKDDQELQIT
+DRIKIQKEKYVHRLLIPSTRMSDAGKYTVVAGGNVSTAKLFVEGRDVRIR
+SIKKEVQVIEKQRAVVEFEVNEDDVDAHWYKDGIEINFQVQERHKYVVER
+RIHRMFISETRQSDAGEYTFVAGRNRSSVTLYVNAPEPPQVLQELQPVTV
+QSGKPARFCAVISGRPQPKISWYKEEQLLSTGFKCKFLHDGQEYTLLLIE
+AFPEDAAVYTCEAKNDYGVATTSASLSVEVPEVVSPDQEMPVYPPAIITP
+LQDTVTSEGQPARFQCRVSGTDLKVSWYSKDKKIKPSRFFRMTQFEDTYQ
+LEIAEAYPEDEGTYTFVASNAVGQVSSTANLSLEAPESILHERIEQEIEM
+EMKEFSSSFLSAEEEGLHSAELQLSKINETLELLSESPVYSTKFDSEKEG
+TGPIFIKEVSNADISMGDVATLSVTVIGIPKPKIQWFFNGVLLTPSADYK
+FVFDGDDHSLIILFTKLEDEGEYTCMASNDYGKTICSAYLKINSKGEGHK
+DTETESAVAKSLEKLGGPCPPHFLKELKPIRCAQGLPAIFEYTVVGEPAP
+TVTWFKENKQLCTSVYYTIIHNPNGSGTFIVNDPQREDSGLYICKAENML
+GESTCAAELLVLLEDTDMTDTPCKAKSTPEAPEDFPQTPLKGPAVEALDS
+EQEIATFVKDTILKAALITEENQQLSYEHIAKANELSSQLPLGAQELQSI
+LEQDKLTPESTREFLCINGSIHFQPLKEPSPNLQLQIVQSQKTFSKEGIL
+MPEEPETQAVLSDTEKIFPSAMSIEQINSLTVEPLKTLLAEPEGNYPQSS
+IEPPMHSYLTSVAEEVLSPKEKTVSDTNREQRVTLQKQEAQSALILSQSL
+AEGHVESLQSPDVMISQVNYEPLVPSEHSCTEGGKILIESANPLENAGQD
+SAVRIEEGKSLRFPLALEEKQVLLKEEHSDNVVMPPDQIIESKREPVAIK
+KVQEVQGRDLLSKESLLSGIPEEQRLNLKIQICRALQAAVASEQPGLFSE
+WLRNIEKVEVEAVNITQEPRHIMCMYLVTSAKSVTEEVTIIIEDVDPQMx
+xxxxxxxxALxAIIYEEIDILTAEGPRIQQGAKTSLQEEMDSFSGSQKVE
+PITEPEVESKYLISTEEVSYFNVQSRVKYLDATPVTKGVASAxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxVATVKIQEAEGGLIKEDGPMIHTPLVDTVS
+EEGDIVHLTTSITNAKEVNWYFENKLVPSDEKFKCLQDQNTYTLVIDKVN
+TEDHQGEYVCEALNDSGKTATSAKLTVVKRAAPVIKRKIEPLEVALGHLA
+KFTCEIQSAPNVRFQWFKAGREIYESDKCSIRSSKYISSLEILRTQVVDC
+GEYTCKASNEYGSVSCTATLTVTEAYPPTFLSRPKSLTTFVGKAAKFICT
+VTGTPVIETIWQKDGAALSPSPNWKISDAENKHILELSNLTIQDRGVYSC
+KASNKFGADICQAELIIIDKPHFIKELEPVQSAINKKVHLECQVDEDRKV
+TVTWSKDGQKLPPGKDYKICFEDKIATLEIPLAKLKDSGTYVCTASNEAG
+SSSCSATVTVREPPSFVKKVDPSYLMLPGESARLHCKLKGSPVIQVTWFK
+NNKELSESNTVRMYFVNSEAILDITDVKVEDSGSYSCEAVNDVGSDSCST
+EIVIKEPPSFIKTLEPADIVRGTNALLQCEVSGTGPFEISWFKDKKQIRS
+SKKYRLFSQKSLVCLEIFSFNSADVGEYECVVANEVGKCGCMATHLLKEP
+PTFVKKVDDLIALGGQTVTLQAAVRGSEPISVTWMKGQEVIREDGKIKMS
+FSNGVAVLIIPDVQISFGGKYTCLAENEAGSQTSVGELIVKEPAKIIERA
+ELIQVTAGDPATLEYTVAGTPELKPKWYKDGRPLVASKKYRISFKNNVAQ
+LKFYSAELHDSGQYTFEISNEVGSSSCETTFTVLDRDIAPFFTKPLRNVD
+SVVNGTCRLDCKIAGSLPMRVSWFKDGKEIAASDRYRIAFVEGTASLEII
+RVDMNDAGNFTCRATNSVGSKDSSGALIVQEPPSFVTKPGSKDVLPGSAV
+CLKSTFQGSTPLTIRWFKGNKELVSGGSCYITKEALESSLELYLVKTSDS
+GTYTCKVSNVAGGVECSANLFVKEPATFVEKLEPSQLLKKGDATQLACKV
+TGTPPIKITWFANDREIKESSKHRMSFVESTAVLRLTDVGIEDSGEYMCE
+AQNEAGSDHCSSIVIVKESPYFTKEFKPIEVLKEYDVMLLAEVAGTPPFE
+ITWFKDNTILRSGRKYKTFIQDHLVSLQILKFVAADAGEYQCRVTNEVGS
+SICSARVTLREPPSFIKKIESTSSLRGGTAAFQATLKGSLPITVTWLKDS
+DEITEDDNIRMTFENNVASLYLSGIEVKHDGKYVCQAKNDAGIQRCSALL
+SVKEPATITEEAVSIDVTQGDPATLQVKFSGTKEITAKWFKDGQELTLGS
+KYKISVTDTVSILKIISTEKKDSGEYTFEVQNDVGRSSCKARINVLDLII
+PPSFTKKLKKMDSIKGSFIDLECIVAGSHPISIQWFKDDQEISASEKYKF
+SFHDNTAFLEISQLEGTDSGTYTCSATNKAGHNQCSGHLTVKEPPYFVEK
+PQSQDVNPNTRVQLKALVGGTAPMTIKWFKDNKELHSGAARSVWKDDTST
+SLELFAAKATDSGTYICQLSNDVGTATSKATLFVKEPPQFIKKPSPVLVL
+RNGQSTTFECQITGTPKIRVSWYLDGNEITAIQKHGISFIDGLATFQISG
+ARVENSGTYVCEARNDAGTASCSIELKVKEPPTFIRELKPVEVVKYSDVE
+LECEVTGTPPFEVTWLKNNREIRSSKKYTLTDRVSVFNLHITKCDPSDTG
+EYQCIVSNEGGSCSCSTRVALKEPPSFIKKIENTTTVLKSSATFQSTVAG
+SPPISITWLKDDQILDEDDNVYISFVDSVATLQIRSVDNGHSGRYTCQAK
+NESGVERCYAFLLVQEPAQIVEKAKSVDVTEKDPMTLECVVAGTPELKVK
+WLKDGKQIVPSRYFSMSFENNVASFRIQSVMKQDSGQYTFKVENDFGSSS
+CDAYLRVLDQNIPPSFTKKLTKMDKVLGSSIHMECKVSGSLPISAQWFKD
+GKEISTSAKYRLVCHERSVSLEVNNLELEDTANYTCKVSNVAGDDACSGI
+LTVKEPPSFLVKPGRQQAIPDSTVEFKAILKGTPPFKIKWFKDDVELVSG
+PKCFIGLEGSTSFLNLYSVDASKTGQYTCHVTNDVGSDSCTTMLLVTEPP
+KFVKKLEASKIVKAGDSSRLECKIAGSPEIRVVWFRNEHELPASDKYRMT
+FIDSVAVIQMNNLSTEDSGDFICEAQNPAGSTSCSTKVIVKEPPVFSSFP
+PIVETLKNAEVSLECELSGTPPFEVVWYKDKRQLRSSKKYKIASKNFHTS
+IHILNVDTSDIGEYHCKAQNEVGSDTCVCTVKLKEPPRFVSKLNSLTVVA
+GEPAELQASIEGAQPIFVQWLKEKEEVIRESENIRITFVENVATLQFAKA
+EPANAGKYICQIKNDGGMEENMATLMVLEPAVIVEKAGPMTVTVGETCTL
+ECKVAGTPELSVEWYKDGKLLTSSQKHKFSFYNKISSLRILSVERQDAGT
+YTFQVQNNVGKSSCTAVVDVSDRAVPPSFTRRLKNTGGVLGASCILECKV
+AGSSPISVAWFHEKTKIVSGAKYQTTFSDNVCTLQLNSLDSSDMGNYTCV
+AANVAGSDECRAVLTVQEPPSFVKEPEPLEVLPGKNVTFTSVIRGTPPFK
+VNWFRGARELVKGDRCNIYFEDTVAELELFNIDISQSGEYTCVVSNNAGQ
+ASCTTRLFVKEPAAFLKRLSDHSVEPGKSIILESTYTGTLPISVTWKKDG
+FNITTSEKCNIxxxxxTCILEILNSTKRDAGQYSCEIENEAGRDVCGALV
+STLEPPYFVTELEPLEAAVGDSVSLQCQVAGTPEITVSWYKGDTKLRPTP
+EYRTYFTNNVATLVFNKVNINDSGEYTCKAENSIGTASSKTVFRIQERQL
+PPSFARQLKDIEQTVGLPVTLTCRLNGSAPIQVCWYRDGVLLRDDENLQT
+SFVDNVATLKILQTDLSHSGQYSCSASNPLGTASSSARLTAREPKKSPFF
+DIKPVSIDVIAGESADFECHVTGAQPMRITWSKDNKEIRPGGNYTITCVG
+NTPHLRILKVGKGDSGQYTCQATNDVGKDMCSAQLSVKEPPKFVKKLEAS
+KVAKQGESIQLECKISGSPEIKVSWFRNDSELHESWKYNMSFINSVALLT
+INEASAEDSGDYICEAHNGVGDASCSTALTVKAPPVFTQKPSPVGALKGS
+DVILQCEISGTPPFEVVWVKDRKQVRNSKKFKITSKHFDTSLHILNLEAS
+DVGEYHCKATNEVGSDTCSCSVKFKEPPRFVKKLSDTSTLIGDAVELRAI
+VEGFQPISVVWLKDRGEVIRESENTRISFIDNIATLQLGSPEASNSGKYI
+CQIKNDAGMRECSAVLTVLEPARIIEKPEPMTVTTGNPFALECVVTGTPE
+LSAKWFKDGRELSADSKHHITFINKVASLKIPCAEMSDKGLYSFEVKNSV
+GKSNCTVSVHVSDRIVPPSFIRKLKDVNAILGASVVLECRVSGSAPISVG
+WFQDGNEIVSGPKCQSSFSENVCTLNLSLLEPSDTGIYTCVAANVAGSDE
+CSAVLTVQEPPSFEQTPDSVEVLPGMSLTFTSVIRGTPPFKVKWFKGSRE
+LVPGESCNISLEDFVTELELFEVQPLESGDYSCLVTNDAGSASCTTHLFV
+KEPATFVKRLADFSVETGSPIVLEATYTGTPPISVSWIKDEYLISQSERC
+SITMTEKSTILEILESTIEDYAQYSCLIENEAGQDICEALVSVLEPPYFI
+EPLEHVEAVIGEPATLQCKVDGTPEIRISWYKEHTKLRSAPAYKMQFKNN
+VASLVINKVDHSDVGEYSCKADNSVGAVASSAVLVIKERKLPPFFARKLK
+DVHETLGFPVAFECRINGSEPLQVSWYKDGVLLKDDANLQTSFVHNVATL
+QILQTDQSHIGQYNCSASNPLGTASSSAKLILSEHEVPPFFDLKPVSVDL
+ALGESGTFKCHVTGTAPIKITWAKDNREIRPGGNYKMTLVENTATLTVLK
+VGKGDAGQYTCYASNIAGKDSCSAHLGVQEPPRFIKKLEPSRIVKQDEFT
+RYECKIGGSPEIKVLWYKDETEIQESSKFRMSFVDSVAVLEMHNLSVEDS
+GDYTCEAHNAAGSASSSTSLKVKEPPIFRKKPHPIETLKGADVHLECELQ
+GTPPFHVSWYKDKRELRSGKKYKIMSENFLTSIHILNVDAADIGEYQCKA
+TNDVGSDTCVGSIALKAPPRFVKKLSDISTVVGKEVQLQTTIEGAEPISV
+VWFKDKGEIVRESDNIWISYSENIATLQFSRVEPANAGKYTCQIKNDAGM
+QECFATLSVLEPATIVEKPESIKVTTGDTCTLECTVAGTPELSTKWFKDG
+KELTSDNKYKISFFNKVSGLKIINVAPSDSGVYSFEVQNPVGKDSCTASL
+QVSDRTVPPSFTRKLKETNGLSGSSVVMECKVYGSPPISVSWFHEGNEIS
+SGRKYQTTLTDNTCALTVNMLEESDSGDYTCIATNMAGSDECSAPLTVRE
+PPSFVQKPDPMDVLTGTNVTFTSIVKGTPPFSVSWFKGSSELVPGDRCNV
+SLEDSVAELELFDVDTSQSGEYTCIVSNEAGKASCTTHLYIKAPAKFVKR
+LNDYSIEKGKPLILEGTFTGTPPISVTWKKNGINVTPSQRCNITTTEKSA
+ILEIPSSTVEDAGQYNCYIENASGKDSCSAQILILEPPYFVKQLEPVKVS
+VGDSASLQCQLAGTPEIGVSWYKGDTKLRPTTTYKMHFRNNVATLVFNQV
+DINDSGEYICKAENSVGEVSASTFLTVQEQKLPPSFSRQLRDVQETVGLP
+VVFDCAISGSEPISVSWYKDGKPLKDSPNVQTSFLDNTATLNIFKTDRSL
+AGQYSCTATNPIGSASSSARLILTEGKNPPFFDIRLAPVDAVVGESADFE
+CHVTGTQPIKVSWAKDSREIRSGGKYQISYLENSAHLTVLKVDKGDSGQY
+TCYAVNEVGKDSCTAQLNIKERLIPPSFTKRLSETVEETEGNSFKLEGRV
+AGSQPITVAWYKNNIEIQPTSNCEITFKNNTLVLQVRKAGMNDAGLYTCK
+VSNDAGSALCTSSIVIKEPKKPPVFDQHLTPVTVSEGEYVQLSCHVQGSE
+PIRIQWLKAGREIKPSDRCSFSFASGTAVLELRDVAKADSGDYVCKASNV
+AGSDTTKSKVTIKDKPAVAPATKKAAVDGRLFFVSEPQSIRVVEKTTATF
+IAKVGGDPIPNVKWTKGKWRQLNQGGRVFIHQKGDEAKLEIRDTTKTDSG
+LYRCVAFNEHGEIESNVNLQVDERKKQEKIEGDLRAMLKKTPILKKGAGE
+EEEIDIMELLKNVDPKEYEKYARMYGITDFRGLLQAFELLKQSQEEETHR
+LEIxxxxxxxxxxxxxxxxxSFIQQRLSQTEPVTLIKDIENQTVLKDNDA
+VFEIDIKINYPEIKLSWYKGTEKLEPSDKFEISIDGDRHTLRVKNCQLKD
+QGNYRLVCGPHIASAKLTVIEPAWERHLQDVTLKEGQTCTMTCQFSVPNV
+KSEWFRNGRILKPQGRHKTEVEHKVHKLTIADVRAEDQGQYTCKYEDLET
+SAELRIEAEPIQFTKRIQNIVVSEHQSATFECEVSFDDAIVTWYKGPTEL
+TESQKYNFRNDGRCHYMTIHNVTPDDEGVYSVIARLEPRGEARSTAELYL
+TTKEIKLELKPPDIPDSxxxxxxxxxxxxxxxxxxxxxxxxxPLLLPTxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxPAK
+APEIIDVSSKAEEVKIMTITRKKEVQKxxxxxxxxxxxxxxxxxxFIESx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxPVIEKIEKTSRRMEEEKVQVTKVPEVSKKIVPQKPxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xSFAVPQRVEVTRHEVSAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+EYEVMEEPxxxxxxxxxxxxxxxxxxxxxxxxxxxEKKIVLKPKIPAKxx
+xxxxxxxxxxxxxxxxxxKVPAPVPxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+EEKERAYTLEEEAVSVQRExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxITEPEKPIxxxxxxxxxxxxxxxxxxxxxLKxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSITKREKEQVxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEVAxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxKxxxxxxxxxxxxxxxxxxxxxxxxxxxxVxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxKREPVPVPVALPQEEEVLxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxKVVIPxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxEKVxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxRTVLEEKVSVAFRQEVVVKERLELEVVEAE
+VEEIPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxEKPKAPPKGPEISEKIIPPKKPPxxxxxxxxxxxxxxxVP
+xKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxPERAESPPPEVYxxxxxxxxxxxxxxxxxxP
+VPVxxxxxxxxxxxxxxxxxxxxxxxxxxPVIxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxVELTPL
+KVPGGEKKVRKLLPERKPEPKEEVVLxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGKKAEAKAPKEEAAKPKGPI
+KGVPKKTPSPIEAERRKLRPGSGGEKPPDEAPFTYQLKAVPLKFVKEIKD
+IILTESEFVGSSAIFECLVSPSTAITTWMKDGSNIRESPKHRFIADGKDR
+KLHIIDVQLSDAGEYTCVLRLGNKEKTSTAKLVVEELPVRFVKTLEEEVT
+VVKGQPLYLSCELNKERDVVWRKDGKIVVEKPGRIVPGVIGLMRALTIND
+ADDTDAGTYTVTVENANNLECSSCVKVVEVIRDWLVKPIRDQHVKPKGTA
+IFACDIAKDTPNIKWFKGYDEIPAEPNDKTEILRDGNHLYLKIKNAMPED
+IAEYAVEIEGKRYPAKLTLGEREVELLKPIEDVTIYEKESASFDAEISEA
+DIPGQWKLKGELLRPSPTCEIKAEGGKRFLTLRKVKLDQAGEVLYQALNA
+ITTAILTVKEIELDFAVPLKDVTVPERRQARFECVLTREANVIWSKGPDI
+IKSSDKFDIIADGKKHILVINDSQFDDEGVYTAEVEGKKTSARLFVTGIR
+LKFMSPLEDQTVKEGETATFVCELSHEKMHVVWFKNDAKLHTSRTVLISS
+EGKTHKLEMKEVTLDDISQIKAQVKELSSTAQLKVLEADPYFTVKLHDKT
+AVEKDEITLKCEVSKDVPVKWFKDGEEIVPSPKYSIKADGLRRILKIKKA
+DLKDKGEYVCDCGTDKTKANVTVEARLIKVEKPLYGVEVFVGETAHFEIE
+LSEPDVHGQWKLKGQPLTASPDCEIIEDGKKHILILHNCQLGMTGEVSFQ
+AANAKSAANLKVKELPLIFITPLSDVKVFEKDEAKFECEVSREPKTFRWL
+KGTQEITGDDRFELIKDGTKHSMVIKSAAFEDEAKYMFEAEDKHTSGKLI
+IEGIRLKFLTPLKDVTAKEKESAVFTVELSHDNIRVKWFKNDQRLHTTRS
+VSMQDEGKTHSITFKDLSIDDTSQIRVEAMGMSSEAKLTVLEGDPYFTGK
+LQDYTGVEKDEVILQCEISKADAPVKWFKDGKEIKPSKNAVIKADGKKRM
+LILKKALKSDIGQYTCDCGTDKTSGKLDIEDREIKLVRPLHSVEVMETET
+ARFETEISEDDIHANWKLKGEALLQTPDCEIKEEGKIHSLVLHNCRLDQT
+GGVDFQAANVKSSAHLRVKPRVIGLLRPLKDVTVTAGETATFDCELSYED
+IPVEWYLKGKKLEPSDKVVPRSEGKVHTLTLRDVKLEDAGEVQLTAKDFK
+THANLFVKEPPVEFTKPLEDQTVEEGATAVLECEVSRENAKVKWFKNGTE
+ILKSKKYEIVADGRVRKLVIHDCTPEDIKTYTCDAKDFKTSCNLNVVPPH
+VEFLRPLTDLQVREKEMARFECELSRENAKVKWFKDGAEIKKGKKYDIIS
+KGAVRILVINKCLLDDEAEYSCEVRTARTSGMLTVLEEEAVFTKNLANIE
+VSETDTIKLVCEVSKPGAEVIWYKGxxxxxxxxxxxxxxxxxxxxxVIQN
+AHLEDAGNYNCRLPSSRTDGKVKVHELAAEFISKPQNLEILEGEKAEFVC
+SISKESFPVQWKRDDKTLESGDKYDVIADGKKRVLVVKDATLQDMGTYVV
+MVGAARAAAHLTVIEKLRIVVPLKDTRVKEQQEVVFNCEVNTEGAKAKWF
+RNEEAIFDSSKYIILQKDLVYTLRIRDAHLDDQANYNVSLTNHRGENVKS
+AANLIVEEEDLRIVEPLKDIETMEKKSVTFWCKVNRLNVTLKWTKNGEEV
+PFDNRVSYRVDKYKHMLTIKDCGFPDEGEYIVTAGQDKSVAELLIIEAPT
+EFVEHLEDQTVTEFDDAVFSCQLSREKANVKWYRNGREIKEGKKYKFEKD
+GSIHRLIIKDCRLDDECEYACGVEDRKSRARLFVEEIPVEIIRPPQDILE
+APGADVVFLAELNKDKVEVQWLRNNMVVVQGDKHQMMSEGKIHRLQICDI
+KPRDQGEYRFIAKDKEARAKLELAAAPKIKTADQDLVVDVGKPLTMVVPY
+DAYPKAEAEWFKENEPLSTKTIDTTAEQTSFRILEAKKGDKGRYKIVLQN
+KHGKAEGFINLKVIDVPGPVRNLEVTETFDGEVSLAWEEPLTDGGSKIIG
+YVVERRDIKRKTWVLATDRAESCEFTVTGLQKGGVEYLFRVSARNRVGTG
+EPVETDNxxEARSKYDVPGPPLNVTITDVNRFGVSLTWEPPEYDGGAEIT
+NYVIELRDKTSIRWDTAMTVRAEDLSATVTDVVEGQEYSFRVRAQNRIGV
+GKPSAATPFVKVADPIERPSPPVNLTSSDQTQSSVQLKWEPPLKDGGSPI
+LGYIIERCEEGKDNWIRCNMKLVPELTYKVTGLEKGNKYLYRVSAENKAG
+VSDPSEILGPLTADDAFVEPTMDLSAFKDGLEVIVPNPITILVPSTGYPR
+PTATWCFGDKVLETGDRVKMKTLSAYAELVISPSERSDKGIYTLKLENRV
+KTISGEIDVNVIARPSAPKELKFGDITKDSVHLTWEPPDDDGGSPLTGYV
+VEKREVSRKTWTKVMDFVTDLEFTVPDLVQGKEYLFKVCARNKCGPGEPA
+YVDEPVNMSTPATVPDPPENVKWRDRTANSIFLTWDPPKNDGGSRIKGYI
+VERCPRGSDKWVACGEPVAETKMEVTGLEEGKWYAYRVKALNRQGASKPS
+RPTEEIQAVDTQEAPEIFLDVKLLAGLTVKAGTKIELPATVTGKPEPKIT
+WTKADMILKQDKRITIENVPKKSTVTIVDSKRSDTGTYIIEAVNVCGRAT
+AVVEVNVLDKPGPPAAFDITDVTNESCLLTWNPPRDDGGSKITNYVVERR
+ATDSEVWHKLSSTVKDTNFKATKLIPNKEYIFRVAAENMYGVGEPVQASP
+ITAKYQFDPPGPPTRLEPSDITKDAVTLTWCEPDDDGGSPITGYWVERLD
+PDTDKWVRCNKMPVKDTTYRVKGLTNKKKYRFRVLAENLAGPGKPSKSTE
+PILIKDPIDPPWPPGKPTVKDVGKTSVRLNWTKPEHDGGAKIESYVIEML
+KTGTDEWVRVAEGVPTTQHLLPGLMEGQEYSFRVRAVNKAGExxxxxxxx
+xVLCREKLYPPSPPRWLEVINITKNTADLKWTVPEKDGGSPITNYIVEKR
+DVRRKGWQTVDTTVKDTKCTVTPLTEGSLYVFRVAAENAIGQSDYTEIED
+SVLAKDTFTTPGPPYALAVVDVTKRHVDLKWEPPKNDGGRPIQRYVIEKK
+ERLGTRWVKAGKTAGPDCNFRVTDVIEGTEVQFQVRAENEAGVGHPSEPx
+xxxxxxxxxxxxxxxLDLHVTDAGRKHIAIAWKPPEKNGGSPIIGYHVEM
+CPVGTEKWMRVNSRPIKDLKFKVEEGVVPDKEYVLRVRAVNAIGVSEPSE
+ISENVVAKDPDCKPTIDLETHDIIVIEGEKLSIPVPFRAVPVPTVSWHKD
+GKEVKASDRLTMKNDHISAHLEVPKSVRADAGIYTITLENKLGSATASIN
+VKVIGLPGPCKDIKASDITKSSCKLTWEPPEFDGGTPILHYVLERREAGR
+RTYIPVMSGENKLSWTVKDLIPNGEYFFRVKAVNKVGGGEYIELKNPVIA
+QDPKQPPDPPVDVEVHNPTAEAMTITWKPPLYDGGSKIMGYIIEKIAKGE
+ERWKRCNEHLVPILTYTAKGLEEGKEYQFRVRAENAAGISEPSRATPPTK
+AVDPIDAPKVILRTSLEVKRGDEIALDASISGSPYPTITWIKDENVIVPE
+EIKKRAAPLVRRRKGEVQEEEPFVLPLTQRLSIDNSKKGESQLRVRDSLR
+PDHGLYMIKVENDHGIAKAPCTVSVLDTPGPPINFVFEDIRKTSVLCKWE
+PPLDDGGSEIINYTLEKKDKTKPDSEWIVVTSTLRHCKYSVTKLIEGKEY
+LFRVRAENRFGPGPPCVSKPLVAKDPFGPPDAPDKPIVEDVTSNSMLVKW
+NEPKDNGSPILGYWLEKREVNSTHWSRVNKSLLNALKANVDGLLEGLTYV
+FRVCAENAAGPGKFSPPSDPKTAHDPISxxxxxxxxVTDTSSTTIELEWE
+PPAFNGGGEIVGYFVDKQLVGTNEWSRCTEKMIKVRQYTVKEIREGADYK
+LRVSAVNAAGEGPPGETQPVTVAEPQEPPAVELDVSVKGGIQIMAGKTLR
+IPAVVTGRPVPTKVWTKEEGELDKDRVVIDNVGTKSELIIKDALRKDHGR
+YVITATNSCGSKFAAARVEVFDVPGPVLDLKPVVTNRKMCLLNWSDPEDD
+GGSEITGFIIERKDAKMHTWRQPIETERSKCDITGLLEGQEYKFRVIAKN
+KFGCGPPVEIGPILAVDPLGPPTSPERLTYTERTKSTITLDWKEPRSNGG
+SPIQGYIIEKRRHDKPDFERVNKRLCPTTSFLVENLDEHQMYEFRVKAVN
+EIGESEPSLPLNVVIQDDEVPPTIKLRLSVRGDTIKVKAGEPVHIPADVT
+GLPMPKIEWSKNETVIEKPTDALQITKEEVSRSEAKTELSIPKAVREDKG
+TYTVTASNRLGSVFRNVHVEVYDRPSPPRNLAVTDIKAESCYLTWDAPLD
+NGGSEITHYVIDKRDASRKKAEWEEVTNTAVEKRYGIWKLIPNGQYEFRV
+RAVNKYGISDECKSDKVVIQDPYRLPGPPGKPKVLARTKGSMLVSWTPPL
+DNGGSPITGYWLEKREEGSPYWSRVSRAPITKVGLKGVEFNVPRLLEGVK
+YQFRAMAINAAGIGPPSEPSDPEVAGDPxxxxxxxxxxxxxDKTKSSISL
+GWKPPAKDGGSPIKGYIVEMQEEGTTDWKRVNEPDKLITTCECVVPNLKE
+LRKYRFRVKAVNEAGESEPSDTTGEIPATDIQEEPEVFIDIGAQDCLVCK
+AGSQIRIPAVIKGRPTPKSSWEFDGKAKKAMKDGVHDIPEDAQLETAENS
+SVIIIPECKRSHTGKYSITAKNKAGQKTANCRVKVMDVPGPPKDLKVSDI
+TRGSCRLSWKMPDDDGGDRIKGYVIEKRTIDGKAWTKVNPDCGSTTFVVP
+DLLSEQQYFFRVRAENRFGIGPPVETIQRTTARDPIYPPDPPIKLKIGLI
+TKNTVHLSWKPPKNDGGSPVTHYIVECLAWDPTGTKKEAWRQCNKRDVEE
+LQFTVEDLVEGGEYEFRVKAVNAAGVSKPSATVGPCDCQRPDMPPSIDLK
+EFMEVEEGTNVNIVAKIKGVPFPTLTWFKAPPKKPDNKEPVLYDTHVNKL
+VVDDTCTLVIPQSRRSDTGLYTITAVNNLGTASKEMRLNVLGRPGPPVGP
+IKFESVSADQMTLSWFPPKDDGGSKITNYVIEKREANRKTWVHVSSEPKE
+CTYTIPKLLEGHEYVFRIMAQNKYGIGEPLDSEPETARNLFSVPGAPDKP
+TVSSVTRNSMTVNWEEPEYDGGSPVTGYWLEMKDTTSKRWKRVNRDPIKA
+MTLGVSYKVTGLIEGSDYQFRVYAINAAGVGPASLPSDPATARDPIAPPG
+PPFPKVTDWTKSSADLEWSPPLKDGGSKVTGYIVEYKEEGKEEWEKxKDK
+EVRGTKLVVTGLKEGAFYKFRVSAVNIAGIGEPGEVTDVIEMKDRLVSPD
+LQLDASVRDRIVVHAGGVIRIIAYVSGKPPPTVTWNMNERTLPQEATIET
+TAISSSMVIKNCQRSHQGVYSLLAKNEAGERKKTIIVDVLDVPGPVGTPF
+LAHNLTNESCKLTWFSPEDDGGSPITNYVIEKRESDRRAWTPVTYTVTRQ
+NATVQGLIQGKAYFFRIAAENSIGMGPFVETSEALVIREPITVPERPEDL
+EVKEVTKNTVTLTWNPPKYDGGSEIINYVLESRLIGTEKFHKVTNDNLLS
+RKYTVKGLKEGDTYEYRVSAVNIVGQGKPSFCTKPITCKDELAPPTLHLD
+FRDKLTIRVGEAFALTGRYSGKPKPKVSWFKDEADVLEDDRTHIKTTPAT
+LALEKIKAKRSDSGKYCVVVENSTGSRKGFCQVNVVDRPGPPVGPVSFDE
+VTKDYMVISWKPPLDDGGSKITNYIIEKKEVGKDVWMPVTSASAKTTCKV
+SKLLEGKDYIFRIHAENLYGISDPLVSDSMKAKDRFRVPDAPDQPIVTEV
+TKDSALVTWNKPHDGGKPITNYILEKRETMSKRWARVTKDPIHPYTKFRV
+PDLLEGCQYEFRVSAENEIGIGDPSPPSKPVFAKDPIAxxxxxxxPEAID
+TTCNSVDLTWQPPRHDGGSKILGYIVEYQKVGDEEWRRANHTPESCPETK
+YKVTGLRDGQTYKFRVLAVNAAGESDPAHVPEPVLVKDRLEPPELILDAN
+MAREQHIKVGDTLRLSAIIKGVPFPKVTWKKEDRDAPTKARIDVTPVGSK
+LEIRNAAHEDGGIYSLTVENPAGSKTVSVKVLVLDKPGPPRDLEVSEIRK
+DSCYLTWKEPLDDGGSVITNYVVERRDVASAQWSPLSATSKKKSHFAKHL
+NEGNQYLFRVAAENQYGRGPFVETPKPIKALDPLHPPGPPKDLHHVDVDK
+TEVSLVWNKPDRDGGSPITGYLVEYQEEGTQDWIKFKTVTNLECVVTGLQ
+QGKTYRFRVKAENIVGLGLPDTTIPIECQEKLVPPSVELDVKLIEGLVVK
+AGTTVRFPAIIRGVPVPTAKWTTDGSEIKTDEHYTVETDNFSSVLTIKNC
+LRRDTGEYQITVSNAAGSKTVAVHxxxLDVPGPPTGPINILDVTPEHMTI
+SWQPPKDDGGSPVINYIVEKQDTRKDTWGVVSSGSSKTKLKIPHLQKGCE
+YVFRVRAENKIGVGPPLDSTPTVAKHKFSPPSPPGKPVVTDITENAATVS
+WTLPKSDGGSPITGYYMERREVTGKWVRVNKTPIADLKFRVTGLYEGNTY
+EFRVFAENLAGLSKPSPSSDPIKACRPIKPPGPPINPKLKDKSRETADLV
+WTKPLSDGGSPILGYVVECQKPGTAQWNRINKDELIRQCAFRVPGLIEGN
+EYRFRIKAANIVGEGEPRELAESVIAKDILHPPEVELDVTCRDVITVRVG
+QTIRILARVKGRPEPDITWTKEGKVLVREKRVDLIQDLPRVELQIKEAVR
+ADHGKYIISAKNSSGHAQGSAIVNVLDRPGPCQNLKVTNVTKENCTISWE
+NPLDNGGSEITNFIVEYRKPNQKGWSIVASDVTKRLIKANLLANNEYYFR
+VCAENKVGVGPTIETKTPILAINPIDRPGEPENLHIADKGKTFVYLKWRR
+PDYDGGSPNLSYHVERRLKGSDDWERVHKGSIKETHYMVDRCVENQIYEF
+RVQTKNEGGESDWVKTEEVVVKEDLQKPVLDLKLSGVLTVKAGDTIRLEA
+GVRGKPFPEVAWTKDKDATDLTRSPRVKIDTRADSSKFSLTKAKRSDGGK
+YVVTATNTAGSFVAYATVNVLDKPGPVRNLKIVDVSSDRCTVCWDPPEDD
+GGCEIQNYILEKCETKRMVWSTYSATVLTPGTTVTRLIEGNEYIFRVRAE
+NKIGTGPPTESKPVIAKTKYDKPGRPDPPEVTKVSKEEMTVVWNPPEYDG
+GKSITGYFLEKKEKHSTRWVPVNKSAIPERRMKVQNLLPDHEYQFRVKAE
+NEIGIGEPSLPSRPVVAKDPIEPPGPPTNFRVVDTTKHSITLGWGKPVYD
+GGAPIIGYVVEMRPKIADASPDEGWKRCNAAAQLVRKEFTVTSLDENQEY
+EFRVCAQNQVGIGRPAELKEAIKPKEILEPPEIDLDASMRKLVIVRAGCP
+IRLFAIVRGRPAPKVTWRKVGIDNVVRKGQVDLVDTMAFLVIPNSTRDDS
+GKYSLTLVNPAGEKAVFVNVRVLDTPGPVSDLKVSDVTKTSCHVSWAPPE
+NDGGSQVTHYIVEKREADRKTWSTVTPEVKKTSFHVTNLVPGNEYYFRVT
+AVNEYGPGVPTDVPKPVLASDPLSEPDPPRKLEVTEMTKNSATLAWLPPL
+RDGGAKIDGYITSYREEEQPADRWTEYSVVKDLSLVVTGLKEGKKYKFRV
+AARNAVGVSLPREAEGVYEAKEQLLPPKILMPEQITIKAGKKLRIEAHVY
+GKPHPTCKWKKGEDEVVTSSHLAVHKADSSSILIIKDVTRKDSGYYSLTA
+ENSSGTDTQKIKVVVMDAPGPPQPPFDISDIDADACSLSWHIPLEDGGSN
+ITNYIVEKCDVSRGDWVTALASVTKTSCRVGKLIPGQEYIFRVRAENRFG
+ISEPLTSPKMVAQFPFGVPSEPKNARVTKVNKDCIFVAWDRPDSDGGSPI
+IGYLIERKERNSLLWVKANDTLVRSTEYPCAGLVEGLEYSFRIYALNKAG
+SSPPSKPTEYVTARMPVDPPGKPEVIDVTKSTVSLIWARPKHDGGSKIIG
+YFVEACKLPGDKWVRCNTAPHQIPQEEYTATGLEEKAQYQFRAIARTAVN
+ISPPSEPSDPVTILAENVPPRIDLSVAMKSLLTVKAGTNVCLDATVFGKP
+MPTVSWKKDGTLLKPAEGIKMAMQRNLCTLELFSVNRKDSGDYTITAENS
+SGSKSATIKLKVLDKPGPPASVKINKMYSDRAMLSWEPPLEDGGSEITNY
+IVDKRETSRPNWAQVSATVPITSCSVEKLIEGHEYQFRICAENKYGVGDP
+VFTEPAIAKNPYDPPGRCDPPVISNITKDHMTVSWKPPADDGGSPITGYL
+LEKRETQAVNWTKVNRKPIIERTLKATGLQEGTEYEFRVTAINKAGPGKx
+xxxxxxxxxxxxxxxxxxxxxxKVYDTTRSSVSLSWGKPAYDGGSPIIGY
+LVEVKRADSDNWVRCNLPQNLQKTRFEVTGLMEDTQYQFRVYAVNKIGYS
+DPSDVPDKHYPKDILIPPEGELDADLRKTLILRAGVTMRLYVPVKGRPPP
+KITWSKPNVNLRDRIGLDIKSTDFDTFLRCENVNKYDAGKYILTLENSCG
+KKEYTIVVKVLDTPGPPVNVTVKEISKDSAYVTWEPPIIDGGSPIINYVV
+QKRDAERKSWSTVTTECSKTSFRVANLEEGKSYFFRVFAENEYGIGDPGE
+TRDAVKASQTPGPVVDLKVRSVSKSSCSIGWKKPHSDGGSRIIGYVVDFL
+TEENKWQRVMKSLSLQYSAKDLTEGKEYTFRVSAENENGEGTPSEITVVA
+RDDVVAPDLDLKGLPDLCYLAKENSNFRLKIPIKGKPAPSVSWKKGEDPL
+ATDTRVSVESSAVNTTLIVYDCQKSDAGKYTITLKNVAGTKEGTISIKVV
+GKPGIPTGPIKFDEVTAEAMTLKWAPPKDDGGSEITNYILEKRDSVNNKW
+VTCASAVQKTTFRVTRLHEGMEYTFRVSAENKYGVGEGLKSEPIVARHPF
+DVPDAPPPPNIVDVRHDSVSLTWTDPKKTGGSPITGYHLEFKERNSLLWK
+RANKTPIRMRDFKVTGLTEGLEYEFRVMAINLAGVGKPSLPSEPVVALDP
+IDPPGKPEVINITRNSVTLIWTEPKYDGGHKLTGYIVEKRDLPSKSWMKA
+NHVNVPECAFTVTDLVEGGKYEFRIRAKNTAGAISAPSESTETIICKDEY
+EAPTIVLDPTIKDGLxxxxxDTIVLNAISILGKPLPKSSWSKAGKDIRPS
+DITQITSTPTSSMLTIKYATRKDAGEYTITATNPFGTKVEHVKVTVLDVP
+GPPGPVEISNVSAEKATLTWTPPLEDGGSPIKSYILEKRETSRLLWTVVS
+EDIQSCRHVATKLIQGNEYIFRVSAVNHYGKGEPVQSEPVKMVDRFGPPx
+xxxxxxxxxxxxxxATVSWKRPVDDGGSEITGYHVERREKKSLRWVRAIK
+TPVSDLRCKVTGLQEGSTYEFRVSAENRAGIGPPSEASDSVLMKDAAYPP
+GPPSNPHVTDTTKKSASLAWGKPHYDGGLEITGYVVEHQKVGDEAWIKDT
+TGTALRITQFVVPDLQTKEKYNFRISAINDAGVGEPAVIPDVEIVEREMA
+PDFELDAELRRTLVVRAGLSIRIFVPIKGRPAPEVTWTKDNINLKNRANI
+ENTESFTLLIIPECNRYDTGKFVMTIENPAGKKSGFVNVRVLDTPGPVLN
+LRPTDITKDSVTLHWDLPLIDGGSRITNYIVEKREATRKSYSTATTKCHK
+CTYKVTGLSEGCEYFFRVMAENEYGIGEPTETTEPVKASEAPSPPDSLNI
+MDITKSTVSLAWPKPKHDGGSKITGYVIEAQRKGSDQWTHITTVKGLECV
+VRNLTEGEEYTFQVMAVNSAGRSAPRESRPVIVKEQTMLPELDLRGIYQK
+LVIAKAGDNIKVEIPVLGRPKPTVTWKKGDQILKQTQRVNFETTATSTIL
+NINECVRSDSGPYPLTARNIVGEVGDVITIQVHDIPGPPTGPIKFDEVSS
+DFVTFSWDPPENDGGVPISNYVVEMRQTDSTTWVELATTVIRTTYKATRL
+TTGLEYQFRVKAQNRYGVGPGITSACIVANYPFKVPGPPGTPQVTAVTKD
+SMTISWHEPLSDGGSPILGYHVERKERNGILWQTVSKALVPGNIFKSSGL
+TDGIAYEFRVIAENMAGKSKxxxxxxxxxxxxxxxxxxxxVPLNITRHTV
+TLKWAKPEYTGGFKITSYIVEKRDLPNGRWLKANFSNILENEFTVSGLTE
+DAAYEFRVIAKNAAGAISPPSEPSDAITCRDDVEAPKIKVDVKFKDTVIL
+KAGEAFRLEADVSGRPPPTMEWSKDGKELEGTAKLEIKIADFSTNLVNKD
+STRRDSGAYTLTATNPGGFAKHIFNVKVLDRPGPPEGPLAVTEVTSEKCV
+LSWFPPLDDGGAKIDHYIVQKRETSRLAWTNVASEVQVTKLKVTKLLKGN
+EYIFRVMAVNKYGVGEPLESEPxxxxxxxxxxxxxxxxxxxxITKDSMVV
+CWGHPDSDGGSEIINYIVERRDKAGQRWIKCNKKTLTDLRYKVSGLTEGH
+EYEFRIMAENAAGISAPSPTSPFYKACDTVFKPGPPGNPRVLDTSRSSIS
+IAWNKPIYDGGSEITGYMVEIALPEEDEWQIVTPPAGLKATSYTITGLTE
+NQEYKIRIYAMNSEGLGEPALVPGTPKAEDRMLPPEIELDADLRKVVTIR
+ACCTLRLFVPIKGRPAPEVKWARDHGESLDKASIESTSSYTLLIVGNVNR
+FDSGKYILTVENSSGSKSAFVNVRVLDTPGPPQDLKVKEVTKTSVTLTWD
+PPLLDGGSKIKNYIVEKRESTRKAYSTVATNCHKTSWKVDQLQEGCSYYF
+RVLAENEYGIGLPAETAESVKASERPLPPGKITLMDVTRNSVSLSWEKPE
+HDGGSRILGYIVEMQTKGSDKWATCATVKVTEATITGLIQGEEYSFRVSA
+QNEKGISDPRQLSVPVIAKDLVIPPAFKLLFNTFTVLAGEDLKVDVPFIG
+RPTPAVTWHKDNVPLKQTTRVNAESTENNSLLTIKDACREDVGHYVVKLT
+NSAGEAIETLNVIVLDKPGPPTGPVKMDEVTADSITLSWGPPKYDGGSSI
+NNYIVEKRDTSTTTWQIVSATVARTTIKACRLKTGCEYQFRIAAENRYGK
+STYLNSEPTVAQYPFKVPGPPGTPVVTLSSRDSMEVQWNEPISDGGSRVI
+GYHLERKERNSILWVKLNKTPIPQTKFKTTGLEEGVEYEFRVSAENIVGI
+GKPSKVSECYVARDPCDPPGRPEAIIVTRNSVTLQWKKPTYDGGSKITGY
+IVEKKELPEGRWMKASFTNIIDTHFEVTGLVEDHRYEFRVIARNAAGVFS
+EPSESTGAITARDEVDPPRISMDPKYKDTIVVHAGESFKVDADIYGKPIP
+TIQWIKGDQELSNTARLEIKSTDFATSLSVKDAVRVDSGNYILKAKNVAG
+ERSVTVNVKVLDRPGPPEGPVVISGVTAEKCTLAWKPPLQDGGSDIINYI
+VERRETSRLVWTVVDANVQTLSCKVTKLLEGNEYTFRIMAVNKYGVGEPL
+ESEPVVAKNPFVVPDAPKAPEVTTVTKDSMIVVWERPASDGGSEILGYVL
+EKRDKEGIRWTRCHKRLIGELRLRVTGLIENHDYEFRVSAENAAGLSEPS
+PPSAYQKACDPIYKPGPPNNPKVIDITRSSVFLSWSKPIYDGGCEIQGYI
+VEKCDVSVGEWTMCTPPTGINKTNIEVEKLLEKHEYNFRICAINKAGVGE
+HADVPGPIIVEEKLEAPDIDLDLELRKIINIRAGGSLRLFVPIKGRPTPE
+VKWGKVDGEIRDAAIIDVTSSFTSLVLDNVNRYDSGKYTLTLENSSGTKS
+AFVTVRVLDTPSPPVNLKVTEITKDSVSITWEPPLLDGGSKIKNYIVEKR
+EATRKSYAAVVTNCHKNSWKIDQLQEGCSYYFRVTAENEYGIGLPAQTAD
+PIKVAEVPQPPGKITVDDVTRNSVSLSWTKPEHDGGSKIIQYIVEMQAKH
+SEKWSECARVKSLQAVITNLTQGEEYLFRVVAVNEKGRSDPRSLAVPIVA
+KDLVIEPDVKPAFSSYSVQVGQDLKIEVPISGRPKPTITWTKDGLPLKQT
+TRINVTDSLDLTTLSIKETHKDDGGQYGITVANVVGQKTASIEIVTLDKP
+DPPKGPVKFDDVSAESITLSWNPPLYTGGCQITNYIVQKRDTTTTVWDVV
+SATVARTTLKVTKLKTGTEYQFRIFAENRYGQSFALESDPIVAQYPYKEP
+GPPGTPFATAISKDSMVIQWHEPVNNGGSPVIGYHLERKERNSILWTKVN
+KTIIHDTQFKAQNLEEGIEYEFRVYAENIVGVGKASKNSECYVARDPCDP
+PGTPEPIMVKRNEITLQWTKPVYDGGSMITGYIVEKRDLPDGRWMKASFT
+NVIETQFTVSGLTEDQRYEFRVIAKNAAGAISKPSDSTGPITAKDEVELP
+RISMDPKFRDTIVVNAGETFRLEADVHGKPLPTIEWLRGDKEIEESARCE
+IKNTDFKALLIVKDAIRIDGGQYILRASNVAGSKSFPVNVKVLDRPGPPE
+GPVQVTGVTSEKCSLTWSPPLQDGGSDISHYVVEKRETSRLAWTVVASEV
+VTNSLKVTKLLEGNEYVFRIMAVNKYGVGEPLESAPVLMKNPFVLPGPPK
+SLEVTNIAKDSMTVCWNRPDSDGGSEIIGYIVEKRDRSGIRWIKCNKRRI
+TDLRLRVTGLTEDHEYEFRVSAENAAGVGEPSPATVYYKACDPVFKPGPP
+TNAHIVDTTKNSITLAWGKPIYDGGSEILGYVVEICKADEEEWQIVTPQT
+GLRVTRFEISKLTEHQEYKIRVCALNKVGLGEATSVPGTVKPEDKLEAPE
+LDLDSELRKGIVVRAGGSARIHIPFKGRPTPEITWSREEGEFTDKVQIEK
+GVNYTQLSIDNCDRNDAGKYILKLENSSGSKSAFVTVKVLDTPGPPQNLA
+VKEVRKDSAFLVWEPPIIDGGAKVKNYVIDKRESTRKAYANVSSKCSKTS
+FKVENLTEGAIYYFRVMAENEFGVGVPVETVDAVKAAEPPSPPGKVTLTD
+VSQTSASLMWEKPEHDGGSRVLGYVVEMQPKGTEKWSIVAESKVCNAVVT
+GLSSGQEYQFRVKAYNEKGKSDPRVLGVPVIAKDLTIQPSLKLPFNTYSI
+QAGEDLKIEIPVIGRPRPNISWVKDGEPLKQTTRVNVEETATSTVLHIKE
+GNKDDFGKYTVTATNSAGTATENLSVIVLEKPGPPVGPVRFDEVSADFVV
+ISWEPPAYTGGCQISNYIVEKRDTTTTTWHMVSATVARTTIKITKLKTGT
+EYQFRIFAENRYGKSAPLDSKAVIVQYPFKEPGPPGTPFVTSISKDQMLV
+QWHEPVNDGGTKIIGYHLEQKEKNSILWVKLNKTPIQDTKFKTTGLDEGL
+EYEFKVSAENIVGIGKPSKVSECFVARDPCDPPGRPEAIVITRNNVTLKW
+KKPAYDGGSKITGYIVEKKDLPDGRWMKASFTNVLETEFTVSGLVEDQRY
+EFRVIARNAAGNFSEPSDSSGAITARDEIDAPNASLDPKYKDVIVVHAGE
+TFVLEADIRGKPIPDVVWSKDGKELEETAARMEIKSTIQKTTLVVKDCIR
+TDGGQYILKLSNVGGTKSIPITVKVLDRPGPPEGPLKVTGVTAEKCYLAW
+NPPLQDGGANISHYIIEKRETSRLSWTQVSTEVQALNYKVTKLLPGNEYI
+FRVMAVNKYGIGEPLESGPVTACNPYKPPGPPSTPEVSAITKDSMVVTWA
+RPVDDGGTEIEGYILEKRDKEGVRWTKCNKKTLTDLRLRVTGLTEGHSYE
+FRVAAENAAGVGEPSEPSVFYRACDALYPPGPPSNPKVTDTSRSSVSLAW
+SKPIYDGGAPVKGYVVEVKEAAADEWTTCTPPTGLQGKQFTVTKLKENTE
+YNFRICAINSEGVGEPATLPGSVVAQERIEPPEIELDADLRKVVVLRASA
+TLRLFVTIKGRPEPEVKWEKAEGILTDRAQIEVTSSFTMLVIDNVTRFDS
+GRYNLTLENNSGSKTAFVNVRVLDSPSAPVNLTIREVKKDSVTLSWEPPL
+IDGGAKITNYIVEKRETTRKAYATITNNCTKTTFRIENLQEGCSYYFRVL
+ASNEYGIGLPAETTEPVKVSEPPLPPGRVTLVDVTRNTATIKWEKPESDG
+GSKITGYVVEMQTKGSEKWSTCTQVKTLEATISGLTAGEEYVFRVAAVNE
+KGRSDPRQLGVPVIARDIEIKPSVELPFHTFNVKAREQLKIDVPFKGRPQ
+ATVNWRKDGQTLKETTRVNVSSSKTVTSLSIKEASKEDVGTYELCVSNSA
+GSITVPITIIVLDRPGPPGPIRIDEVSCDSITISWNPPEYDGGCQISNYI
+VEKKETTSTTWHIVSQAVARTSIKIVRLTTGSEYQFRVCAENRYGKSSYS
+ESSAVVAEYPFSxxxxxxxxxxVHATKSTMLVTWQVPVNDGGSRVIGYHL
+EYKERSSILWSKANKILIADTQMKVSGLDEGLMYEYRVYAENIAGIGKCS
+KSCEPVPARDPCDPPGQPEVTNITRKSVSLKWSKPHYDGGAKITGYIVER
+RELPDGRWLKCNYTNIQETYFEVTELTEDQRYEFRVFARNAADSVSEPSE
+STGPIIVKDDVEPPRVMMDVKFRDVIVVKAGEVLKINADIAGRPLPVISW
+AKDGIEIEERARTEIISTDNHTLLTVKDCIRRDTGQYVLTLKNVAGTRSV
+AVNCKVLDKPGPPAGPLEINGLTAEKCSLSWGRPQEDGGADIDYYIVEKR
+ETSHLAWTICEGELQMTSCKVTKLLKGNEYIFRVTGVNKYGVGEPLESVA
+IKALDPFTVPSPPTSLEITSVTKESMTLCWSRPESDGGSEISGYIIERRE
+KNSLRWVRVNKKPVYDLRVKSTGLREGCEYEYRVYAENAAGLSLPSETSP
+LIRAEDPVFLPSPPSKPKIVDSGKTTITIAWVKPLFDGGAPITGYTVEYK
+KSDDTDWKTSIQSLRGTEYTISGLTTGAEYVFRVKSVNKVGASDPSDSSD
+PQIAKEREEEPLFDIDSEMRKTLIVKAGASFTMTVPFRGRPVPNVLWSKP
+DTDLRTRAYVDTTDSRTSLTIENANRNDSGKYTLTIQNVLSAASLTLVVK
+VLDTPGPPTNITVQDVTKESAVLSWDVPENDGGAPVKNYHIEKREASKKA
+WVSVTNNCNRLSYKVTNLQEGAIYYFRVSGENEFGVGIPAETKEGVKITE
+KPSPPEKLGVTSISKDSVSLTWLKPEHDGGSRIVHYVVEALEKGQKNWVK
+CAVAKSTHHVVSGLRENSEYFFRVFAENQAGLSDPRELLLPVLIKEQLEP
+PEIDMKNFPSHTVYVRAGSNLKVDIPISGKPLPKVTLSRDGVPLKATMRF
+NTEITAENLTINLKESVTADAGRYEITAANSSGTTKAFINIVVLDRPGPP
+TGPVVISDITEESVTLKWEPPKYDGGSQVTNYILLKRETSTAVWTEVSAT
+VARTMMKVMKLTTGEEYQFRIKAENRFGISDHIDSACVTVKLPYTTPGPP
+STPWVTNVTRESITVGWHEPVSNGGSAVVGYHLEMKDRNSILWQKANKLV
+IRTTHFKVTTISAGLIYEFRVYAENAAGVGKPSHPSEPVLAIDACEPPRN
+VRITDISKNSVSLSWQQPAFDGGSKITGYIVERRDLPDGRWTKASFTNVT
+ETQFIISGLTQNSQYEFRVFARNAVGSISNPSEVVGPITCIDSYGGPVID
+LPLEYTEVVKYRAGTSVKLRAGISGKPAPTIEWYKDDKELQTNALVCVEN
+TTDLASILIKDADRLNSGCYELKLRNAMGSASATIRVQILDKPGPPGGPI
+EFKTVTAEKITLLWRPPADDGGAKITHYIVEKRETSRVVWSMVSEHLEEC
+IITTTKIIKGNEYIFRVRAVNKYGIGEPLESDSVVAKNAFVTPGPxxxxx
+xxxxxxNSMTVVWSRPIADGGSDISGYFLEKRDKKSLGWFKVLKETIRDT
+RQKVTGLTENSDYQYRVCAVNAAGQGPFSEPSEFYKAADPIDPPGPPAKI
+RIADSTKSSITLGWSKPVYDGGSAVTGYVVEIRQGEEEEWTTVSTKGEVR
+TTEYVVSNLKPGVNYYFRVSAVNCAGQGEPIEMNEPVQAKDILEAPEIDL
+DVALRTSVIAKAGEDVQVLIPFKGRPPPTVTWRKDEKNLGSDARYSIENT
+DSSSLLTIPQVTRNDTGKYILTIENGVGEPKSSTVSVKVLDTPAACQKLQ
+VKHVSRGTVTLLWDPPLIDGGSPIINYVIEKRDATKRTWSVVSHKCSSTS
+FKLIDLSEKTPFFFRVLAENEIGIGEPCETTEPVKAAEVPAPIRDLSMKD
+STKTSVILSWTKPDFDGGSVITEYVVERKGKGEQTWSHAGISKTCEIEVS
+QLKEQSVLEFRVFAKNEKGLSDPVTIGPITVKELIITPEVDLSDIPGAQV
+TVRIGHNVHLELPYKGKPKPSISWLKDGLPLKESEFVRFSKTENKITLSI
+KNAKKEHGGKYTVILDNAVCRIAVPITVITLGPPSKPKGPIRFDEIKADS
+VILSWDVPEDNGGGEITCYSIEKRETSQTNWKMVCSSVARTTFKVPNLVK
+DAEYQFRVRAENRYGVSQPLVSSIIVAKHQFRIPGPPGKPVIYNVTSDGM
+SLTWDAPVYDGGSEVTGFHVEKKERNSILWQKVNTSPISGREYRATGLVE
+GLDYQFRVYAENSAGLSSPSDPSKFTLAVSPVDPPGTPDYIDVTRETITL
+KWNPPLRDGGSKIVGYSIEKRQGNERWVRCNFTDVSECQYTVTGLSPGDR
+YEFRIIARNAVGTISPPSQSSGIIMTRDENVPPIVEFGPEYFDGLIIKSG
+ESLRIKALVQGRPVPRVTWFKDGVEIEKRMNMEITDVLGSTSLFVRDATR
+DHRGVYTVEAKNASGSAKAEIKVKVQDTPGKVVGPIRFTNITGEKMTLWW
+DAPLNDGCAPITHYIIEKRETSRLAWALIEDKCEAQSYTAIKLINGNEYQ
+FRVSAVNKFGVGRPLDSDPVVAQIQYTVPDAPGIPEPSNITGNSITLTWA
+RPESDGGSEIQQYILERREKKSTRWVKVISKRPISETRFKVTGLTEGNEY
+EFHVMAENAAGVGPASGISRLIKCREPVNPPGPPTVVKVTDTSKTTVSLE
+WSKPVFDGGMEIIGYIIEMCKADLGDWHKVNAEACVKTRYTVTDLQAGEE
+YKFRVSAINGAGKGDSCEVTGTIKAVDRLTAPELDIDANFKQTHVVRAGA
+SIRLFIAYQGRPTPTAVWSKPDSNLSLRADIHTTDSFSTLTVENCNRNDA
+GKYxxxxxxxxxxxxxxxxxxxxDTPGPPGPITFKDVTRGSATLMWDAPL
+LDGGARIHHYVVEKREASRRSWQVISEKCTRQIFKVNDLAEGVPYYFRVS
+AVNEYGVGEPYEMPEPIVATEQPAPPRRLDVVDTSKSSAVLAWLKPDHDG
+GSRITGYLLEMRQKGSDFWVEAGHTKQLTFTVERLVEKTEYEFRVKAKND
+AGYSEPREAFSSVIIKEPQIEPTADLTGITNQLITCKAGSPFTIDVPISG
+RPAPKVTWKLEEMRLKETDRVSITTTKDRTTLTVKDSMRGDSGRYFLTLE
+NTAGVKTFSVTVVVIGRPGPVTGPIEVSSVSAESCVLSWGEPKDGGGTEI
+TNYIVEKRESGTTAWQLVNSSVKRTQIKVTHLTKYMEYSFRVSSENRFGV
+SKPLESAPIIAEHPFVPPSAPTRPEVYHVSANAMSIRWEEPYHDGGSKII
+GYWVEKKERNTILWVKENKVPCLECNYKVTGLVEGLEYQFRTYALNAAGV
+SKASEASRPIMAQNPVDAPGRPEVTDVTRSTVSLIWSAPAYDGGSKVVGY
+IIERKPVSEVGDGRWLKCNYTIVSDNFFTVTALSEGDTYEFRVLAKNAAG
+VISKGSESTGPVTCRDEYAPPKAELDARLHGDLVTIRAGSDLVLDAAVGG
+KPEPKIIWTKGDKELDLCEKVSLQYTGKRATAVIKFCDRSDSGKYTLTVK
+NASGTKAVSVMVKVLDSPGPCGKLTVSRVTQEKCTLAWSLPQEDGGAEIT
+HYIVERRETSRLNWVIVEGECPTLSYVVTRLIKNNEYIFRVRAVNKYGPG
+VPVESEPIVARNSFTIPSPPGIPEEVGTGKEHIIIQWTKPESDGGNEISN
+YLVDKREKKSLRWTRVNKDYVVYDTRLKVTSLMEGCDYQFRVTAVNAAGN
+SEPSEASNFISCREPSYTPGPPSAPRVVDTTKHSISLAWTKPMYDGGTDI
+VGYVLEMQEKDTDQWYRVHTNATIRNTEFTVPDLKMGQKYSFRVAAVNVK
+GMSEYSESIAEIEPVERIEIPDLELADDLKKTVTIRAGASLRLMVSVSGR
+PPPVITWSKQGIDLASRAIIDTTESYSLLIVDKVNRYDAGKYTIEAENQS
+GKKSATVLVKVYDTPGPCPSVKVKEVSRDSVTITWEIPTIDGGAPVNNYI
+VEKREAAMRAFKTVTTKCSKTLYRISGLVEGTMYYFRVLPENIYGIGEPC
+ETSDAVLVSEVPLVPAKLEVVDVTKSTVTLAWEKPLYDGGSRLTGYVLEA
+CKAGTERWMKVVTLKPTVLEHTVTSLNEGEQYLFRIRAQNEKGVSEPRET
+VTAVTVQDLRVLPTIDLSTMPQKTIHVPAGRPVELVIPIAGRPPPAASWF
+FAGSKLRESERVTVETHTKVAKLTIRETTIRDTGEYTLELKNVTGTTSET
+IKVIILDKPGPPTGPIKIDEIDATSITISWEPPELDGGAPLSGYVVEQRD
+AHRPGWLPVSESVTRSTFKFTRLTEGNEYVFRVAATNRFGIGSYLQSEVI
+ECRSSIRIPGPPETLQIFDVSRDGMTLTWYPPEDDGGSQVTGYIVERKEV
+RADRWVRVNKVPVTMTRYRSTGLTEGLEYEHRVTAINARGSGKPxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxRTSVSLAWSVPEDEGGSKVTGYLIEMQK
+VDQHEWTKCNTTPTKIREYTLTHLPQGAEYRFRVLACNAGGPGEPAEVPG
+TVKVTEMLEYPDYELDERYQEGIFVRQGGVIRLTIPIKGKPFPICKWTKE
+GQDISKRAMIATSETHTELVIKEADRGDSGTYDLVLENKCGKKAVYIKVR
+VIGSPNSPEGPLEYDDIQVRSVRVSWRPPADDGGADILGYILERREVPKA
+AWYTIDSRVRGTSLVVKGLKENVEYHFRVSAENQFGISKPLKSEEPVxxx
+xxxxxxxxxxxxxxxLDVTKSSVSLSWSRPKDDGGSRVTGYYIERKETST
+DKWVRHNKTQITTTMYTVTGLVPDAEYQFRIIAQNDVGLSETSPASEPVV
+CKDPFDKPSQPGELEILSISKDSVTLQWEKPECDGGKEILGYWVEYRQSG
+DSAWKKSNKERIKDKQFTIGGLLEATEYEFRVFAENETGLSRPRRTAMSI
+KTKLTSGEAPGIRKEMKDVTTKLGEAAQLSCQIVGRPLPDIKWYRFGKEL
+IQSRKYKMSSDGRTHTLTVMTEEQEDEGVYTCIATNEVGEVETSSKLLLQ
+ATPQFHPGYPLKEKYYGAVGSTLRLHVMYIGRPVPAMTWFHGQKLLQNSE
+NITIENTEHYTHLVMKNVQRKTHAGKYKVQLSNVFGTVDAILDVEIQDKP
+DKPTGPIVIEALLKNSAVISWKPPADDGGSWITNYVVEKCEAKEGAEWQL
+VSSAISVTTCRIVNLTENAGYYFRVSAQNTFGISDPLEVSSVVIIKSPFE
+KPGAPGKPTITAVTKDSCVVAWKPPASDGGAKIRNYYLEKREKKQNKWIS
+VTTEEIRETVFSVKNLIEGLEYEFRVKCENLGGESEWSEISEPITPKSDV
+PIQAPHFKEELRNLNVRYQSNATLVCKVTGHPKPIVKWYRQGKEIIADGL
+KYRIQEFKGGYHQLIIASVTDDDATVYQVRATNQGGSVSGTASLEVEVPA
+KIHLPKTLEGMGAVHALRGEVVSIKIPFSGKPDPVITWQKGQDLIDNNGH
+YQVIVTRSFTSLVFPNGVERKDAGFYVVCAKNRFGIDQKTVELDVADVPD
+PPRGVKVSDVSRDSVNLTWTEPASDGGSKITNYIVEKCATTAERWLRVGQ
+ARETRYTVINLFGKTSYQFRVIAENKFGLSKPSxxxxxTITKEDKTRAMN
+YDEEVDETREVSMTKASHSSTKELYEKYMIAEDLGRGEFGIVHRCVETSS
+KKTYMAKFVKVKGTDQVLVKKEISILNIARHRNILHLHESFESMEELVMI
+FEFISGLDIFERINTSAFELNEREIVSYVHQVCEALQFLHSHNIGHFDIR
+PENIIYQTRRSSTIKIIEFGQARQLKPGDNFRLLFTAPEYYAPEVHQHDV
+VSTATDMWSLGTLVYVLLSGINPFLAETNQQIIENIMNAEYTFDEEAFKE
+ISIEAMDFVDRLLVKERKSRMTASEALQHPWLKQKIERVSTKVIRTLKHR
+RYYHTLIKKDLNMVVSAARISCGGAIRSQKGVSVAKVKVASIEIGPVSGQ
+IMHAVGEEGGHVKYVCKIENYDQSTQVTWYFGVRQLENSEKYEITYEDGV
+AILYVKDITKLDDGTYRCKVVNDYGEDSSYAELFVKGVREVYDYYCRRTM
+KKIKRRTDTMRLLERPPEFTLPLYNKTAYVGENVRFGVTITVHPEPHVTW
+YKSGQKIKPGDNDKKYTFESDKGLYQLTINSVTTDDDAEYTVVARNKYGE
+DSCKAKLTVTLHPPPTDSTLRPMFKRLLANAECQEGQSVCFEIRVSGIPP
+PTLKWEKDGQPLSLGPNIEIIHEGLDYYALHIRDTLPEDTGYYRVTATNT
+AGSTSCQAHLQVERLRYKKQEFKSKEEHERHVQKQIDKTLRMAEILSGTE
+SVPLTQVAKEALREAAVLYKPAVSTKTVKGEFRLEIEEKKEERKLRMPYD
+VPEPRKYKQTTIEEDQRIKQFVPMSDMKWYKKIRDQYEMPGKLDRVVQKR
+PKRIRLSRWEQFYVMPLPRITDQYRPKWRIPKLSQDDLEIVRPARRRTPS
+PDYDFYYRPRRRSLGDISDEELLLPIDDYLAMKRTEEERLRLEEELELGF
+SASPPSRSPPHFELSSLRYSSPQAHVKVEETRKDFRYSTYHIPTKAEAST
+SYAELRERHAQAAYRQPKQRQRIMAEREDEELLRPVTTTQHLSEYKSELD
+FMSKExxxxxxxxxxxxxxxxxxxxxxxxxSKHAxxxxxxxxxxxxxxxx
+SLSPTYIELMRPVSELIRSRPQPAEEYEDDTERRSPTPExxxxxxxxxVS
+SERSLSRFERSARFDIFSRYESMKAALKTQKTSERKYEVLSQQPFTLDHA
+PRITLRMRSHRVPCGQNTRFILNVQSKPTAEVKWYHNGVELQESSKIHYT
+NTSGVLTLEILDCHTDDSGTYRAVCTNYKGEASDYATLDVTGGDYTTYAS
+QRRDEEVPRSVFPELTRTEAYAVSSFKKTSEMEASSxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTLAARILTKPRSMTVY
+EGESARFSCDTDGEPVPTVTWLRKGQVLSTSARHQVTTTKYKSTFEISSV
+QASDEGNYSVVVENSEGKQEAEFTLTIQKARVTEKAVTSPPRVKSxxxxx
+xxxxxxxxxxxxxxxxxxHxKAVSxxxxxxxxxEKVQHLPVSAPPKITQF
+LKAEASKEIAKLTCVVESSVLRAKEVTWYKDGKKLKENGHFQFHYSADGT
+YELKINNLTESDQGEYVCEISGEGGTSKTNLQFMGQAFKSIHEKVSKISE
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxVTGLQDTTVSSDSVAKFAV
+KATGEPRPTAIWTKDGKAITQGGKYKLSEDKGGFFLEIHKTDTSDSGLYT
+CTVKNSAGSVSSSCKLTIKAIKDTEAQKVSTQKTSEITPQKKAVVQEEIS
+QxxxxxxxxxxxxxxxxxKLAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxVRTHAEIKAFSTQMSINEGQRLVLKANIAGATDVKWVLN
+GVELTNSEEYRYGVSGSDQTLTIKQASHRDEGILTCISKTKEGIVKCQYD
+LTLSKELSDAPAFISQPRSQNINEGQNVLFTCEISGEPSPEIEWFKNNLP
+ISISSxxxxxxxxxVYSLEIRNASVSDSGKYTIKAKNFRGQCSATASLMV
+LPLVEEPSREVVLRTSGDTSLQGSFSSQSVQMSASKxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLKAG
+IRGIPPKIEALPSDISIDEGKVLTVACAFTGEPTPEVTWSCGGRKIHSQE
+QGRFHIENTDDLTTLIIMDVQKQDGGLYTLSLGNEFGSDSATVNIHIRSI
+
+#period	estimated number of tracts
+1	11.5539
+2	12.071
+3	23.5112
+4	8.6641
+5	10.2403
+6	10.2883
+7	11.3853
+8	11.585
+9	4.50516
+10	4.75721
+11	8.23821
+12	3.43443
+13	4.34498
+14	2.43048
+15	6.08299
+16	5.03573
+17	3.15392
+18	1.90906
+19	2.38249
+20	1.69083
+21	1.64297
+22	1.36296
+23	1.42971
+24	1.31135
+25	3.43442
+26	5.87207
+27	2.84509
+28	5.23273
+29	0.737526
+30	0.733329
+31	1.04262
+32	0.994512
+33	0.406413
+34	0.253399
+35	0.214558
+36	1.24664
+37	0.817335
+38	0.361951
+39	0.299148
+40	0.221853
+41	0.147372
+42	1.56514
+43	0.211522
+44	0.0943722
+45	0.327042
+46	2.10489
+47	0.0983897
+48	0.488297
+49	0.0632472
+50	0.0948114
+# estimated total number of repetitive tracts: 182.92
+# estimated number of background-to-background transitions: 30295.5
+# total number of transitions (#letters + #sequences): 34351
+# best-fit probability decay per period: 0.914731
+# best-fit probability of a repeat starting per position: 0.00600163
+# best-fit probability of a repeat ending per position: 0.0472345
+
+817
+
+234
+
+934
+
+3615
+
+ at SRR019778.1 I331_2_FC3076HAAXX:1:1:1416:1963 length=45
+GTTCAATGGGGGAAAGGAGAGTCCTTCAACAAATGGTGCGGAGAA
++SRR019778.1 I331_2_FC3076HAAXX:1:1:1416:1963 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIIIIB2I<F4HII6I:HI+I//
+ at SRR019778.2 I331_2_FC3076HAAXX:1:1:1830:1688 length=45
+GTTTTCAATGTGTTGAAAAGTGTATTCTATATTTTTAGTTTGAAC
++SRR019778.2 I331_2_FC3076HAAXX:1:1:1830:1688 length=45
+IIIIIIIIIIIIIIID0A:IDCF<IIII3I-IIIII,&>HH(-0+
+ at SRR019778.3 I331_2_FC3076HAAXX:1:1:1611:1333 length=45
+GTTTTCCCATTTGTCCTTAATCCACCTAAAAAAGATTTGCATGGG
++SRR019778.3 I331_2_FC3076HAAXX:1:1:1611:1333 length=45
+IIIIIIIIIIIIIEIIIIG:IDIGECI454,10+0A?8/4+40%(
+ at SRR019778.4 I331_2_FC3076HAAXX:1:1:1277:1927 length=45
+GTTGtgtgtgtattgtgtgttgtgtgtggtgtgtgtgtttttttt
++SRR019778.4 I331_2_FC3076HAAXX:1:1:1277:1927 length=45
+IIIIIIIIIIIIII6IIIIIIDIII4I%4I*I0IAI+II8/3I+I
+ at SRR019778.5 I331_2_FC3076HAAXX:1:1:1494:1984 length=45
+GGATGTTTATTTTCCTGAACCAGGGTTTGGCATTGAAGAGACAGA
++SRR019778.5 I331_2_FC3076HAAXX:1:1:1494:1984 length=45
+IIIIIIIIIIIIIIIIIIIII/III at III@<-I6I'3I67-++>)
+ at SRR019778.6 I331_2_FC3076HAAXX:1:1:682:1158 length=45
+GTTTGTTTCCTAGAGTTAAGAGTCTCTCATGGTTTGTCTCCCTCT
++SRR019778.6 I331_2_FC3076HAAXX:1:1:682:1158 length=45
+IIIIIIIIIIIII:IIII=IEIIHI at IC2I9;<II*I*H/.%2+9
+ at SRR019778.7 I331_2_FC3076HAAXX:1:1:1277:1951 length=45
+GAGTGAGAATCATGCAAAGTTACAAAAAATGGCCTTTCCTACCAT
++SRR019778.7 I331_2_FC3076HAAXX:1:1:1277:1951 length=45
+IIIIIIIIIIIIIIII9IIIIIIIFIB at AIFIIIIIEEA=1 at 6+9
+ at SRR019778.8 I331_2_FC3076HAAXX:1:1:1316:1943 length=45
+GTCTATATTCTTTATCATGTGTGACCATGGAAGTCTCTAATTCGT
++SRR019778.8 I331_2_FC3076HAAXX:1:1:1316:1943 length=45
+IIIIIIIIIIIIIIIIIIIIHI0IIIGIIA6=EE at C?I,,IA+/=
+ at SRR019778.9 I331_2_FC3076HAAXX:1:1:1222:1934 length=45
+GAATACCCACCATTTGCATCAATATGGACGGAGCTGGAGGAGATT
++SRR019778.9 I331_2_FC3076HAAXX:1:1:1222:1934 length=45
+IIIIIIIIIIIIIIIIIIIII+E<AII*IIICAECI++?I&I*A.
+ at SRR019778.10 I331_2_FC3076HAAXX:1:1:1703:940 length=45
+GGGAAAGTGATAGATAAGGTAGCAAGGCAGATAAGCAAATTCATA
++SRR019778.10 I331_2_FC3076HAAXX:1:1:1703:940 length=45
+IIIIIIIIIIIIIHII7II7IIF59598.:/=42/..-+:/')2)
+ at SRR019778.11 I331_2_FC3076HAAXX:1:1:1444:1980 length=45
+GTTCGGGGGTGTAGTGTTCTAtatatatCTATGAGGTCCAACTCA
++SRR019778.11 I331_2_FC3076HAAXX:1:1:1444:1980 length=45
+IIIIIIIIIIIIIIIIIIIIBICI1I=III9I@)I54C1+*,60&
+ at SRR019778.12 I331_2_FC3076HAAXX:1:1:1371:104 length=45
+GATTAAGAAGTTGTGGTCCATATATACAATGGAATATTACTCAGC
++SRR019778.12 I331_2_FC3076HAAXX:1:1:1371:104 length=45
+IIIIIIIIIIIIIIII0II5IDI9I;I;>I@@//?4DA5080,&,
+ at SRR019778.13 I331_2_FC3076HAAXX:1:1:1245:2003 length=45
+GTTTCCATAACCAGAAATATACAGCGGATTAGAGAAGTGATTTTT
++SRR019778.13 I331_2_FC3076HAAXX:1:1:1245:2003 length=45
+IIIIIIIIIIIIIIG>1I4I5I9IIII*II.I+G)-B7G&:B at C@
+ at SRR019778.14 I331_2_FC3076HAAXX:1:1:1226:1990 length=45
+GGGAGGATCTAGCCTTAGAACCAAGAAACAAAATGTGAGGGGAAA
++SRR019778.14 I331_2_FC3076HAAXX:1:1:1226:1990 length=45
+IIIIIIIIIIIIIIII6IIIIIAII>.III-3/II3I1IIII.--
+ at SRR019778.15 I331_2_FC3076HAAXX:1:1:1879:1017 length=45
+GTGATGTGCCATTGACCTATTTGTTTATCTTTATACCAATACTTC
++SRR019778.15 I331_2_FC3076HAAXX:1:1:1879:1017 length=45
+IIIIIIIIIIIIII2III/IIDGFII/I7IG:5CC;/0&=)+;4+
+ at SRR019778.16 I331_2_FC3076HAAXX:1:1:1478:1340 length=45
+GTATTTTACAGAAGTTTCTCTGGGTCTCAGATTCCTACCTGACCC
++SRR019778.16 I331_2_FC3076HAAXX:1:1:1478:1340 length=45
+IIIIIIIIIIIIIIDIIIIII>;C;DI at D*3IE<2B/20;&'/-/
+ at SRR019778.17 I331_2_FC3076HAAXX:1:1:1489:1981 length=45
+GGGAAAGATAGAGAGCCTTGTCTTCAAAATGGCTTATCCAGTAAG
++SRR019778.17 I331_2_FC3076HAAXX:1:1:1489:1981 length=45
+IIIIIIIIIIIIIIIIIIIIIIIII?+<5IIIIIB*66<%=3'(5
+ at SRR019778.18 I331_2_FC3076HAAXX:1:1:1710:940 length=45
+GAGAATCCACAAGAAGTTGCTGTTAGGGATTTGTTCTTATTTTAA
++SRR019778.18 I331_2_FC3076HAAXX:1:1:1710:940 length=45
+IIIIIIIIIIIII0CIIIIIII at I(-?6-@?C.37,A:%D;:&**
+ at SRR019778.19 I331_2_FC3076HAAXX:1:1:1339:973 length=45
+GAAAAGGCATAAATATTTCATTCAATTGCAAGCTTAATATAAGTC
++SRR019778.19 I331_2_FC3076HAAXX:1:1:1339:973 length=45
+IIIIIIIIIIIIIIFIIIIHIIII:II;II63=IIC.GFI76(..
+ at SRR019778.20 I331_2_FC3076HAAXX:1:1:1408:1952 length=45
+GAGTTTTCCATTTAAGAACTTGAGTGTCATCGCCTTAGGAAAGAC
++SRR019778.20 I331_2_FC3076HAAXX:1:1:1408:1952 length=45
+IIIIIIIIIIIII at FIFGIIII8I?+HIIDI=E>I>8?1)1&*//
+ at SRR019778.21 I331_2_FC3076HAAXX:1:1:1468:1371 length=45
+GAAGAGAAAGGAGATACCATCATTTGTCATTAACAGGATTACCTT
++SRR019778.21 I331_2_FC3076HAAXX:1:1:1468:1371 length=45
+IIIIIIIIIIIIIIIIIIIIIFIIII=I<I=88;29007=3-250
+ at SRR019778.22 I331_2_FC3076HAAXX:1:1:1903:903 length=45
+GCGAGAAGATAAAATGGAAGAAAAAGGTCTCATTTGTAACAGTGA
++SRR019778.22 I331_2_FC3076HAAXX:1:1:1903:903 length=45
+IIIIIIIIIIIIIIIIIAGIHIA@@E?:BII1IFD:76;94000+
+ at SRR019778.23 I331_2_FC3076HAAXX:1:1:1757:1008 length=45
+GCTGAGAATTTCGCGGCAACTTTTGAAATAATTGGGAGATAAAGG
++SRR019778.23 I331_2_FC3076HAAXX:1:1:1757:1008 length=45
+IIIIIIIIIIIIIIIIIB:BIIII@</9G;0GI3'+*0+B*4+(/
+ at SRR019778.24 I331_2_FC3076HAAXX:1:1:1902:948 length=45
+GAAGGTTGACAAGCAGTATTTAGTGGGCAAAGGAGGAGAGAGGAG
++SRR019778.24 I331_2_FC3076HAAXX:1:1:1902:948 length=45
+IIIIIIIIIIIIIIIIG at III=IIII9C=9,HB4B at +A+@(=9+7
+ at SRR019778.25 I331_2_FC3076HAAXX:1:1:665:1242 length=45
+GATTATATTTGGTCTTGAAAGAGGGAAGGACGATAGGCAGATAGG
++SRR019778.25 I331_2_FC3076HAAXX:1:1:665:1242 length=45
+IIIIIIIIIIIIIIIIDI<IBAIII>3I:13=A<@,/03I2<+:-
+ at SRR019778.26 I331_2_FC3076HAAXX:1:1:1225:1945 length=45
+GTAATGATTGAATAAATCTTATTAActtcttaatcttttaatTTT
++SRR019778.26 I331_2_FC3076HAAXX:1:1:1225:1945 length=45
+IIIIIIIIIIIIIIIIIIIIIIIB4HIIIII:3IIIIII5)IIGI
+ at SRR019778.27 I331_2_FC3076HAAXX:1:1:1506:1294 length=45
+GCTTCAAGAAGAAGGGCATGACTCACCCCCCAGGAACAGAAGCTG
++SRR019778.27 I331_2_FC3076HAAXX:1:1:1506:1294 length=45
+IIIIIIIIIIIIIIIIIIIIIIII at IIICDB15B+39.9*.B4:5
+ at SRR019778.28 I331_2_FC3076HAAXX:1:1:1318:1418 length=45
+GATTTTATTCTTATTGTTTTGATGGTGACCTTTAATATTTTCTTA
++SRR019778.28 I331_2_FC3076HAAXX:1:1:1318:1418 length=45
+IIIIIIIIIIIIIIIIIIIIADI,BFIA..IIIC2$7IFEC1&;)
+ at SRR019778.29 I331_2_FC3076HAAXX:1:1:1332:1930 length=45
+GAGAATAAGTCAATACCAAGGTGAATTGAATAATGGCCAAGAATT
++SRR019778.29 I331_2_FC3076HAAXX:1:1:1332:1930 length=45
+IIIIIIIIIIIIIIIIGIHIIII58IIII5I at 9AI8I0=,B,-3>
+ at SRR019778.30 I331_2_FC3076HAAXX:1:1:1099:1168 length=45
+GTTTATTCTCTATCATTTAGAGTCTCAGCTGTTTGGGTTTCTAGA
++SRR019778.30 I331_2_FC3076HAAXX:1:1:1099:1168 length=45
+IIIIIIIIIIIIII;IIII8I+BFII+C.2+8I.,&%3$$3/$)$
+ at SRR019778.31 I331_2_FC3076HAAXX:1:1:1529:1292 length=45
+GGATAGCCCCAAGTGTTACAAATTGTAAGTAAATATTTGTAGGGA
++SRR019778.31 I331_2_FC3076HAAXX:1:1:1529:1292 length=45
+IIIIIIIIIIIIIIIII>I<<8IIIID2I=/7.;2EH at 22/6+&*
+ at SRR019778.32 I331_2_FC3076HAAXX:1:1:1256:1996 length=45
+GTTGGGGATTAGAAAGTAGATGTAAGGAGTAGTAAAGGGAATACA
++SRR019778.32 I331_2_FC3076HAAXX:1:1:1256:1996 length=45
+IIIIIIIIIIIIIHIIIIIIIIHI6II5I;<IB61.EFI/5A52,
+ at SRR019778.33 I331_2_FC3076HAAXX:1:1:1774:1770 length=45
+GAGATGTGTGGAAGAGAACGTTGTAACACAAAGAACTTCACCATA
++SRR019778.33 I331_2_FC3076HAAXX:1:1:1774:1770 length=45
+IIIIIIIIIIIIIIII<8IIAII@/E<7H63:6.)420-'32*-%
+ at SRR019778.34 I331_2_FC3076HAAXX:1:1:1391:1422 length=45
+GATGAATGTTCTGTGAAGTTATAGCAGCATTTTACTTAATATTTT
++SRR019778.34 I331_2_FC3076HAAXX:1:1:1391:1422 length=45
+IIIIIIIIIIIIIIIFDIIIIIGIIGFB,IIII.+ at I.*:*9$=B
+ at SRR019778.35 I331_2_FC3076HAAXX:1:1:1926:930 length=45
+GAAATTACAAGCGTGATGGATGGGTTTAATAGCAAATTAGACACA
++SRR019778.35 I331_2_FC3076HAAXX:1:1:1926:930 length=45
+IIIIIIIIIIIIIIIIIII/IIIADIIA3I1A5.5.H220*.-+)
+ at SRR019778.36 I331_2_FC3076HAAXX:1:1:1351:632 length=45
+GTGAAAAAAACAGAATGATAGAGGTATATCAAAGGGACACAACAG
++SRR019778.36 I331_2_FC3076HAAXX:1:1:1351:632 length=45
+IIIIIIIIIIIIIIIII<III.IIB8I5II6=4II8<F@<2.+/6
+ at SRR019778.37 I331_2_FC3076HAAXX:1:1:1307:1953 length=45
+GGTCTTCAAGCAACACTGAGATTTGGAAAATGAAAAGTAGAAATT
++SRR019778.37 I331_2_FC3076HAAXX:1:1:1307:1953 length=45
+IIIIIIIIIIIIIIIIII7IIIIIII34;8II:@/3I(<I6.02D
+ at SRR019778.38 I331_2_FC3076HAAXX:1:1:1283:1919 length=45
+GCCCCAGGCCTGGTTCCTTCTGAGGACTATGCTGTTCCATGCCTT
++SRR019778.38 I331_2_FC3076HAAXX:1:1:1283:1919 length=45
+IIIIIIIIIIIIIIIIIIIIII7IFCIIIIIIIIIHII:BI:>I3
+ at SRR019778.39 I331_2_FC3076HAAXX:1:1:1136:1244 length=45
+GTTATATGTGAGTAATGAACCATTGAACACTACACCAAAAATTAA
++SRR019778.39 I331_2_FC3076HAAXX:1:1:1136:1244 length=45
+IIIIIIIIIIIIIIIIIIIIDIIIII:8B8IH3;72<8031D92-
+ at SRR019778.40 I331_2_FC3076HAAXX:1:1:1819:927 length=45
+GGGTTTGGAGTTTAAAGAGAGAATAAGTCATGTGCCAATATATGA
++SRR019778.40 I331_2_FC3076HAAXX:1:1:1819:927 length=45
+IIIIIIIIIIIIIIG;IFIIII6II?IEBE?8 at A<79,D5<4F1)
+ at SRR019778.41 I331_2_FC3076HAAXX:1:1:1250:1938 length=45
+GTTTGTGTCCCTCTAAAGTTCATATACTGAAGCCCTAACCCCCAG
++SRR019778.41 I331_2_FC3076HAAXX:1:1:1250:1938 length=45
+IIIIIIIIIIIIIIII2IIIIIIIIIIII=:=IIEI3/I7I7G+0
+ at SRR019778.42 I331_2_FC3076HAAXX:1:1:1648:1646 length=45
+GGTTGTgtgtgtgtgtgtgtgtgtgtgtgtttgtttttttttttA
++SRR019778.42 I331_2_FC3076HAAXX:1:1:1648:1646 length=45
+IIIIIIIIIIIIIIIIIIII7I at I.IDIB,.@%I0*-E(G%(/.%
+ at SRR019778.43 I331_2_FC3076HAAXX:1:1:690:962 length=45
+GTGAGATGATGTTCGTTGATATTTCCCTGTATTTTTTGTTTTTTC
++SRR019778.43 I331_2_FC3076HAAXX:1:1:690:962 length=45
+IIIIIIIIIIIIIIIIII>I?III??,I'$)II%:&B&'8(9$=$
+ at SRR019778.44 I331_2_FC3076HAAXX:1:1:1399:1957 length=45
+GTTGATATTTCCCTGGACTGTGTGGGGTCTCAGAGACCACTATGG
++SRR019778.44 I331_2_FC3076HAAXX:1:1:1399:1957 length=45
+IIIIIIIIIIIIIIII=IIIIIIIIIIIIIG4>,I/9;*3D*:<+
+ at SRR019778.45 I331_2_FC3076HAAXX:1:1:1797:1797 length=45
+GTgtgtattgtgtgtgggtgtgtgtgttgtgtgtgttttGGGTGG
++SRR019778.45 I331_2_FC3076HAAXX:1:1:1797:1797 length=45
+IIIIIIIIIIIIII at IIIIIIIAII?II?I0(+D)II$:&5%'&%
+ at SRR019778.46 I331_2_FC3076HAAXX:1:1:721:921 length=45
+GATGTCATAGAAGTTGTTGCCTATGTTCTCCTCTAGAATTTTGAT
++SRR019778.46 I331_2_FC3076HAAXX:1:1:721:921 length=45
+IIIIIIIIIIIIIIIIIIH?CI6I7II0I11F5I+&+(ICIH&&=
+ at SRR019778.47 I331_2_FC3076HAAXX:1:1:1584:1300 length=45
+GGTAGTGAGTATCAGCCCTGTGCAGGTTTCTGCAGATGGCCATGT
++SRR019778.47 I331_2_FC3076HAAXX:1:1:1584:1300 length=45
+IIIII-IIIIIIIHIIIII4;GCIEI-II320-&-#)%,.,$-%$
+ at SRR019778.48 I331_2_FC3076HAAXX:1:1:1397:1963 length=45
+GAAAACTTACTTACAAATTCATTCTATGAGGCCAGCATTACCCTG
++SRR019778.48 I331_2_FC3076HAAXX:1:1:1397:1963 length=45
+IIIIIIIIIIIIIIII:IIIIIIII4II4FIIH0F@*CI47><:1
+ at SRR019778.49 I331_2_FC3076HAAXX:1:1:1550:1296 length=45
+GGTAGATGTGACTCTTGATCTCAGGGTCATGAGTTCAAGCCCCAT
++SRR019778.49 I331_2_FC3076HAAXX:1:1:1550:1296 length=45
+IIIIIIIIIIIIIIIIICIIBI6D%I9B5C;0I+;37-4)0**)3
+ at SRR019778.50 I331_2_FC3076HAAXX:1:1:913:1939 length=45
+GTGtgttgtgtgttgagtgttttgtgtgtgtgttgtgttttttGT
++SRR019778.50 I331_2_FC3076HAAXX:1:1:913:1939 length=45
+IIIIIIIIIIIIIII2IIIIIII at IIG2I.I,II&9&4%II,:%,
+ at SRR019778.51 I331_2_FC3076HAAXX:1:1:1734:1009 length=45
+GAAACAATGGTTTTCAAGACACTGGACATCAGCCTACAATGGACA
++SRR019778.51 I331_2_FC3076HAAXX:1:1:1734:1009 length=45
+IIIIIIIIIIIIIIIIIIEIBIIID.>2I?186C?)/&-8,1)1+
+ at SRR019778.52 I331_2_FC3076HAAXX:1:1:1355:100 length=45
+GTACACAAATCTACGTGATATTTCGAAAGGTAAACAGATAATGCT
++SRR019778.52 I331_2_FC3076HAAXX:1:1:1355:100 length=45
+IIIIIIIIIIII<IICIGI:II:;HB<78+*;5%8160I6'..$,
+ at SRR019778.53 I331_2_FC3076HAAXX:1:1:1500:1983 length=45
+GTAACTTCTTCCTGAGTTTAGGGTCTGTAGCTCTTTCTGATTGGA
++SRR019778.53 I331_2_FC3076HAAXX:1:1:1500:1983 length=45
+IIIIIIIIIIIIII4IIII/IIIIIIII-?IIGIII8I++IC)((
+ at SRR019778.54 I331_2_FC3076HAAXX:1:1:1871:1008 length=45
+GCTGTATCTTTTATCTCCAAGACTTATTCATTCCCTACCTGGAAG
++SRR019778.54 I331_2_FC3076HAAXX:1:1:1871:1008 length=45
+IIIIIIIIIIIIIIIIII<2I8DII;IGG6D at A<<@+830%)&+(
+ at SRR019778.55 I331_2_FC3076HAAXX:1:1:1752:1721 length=45
+GAGGTGTTTTTATTCCCTTTTTACAGATGGCCGATCCGATGAAAG
++SRR019778.55 I331_2_FC3076HAAXX:1:1:1752:1721 length=45
+IIIIIIIIIIIIIIIIIIIIIIII>I7I7,IIC&FD>1->9'+00
+ at SRR019778.56 I331_2_FC3076HAAXX:1:1:1759:1586 length=45
+GGTACTCTAATAGCGTTTTATGGTAAGAGATGGTAGCTGTACTTG
++SRR019778.56 I331_2_FC3076HAAXX:1:1:1759:1586 length=45
+IIIIIIIII<IIIIIIIII=III=E6I,I:IIF2:I$2+1&+?H%
+ at SRR019778.57 I331_2_FC3076HAAXX:1:1:1537:1308 length=45
+GCTGTGCCACCCAGGCGCCCCTGCTTTTTTGTCTAGTCTTATGTA
++SRR019778.57 I331_2_FC3076HAAXX:1:1:1537:1308 length=45
+IIIIIIIIIIII4IIIIICHII>F0I1III++;6.':594*7)4*
+ at SRR019778.58 I331_2_FC3076HAAXX:1:1:1371:1534 length=45
+GTGATGGGAAAGGAAAGAGCCAATCCTGTAGGGCCTGGTAGATCA
++SRR019778.58 I331_2_FC3076HAAXX:1:1:1371:1534 length=45
+I7IIIIIIIIIIIIIIIIIIII>III@*86IIIF??I7+)6-9+0
+ at SRR019778.59 I331_2_FC3076HAAXX:1:1:1780:1771 length=45
+GTAAAATGGAGTAAATAGAGTAGAATAACATAAAAATTACAATGT
++SRR019778.59 I331_2_FC3076HAAXX:1:1:1780:1771 length=45
+IIIIIIIIIIIII;II<I5I6IIB=I=II>IE.-/0827:4./3-
+ at SRR019778.60 I331_2_FC3076HAAXX:1:1:1539:1636 length=45
+GTGTTGCTCTTTCTGAGGTGGTAATTGTGGTTTCCTTGGGCCTTT
++SRR019778.60 I331_2_FC3076HAAXX:1:1:1539:1636 length=45
+IIIIIIIIIIIIIIIIIICII:7III9I9IFII1(4I%%+&*1&.
+ at SRR019778.61 I331_2_FC3076HAAXX:1:1:1360:1444 length=45
+GTTGGGTTGATTTTCATTGGTGCTAATGTAATGGGGTATTGATCC
++SRR019778.61 I331_2_FC3076HAAXX:1:1:1360:1444 length=45
+IIIIIIIIIIIIIIIIIIIBI/GI>1II%).I),,+9'IB)+B+)
+ at SRR019778.62 I331_2_FC3076HAAXX:1:1:1763:997 length=45
+GAGATGAGTCAGCAGAGGTAAAAGCTAGAAGGATGTTAGGATGAT
++SRR019778.62 I331_2_FC3076HAAXX:1:1:1763:997 length=45
+IIIIIIIIIIIII?I at IID=II at A?E?I1;D=:C at 6>-<0+A2.=
+ at SRR019778.63 I331_2_FC3076HAAXX:1:1:996:1270 length=45
+GTCAGGGACTTAATATCTTTCCCTTAAAATATGTGTGTTATTTTC
++SRR019778.63 I331_2_FC3076HAAXX:1:1:996:1270 length=45
+IIIIIIIIIIIIIIIIIIIIIEIII<:9<I?DDA-9&7I1$4I:&
+ at SRR019778.64 I331_2_FC3076HAAXX:1:1:1724:914 length=45
+GAAAGGAATAAGGaaggaagcaaGGGAAAAGaggaggaggaggaA
++SRR019778.64 I331_2_FC3076HAAXX:1:1:1724:914 length=45
+IIIIIIIIIIIIIIII:IIIIA7II1+30=@*II'B<,44'I6+.
+ at SRR019778.65 I331_2_FC3076HAAXX:1:1:1356:1969 length=45
+GTTGtgtgtgtgttttctgttgtgtgtgttttttgttttttttGT
++SRR019778.65 I331_2_FC3076HAAXX:1:1:1356:1969 length=45
+IIIIIIIIIIIIII%IIIIII%III%;$9,II2I'/%>)<(:I%:
+ at SRR019778.66 I331_2_FC3076HAAXX:1:1:1314:76 length=45
+GTGCTTAGCAGATAGGAGGGGCTCATTAACATGTTGAACAAATGT
++SRR019778.66 I331_2_FC3076HAAXX:1:1:1314:76 length=45
+IIIIIIIIIIIII7II7IIII?II4II/14+I*<I&0&//-+;)6
+ at SRR019778.67 I331_2_FC3076HAAXX:1:1:1284:8 length=45
+GGGTAGAAGGGTTCATTTTACTCTCTGAATCCTTAACAACATTTA
++SRR019778.67 I331_2_FC3076HAAXX:1:1:1284:8 length=45
+IIIIIIIIIIIIIIIIIII7IIIIIII/-II>I@/.:/.6*F>>+
+ at SRR019778.68 I331_2_FC3076HAAXX:1:1:1459:1955 length=45
+GTGTTCCCATACTTTAACTTGtgtgtgttgtggggggAAGCATAT
++SRR019778.68 I331_2_FC3076HAAXX:1:1:1459:1955 length=45
+IIIIIIIIDIIIIII>FIIIIIIIIIIII6I>47>I+*(/#$I$@
+ at SRR019778.69 I331_2_FC3076HAAXX:1:1:1381:1967 length=45
+GCCCTAAGAACCAAGAAACAAAGTGTGAGGGGAAAGCCCTTGAAT
++SRR019778.69 I331_2_FC3076HAAXX:1:1:1381:1967 length=45
+IIIIIIIIIIIII:IE)CIC?1F4I+I8IIII.,/I959-:B&'9
+ at SRR019778.70 I331_2_FC3076HAAXX:1:1:1224:2001 length=45
+GATACGTCAAATTTATGGAAGTGTTTTATAAGTGCATTTAAGTTT
++SRR019778.70 I331_2_FC3076HAAXX:1:1:1224:2001 length=45
+IIIIIIIIIIIIIIIIII8EI=IIIII8I4.9E9+$II&%+(:?&
+ at SRR019778.71 I331_2_FC3076HAAXX:1:1:1771:1569 length=45
+GTTTTTATAATGACTTCCTTAGGCTGTACCCCCAATTTACTATAT
++SRR019778.71 I331_2_FC3076HAAXX:1:1:1771:1569 length=45
+IIIIIIIIIIIIIIIIIIII<IBCIII4C9CI>*(IAB(4?'D'F
+ at SRR019778.72 I331_2_FC3076HAAXX:1:1:1745:1606 length=45
+GATTTGCAGTCAAGGACAGGTCCACACAGTCAGGACCACAGTGTT
++SRR019778.72 I331_2_FC3076HAAXX:1:1:1745:1606 length=45
+IIIIIIIIIIIIEIIII<IIIIIIIFI5IAI8GA-?=3:->-I2;
+ at SRR019778.73 I331_2_FC3076HAAXX:1:1:1279:1959 length=45
+GGAGGAAGACCACAGAGCTGAAGCACCGTCCTCATCACATCAGGT
++SRR019778.73 I331_2_FC3076HAAXX:1:1:1279:1959 length=45
+IIIIIIIIIIIIIIIIIIIIHFII86II6IICI1CI4I4*5*4B(
+ at SRR019778.74 I331_2_FC3076HAAXX:1:1:1769:1745 length=45
+GAAGTGATGTAGATGCCTATATGAATACAGGCACATATGGTTTCC
++SRR019778.74 I331_2_FC3076HAAXX:1:1:1769:1745 length=45
+IIIIDIIIIIIIIIIIII7IIIIG>I0E2II=+7/:+7DA04*'7
+ at SRR019778.75 I331_2_FC3076HAAXX:1:1:721:1248 length=45
+GACAAGTTTAGGAAGCCTGTTATTTTACTACATGAAACATTCATA
++SRR019778.75 I331_2_FC3076HAAXX:1:1:721:1248 length=45
+IIEIIIIIIIIIIIIIIII>IIIIII>III9AI+75>76?84-2I
+ at SRR019778.76 I331_2_FC3076HAAXX:1:1:1306:616 length=45
+GTTAAGATAAATCACAGAGCACCAACCTCAAGCGATGGCAGCTGC
++SRR019778.76 I331_2_FC3076HAAXX:1:1:1306:616 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIAIC=B6:57:274.2,+(+%&
+ at SRR019778.77 I331_2_FC3076HAAXX:1:1:1474:1625 length=45
+GTAAAGGACTTTCAGGACCTAATTTAAATGATCACTCAGGCTGAG
++SRR019778.77 I331_2_FC3076HAAXX:1:1:1474:1625 length=45
+IIIIIIIIIIIIIIIIIIII>9III at 7GII3IIFIIA34'1FA)7
+ at SRR019778.78 I331_2_FC3076HAAXX:1:1:1866:942 length=45
+GACAGATACTGCCTTACTAtgccttactatgTGCACATATACACA
++SRR019778.78 I331_2_FC3076HAAXX:1:1:1866:942 length=45
+IIIIIIIIIIIIIIIIII5IIIIII1II.I+:,C33,?/;,,)/)
+ at SRR019778.79 I331_2_FC3076HAAXX:1:1:1803:1776 length=45
+GTAATATATAAACAGCATAGATAATATCAGATAAAAGGACTTTCT
++SRR019778.79 I331_2_FC3076HAAXX:1:1:1803:1776 length=45
+IIIIIIIIIIIII:II8IDI;I9:I/=E;I>AA0132/29>=/15
+ at SRR019778.80 I331_2_FC3076HAAXX:1:1:716:927 length=45
+GCAAGGTAGGGACACGGGGACTCAGACAGATGAACAGATTAGACT
++SRR019778.80 I331_2_FC3076HAAXX:1:1:716:927 length=45
+IIIIIIIIIIIIIIIIIIIACIGBI=?2I6DA8;3+;/5:/./+1
+ at SRR019778.81 I331_2_FC3076HAAXX:1:1:1294:71 length=45
+GTAAACATGGAACACAACAAAAAAACTTCAAAAAGGCAAAACTAG
++SRR019778.81 I331_2_FC3076HAAXX:1:1:1294:71 length=45
+IIIIIIIIIIIIIDIIII93I at AE.HE7I632-,63?72/1476,
+ at SRR019778.82 I331_2_FC3076HAAXX:1:1:1486:1393 length=45
+GATTTAAACAATTACATCAAAATGCATTGATTCAATTGTTTTTTA
++SRR019778.82 I331_2_FC3076HAAXX:1:1:1486:1393 length=45
+IIIIIIIIIIIIIIIIIIIBIIIID<II>9:I@;4 at 8*B0I4A77
+ at SRR019778.83 I331_2_FC3076HAAXX:1:1:1880:1764 length=45
+GTAAAAATAACTACATTAACTGTGACAAGGGATACCCAAGAAGAT
++SRR019778.83 I331_2_FC3076HAAXX:1:1:1880:1764 length=45
+IIIIIIIIIIIIIIIIIIIIIIAI:I8:IHI.52IG4'/4-+2)0
+ at SRR019778.84 I331_2_FC3076HAAXX:1:1:1410:1972 length=45
+GCATGTGGATATCCAGTTTTCCCATTTCTTGAAAAGTGTGTCCTT
++SRR019778.84 I331_2_FC3076HAAXX:1:1:1410:1972 length=45
+IIIIIIIIIIIIII/IIIIIIII7IIIIII;3.)1=<<8-D86G>
+ at SRR019778.85 I331_2_FC3076HAAXX:1:1:1681:1342 length=45
+GTAGAAATGACCTTAGCCCACTATACTAGAAACTTCGGGTTTGTG
++SRR019778.85 I331_2_FC3076HAAXX:1:1:1681:1342 length=45
+IIIIIIIIIIIIIIIIIIFDII3I<II+<0-45B9B2,0,<7/2*
+ at SRR019778.86 I331_2_FC3076HAAXX:1:1:1827:1750 length=45
+GATTTTAGAATACTATTCAGAAGCGTTTCTAGTGAGGGTCAAACA
++SRR019778.86 I331_2_FC3076HAAXX:1:1:1827:1750 length=45
+IIIIIIIIIIIIIIIIIIIIB8III>FIII)712145+.5,1&3+
+ at SRR019778.87 I331_2_FC3076HAAXX:1:1:1395:1991 length=45
+GTGCTATCTCATCATGGTTTTGATCTGTATTTCCCTGATAATGAG
++SRR019778.87 I331_2_FC3076HAAXX:1:1:1395:1991 length=45
+IIIIIIIIIIIII?IIIIIIII2IIIIF7IIIGCEI;+D&-B+**
+ at SRR019778.88 I331_2_FC3076HAAXX:1:1:1332:1959 length=45
+GATAGTAACTCCTGTCTTCCTACGGGGTTAAAAAAAGCCTTCTGC
++SRR019778.88 I331_2_FC3076HAAXX:1:1:1332:1959 length=45
+IIIIIIIIIIIIIIIIIIII3IIIIII=ID-2/+824<;4?A872
+ at SRR019778.89 I331_2_FC3076HAAXX:1:1:1304:77 length=45
+GAAGAGAGAAGTCTGGGGGATCAGAGGCCACCAAAAGCAAAACAA
++SRR019778.89 I331_2_FC3076HAAXX:1:1:1304:77 length=45
+IIIIIIIIIIIIIIICIDI?D97957@;+839,))+5-2*')**)
+ at SRR019778.90 I331_2_FC3076HAAXX:1:1:1478:1372 length=45
+GTTAAAGGTGAAGAAGGAAGAGAAGTTCCTTCCATTTGGCAGATT
++SRR019778.90 I331_2_FC3076HAAXX:1:1:1478:1372 length=45
+IIIIIIIIIIIIIIIIIIIIII2AI3II>IB at 50A:3<*5+@):2
+ at SRR019778.91 I331_2_FC3076HAAXX:1:1:1518:630 length=45
+GTAGTGGTGAAAGTATTTATTTTTCCCTATATCTTTGTTAATTGC
++SRR019778.91 I331_2_FC3076HAAXX:1:1:1518:630 length=45
+IIIIIIIIIIIIICIIII at IIIIIIDFI?I1I9IHC$:B.+BI%)
+ at SRR019778.92 I331_2_FC3076HAAXX:1:1:1486:1973 length=45
+GAAACAGACAAAAGCCTTAGTAACCTGGGGCTCAGCAAAAGGCCA
++SRR019778.92 I331_2_FC3076HAAXX:1:1:1486:1973 length=45
+IIIIIIIIIIIIIIIIIIIIIH?IIIIIIIIII3IH-//(I??I3
+ at SRR019778.93 I331_2_FC3076HAAXX:1:1:1296:1435 length=45
+GAGTTTTGAACTCAGGCTGTTCTGGCCTCAAAATTCATGCTCATT
++SRR019778.93 I331_2_FC3076HAAXX:1:1:1296:1435 length=45
+IIIIIIIIIIIIIIIIIIIII4@&;74C1)01/9I)'9&-7+(29
+ at SRR019778.94 I331_2_FC3076HAAXX:1:1:1502:1287 length=45
+GCACAGATGAGCCAAGAAGGGTTCCAGTTCCCCTGCTTCATTATG
++SRR019778.94 I331_2_FC3076HAAXX:1:1:1502:1287 length=45
+IIIIIIIIIIIIII<I73IIIDIIIFIFIA@:<<1=I<7+::.=.
+ at SRR019778.95 I331_2_FC3076HAAXX:1:1:1319:1432 length=45
+GATGATtgattgattgatagacatagatagatagatagatagata
++SRR019778.95 I331_2_FC3076HAAXX:1:1:1319:1432 length=45
+IIIIIIIIIIIIIIII6I;I?H0I3I3 at 775>;'*B63'20,%6-
+ at SRR019778.96 I331_2_FC3076HAAXX:1:1:1878:956 length=45
+GATAATATACTATGGCTCTGCAAGATAGTACTTGGGGGAAACAAA
++SRR019778.96 I331_2_FC3076HAAXX:1:1:1878:956 length=45
+IIIIIIIIIIIIIIIIII(/:*--01+1.2.-$/+0&6#,2&(&4
+ at SRR019778.97 I331_2_FC3076HAAXX:1:1:608:1209 length=45
+GAAATTTTCCTTCAATAAAGGGAGATTCTAATCTACATATTTTAA
++SRR019778.97 I331_2_FC3076HAAXX:1:1:608:1209 length=45
+IIIIIIIIIIIIIIIIHH4I=A<I:@IGI73E=I=7180<7=06,
+ at SRR019778.98 I331_2_FC3076HAAXX:1:1:216:1935 length=45
+GATTACAGTAAATGATAGATGCAAAGAGCCTTGTGGGCATATGGC
++SRR019778.98 I331_2_FC3076HAAXX:1:1:216:1935 length=45
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+ at SRR019778.99 I331_2_FC3076HAAXX:1:1:1374:116 length=45
+GTTTATATTTGAGTTAAACTTTGCATGCCCACCTGGTAGCTAAGC
++SRR019778.99 I331_2_FC3076HAAXX:1:1:1374:116 length=45
+IIIIIIIIIIIIIIIEI6IIII7I8I&IBI(3<@1.3,&:9/'(-
+ at SRR019778.100 I331_2_FC3076HAAXX:1:1:1682:1290 length=45
+GTGGTCCACATATACAATGGAATATTACTCAGCTATCAGAAAGAA
++SRR019778.100 I331_2_FC3076HAAXX:1:1:1682:1290 length=45
+IIIIIIIIIIIIIIIIDIII2BDHIIHCF=/-6A1921*/1-*-7
diff --git a/test/tantan_test.sh b/test/tantan_test.sh
new file mode 100755
index 0000000..98278fe
--- /dev/null
+++ b/test/tantan_test.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+
+# Run tantan with various inputs and check the outputs.
+
+cd $(dirname $0)
+
+# Make sure we use this version of tantan:
+PATH=../src:$PATH
+
+countLowercaseLetters () {
+    grep -v '^>' "$@" | tr -cd a-z | wc -c
+}
+
+{
+    tantan hg19_chrM.fa
+    echo
+    tantan -p -xx titin_human.fa
+    echo
+    tantan -p -f2 titin_human.fa
+    echo
+    tantan -c hg19_chrM.fa | countLowercaseLetters
+    echo
+    tantan -w50 -e.005 -d1 hg19_chrM.fa | countLowercaseLetters
+    echo
+    tantan -m atMask.mat -r.01 hg19_chrM.fa | countLowercaseLetters
+    echo
+    tantan -p -a11 -b2 titin_human.fa | countLowercaseLetters
+    echo
+    tantan panda.fastq
+} |
+diff tantan_test.out -
diff --git a/test/titin_human.fa b/test/titin_human.fa
new file mode 100644
index 0000000..9838ace
--- /dev/null
+++ b/test/titin_human.fa
@@ -0,0 +1,688 @@
+>sp|Q8WZ42|TITIN_HUMAN
+MTTQAPTFTQPLQSVVVLEGSTATFEAHISGFPVPEVSWFRDGQVISTST
+LPGVQISFSDGRAKLTIPAVTKANSGRYSLKATNGSGQATSTAELLVKAE
+TAPPNFVQRLQSMTVRQGSQVRLQVRVTGIPTPVVKFYRDGAEIQSSLDF
+QISQEGDLYSLLIAEAYPEDSGTYSVNATNSVGRATSTAELLVQGEEEVP
+AKKTKTIVSTAQISESRQTRIEKKIEAHFDARSIATVEMVIDGAAGQQLP
+HKTPHRIPPKPKSRSPTPPSIAAKAQLARQQSPSPIRHSPSPVRHVRAPT
+PSPVRSVSPAARISTSPIRSVRSPLLMRKTQASTVATGPEVPPPWKQEGY
+VASSSEAEMRETTLTTSTQIRTEERWEGRYGVQEQVTISGAAGAAASVSA
+SASYAAEAVATGAKEVKQDADKSAAVATVVAAVDMARVREPVISAVEQTA
+QRTTTTAVHIQPAQEQVRKEAEKTAVTKVVVAADKAKEQELKSRTKEVIT
+TKQEQMHVTHEQIRKETEKTFVPKVVISAAKAKEQETRISEEITKKQKQV
+TQEAIRQETEITAASMVVVATAKSTKLETVPGAQEETTTQQDQMHLSYEK
+IMKETRKTVVPKVIVATPKVKEQDLVSRGREGITTKREQVQITQEKMRKE
+AEKTALSTIAVATAKAKEQETILRTRETMATRQEQIQVTHGKVDVGKKAE
+AVATVVAAVDQARVREPREPGHLEESYAQQTTLEYGYKERISAAKVAEPP
+QRPASEPHVVPKAVKPRVIQAPSETHIKTTDQKGMHISSQIKKTTDLTTE
+RLVHVDKRPRTASPHFTVSKISVPKTEHGYEASIAGSAIATLQKELSATS
+SAQKITKSVKAPTVKPSETRVRAEPTPLPQFPFADTPDTYKSEAGVEVKK
+EVGVSITGTTVREERFEVLHGREAKVTETARVPAPVEIPVTPPTLVSGLK
+NVTVIEGESVTLECHISGYPSPTVTWYREDYQIESSIDFQITFQSGIARL
+MIREAFAEDSGRFTCSAVNEAGTVSTSCYLAVQVSEEFEKETTAVTEKFT
+TEEKRFVESRDVVMTDTSLTEEQAGPGEPAAPYFITKPVVQKLVEGGSVV
+FGCQVGGNPKPHVYWKKSGVPLTTGYRYKVSYNKQTGECKLVISMTFADD
+AGEYTIVVRNKHGETSASASLLEEADYELLMKSQQEMLYQTQVTAFVQEP
+KVGETAPGFVYSEYEKEYEKEQALIRKKMAKDTVVVRTYVEDQEFHISSF
+EERLIKEIEYRIIKTTLEELLEEDGEEKMAVDISESEAVESGFDLRIKNY
+RILEGMGVTFHCKMSGYPLPKIAWYKDGKRIKHGERYQMDFLQDGRASLR
+IPVVLPEDEGIYTAFASNIKGNAICSGKLYVEPAAPLGAPTYIPTLEPVS
+RIRSLSPRSVSRSPIRMSPARMSPARMSPARMSPARMSPGRRLEETDESQ
+LERLYKPVFVLKPVSFKCLEGQTARFDLKVVGRPMPETFWFHDGQQIVND
+YTHKVVIKEDGTQSLIIVPATPSDSGEWTVVAQNRAGRSSISVILTVEAV
+EHQVKPMFVEKLKNVNIKEGSQLEMKVRATGNPNPDIVWLKNSDIIVPHK
+YPKIRIEGTKGEAALKIDSTVSQDSAWYTATAINKAGRDTTRCKVNVEVE
+FAEPEPERKLIIPRGTYRAKEIAAPELEPLHLRYGQEQWEEGDLYDKEKQ
+QKPFFKKKLTSLRLKRFGPAHFECRLTPIGDPTMVVEWLHDGKPLEAANR
+LRMINEFGYCSLDYGVAYSRDSGIITCRATNKYGTDHTSATLIVKDEKSL
+VEESQLPEGRKGLQRIEELERMAHEGALTGVTTDQKEKQKPDIVLYPEPV
+RVLEGETARFRCRVTGYPQPKVNWYLNGQLIRKSKRFRVRYDGIHYLDIV
+DCKSYDTGEVKVTAENPEGVIEHKVKLEIQQREDFRSVLRRAPEPRPEFH
+VHEPGKLQFEVQKVDRPVDTTETKEVVKLKRAERITHEKVPEESEELRSK
+FKRRTEEGYYEAITAVELKSRKKDESYEELLRKTKDELLHWTKELTEEEK
+KALAEEGKITIPTFKPDKIELSPSMEAPKIFERIQSQTVGQGSDAHFRVR
+VVGKPDPECEWYKNGVKIERSDRIYWYWPEDNVCELVIRDVTAEDSASIM
+VKAINIAGETSSHAFLLVQAKQLITFTQELQDVVAKEKDTMATFECETSE
+PFVKVKWYKDGMEVHEGDKYRMHSDRKVHFLSILTIDTSDAEDYSCVLVE
+DENVKTTAKLIVEGAVVEFVKELQDIEVPESYSGELECIVSPENIEGKWY
+HNDVELKSNGKYTITSRRGRQNLTVKDVTKEDQGEYSFVIDGKKTTCKLK
+MKPRPIAILQGLSDQKVCEGDIVQLEVKVSLESVEGVWMKDGQEVQPSDR
+VHIVIDKQSHMLLIEDMTKEDAGNYSFTIPALGLSTSGRVSVYSVDVITP
+LKDVNVIEGTKAVLECKVSVPDVTSVKWYLNDEQIKPDDRVQAIVKGTKQ
+RLVINRTHASDEGPYKLIVGRVETNCNLSVEKIKIIRGLRDLTCTETQNV
+VFEVELSHSGIDVLWNFKDKEIKPSSKYKIEAHGKIYKLTVLNMMKDDEG
+KYTFYAGENITSGKLTVAGGAISKPLTDQTVAESQEAVFECEVANPDSKG
+EWLRDGKHLPLTNNIRSESDGHKRRLIIAATKLDDIGEYTYKVATSKTSA
+KLKVEAVKIKKTLKNLTVTETQDAVFTVELTHPNVKGVQWIKNGVVLESN
+EKYAISVKGTIYSLRIKNCAIVDESVYGFRLGRLGASARLHVETVKIIKK
+PKDVTALENATVAFEVSVSHDTVPVKWFHKNVEIKPSDKHRLVSERKVHK
+LMLQNISPSDAGEYTAVVGQLECKAKLFVETLHITKTMKNIEVPETKTAS
+FECEVSHFNVPSMWLKNGVEIEMSEKFKIVVQGKLHQLIIMNTSTEDSAE
+YTFVCGNDQVSATLTVTPIMITSMLKDINAEEKDTITFEVTVNYEGISYK
+WLKNGVEIKSTDKCQMRTKKLTHSLNIRNVHFGDAADYTFVAGKATSTAT
+LYVEARHIEFRKHIKDIKVLEKKRAMFECEVSEPDITVQWMKDDQELQIT
+DRIKIQKEKYVHRLLIPSTRMSDAGKYTVVAGGNVSTAKLFVEGRDVRIR
+SIKKEVQVIEKQRAVVEFEVNEDDVDAHWYKDGIEINFQVQERHKYVVER
+RIHRMFISETRQSDAGEYTFVAGRNRSSVTLYVNAPEPPQVLQELQPVTV
+QSGKPARFCAVISGRPQPKISWYKEEQLLSTGFKCKFLHDGQEYTLLLIE
+AFPEDAAVYTCEAKNDYGVATTSASLSVEVPEVVSPDQEMPVYPPAIITP
+LQDTVTSEGQPARFQCRVSGTDLKVSWYSKDKKIKPSRFFRMTQFEDTYQ
+LEIAEAYPEDEGTYTFVASNAVGQVSSTANLSLEAPESILHERIEQEIEM
+EMKEFSSSFLSAEEEGLHSAELQLSKINETLELLSESPVYSTKFDSEKEG
+TGPIFIKEVSNADISMGDVATLSVTVIGIPKPKIQWFFNGVLLTPSADYK
+FVFDGDDHSLIILFTKLEDEGEYTCMASNDYGKTICSAYLKINSKGEGHK
+DTETESAVAKSLEKLGGPCPPHFLKELKPIRCAQGLPAIFEYTVVGEPAP
+TVTWFKENKQLCTSVYYTIIHNPNGSGTFIVNDPQREDSGLYICKAENML
+GESTCAAELLVLLEDTDMTDTPCKAKSTPEAPEDFPQTPLKGPAVEALDS
+EQEIATFVKDTILKAALITEENQQLSYEHIAKANELSSQLPLGAQELQSI
+LEQDKLTPESTREFLCINGSIHFQPLKEPSPNLQLQIVQSQKTFSKEGIL
+MPEEPETQAVLSDTEKIFPSAMSIEQINSLTVEPLKTLLAEPEGNYPQSS
+IEPPMHSYLTSVAEEVLSPKEKTVSDTNREQRVTLQKQEAQSALILSQSL
+AEGHVESLQSPDVMISQVNYEPLVPSEHSCTEGGKILIESANPLENAGQD
+SAVRIEEGKSLRFPLALEEKQVLLKEEHSDNVVMPPDQIIESKREPVAIK
+KVQEVQGRDLLSKESLLSGIPEEQRLNLKIQICRALQAAVASEQPGLFSE
+WLRNIEKVEVEAVNITQEPRHIMCMYLVTSAKSVTEEVTIIIEDVDPQMA
+NLKMELRDALCAIIYEEIDILTAEGPRIQQGAKTSLQEEMDSFSGSQKVE
+PITEPEVESKYLISTEEVSYFNVQSRVKYLDATPVTKGVASAVVSDEKQD
+ESLKPSEEKEESSSESGTEEVATVKIQEAEGGLIKEDGPMIHTPLVDTVS
+EEGDIVHLTTSITNAKEVNWYFENKLVPSDEKFKCLQDQNTYTLVIDKVN
+TEDHQGEYVCEALNDSGKTATSAKLTVVKRAAPVIKRKIEPLEVALGHLA
+KFTCEIQSAPNVRFQWFKAGREIYESDKCSIRSSKYISSLEILRTQVVDC
+GEYTCKASNEYGSVSCTATLTVTEAYPPTFLSRPKSLTTFVGKAAKFICT
+VTGTPVIETIWQKDGAALSPSPNWKISDAENKHILELSNLTIQDRGVYSC
+KASNKFGADICQAELIIIDKPHFIKELEPVQSAINKKVHLECQVDEDRKV
+TVTWSKDGQKLPPGKDYKICFEDKIATLEIPLAKLKDSGTYVCTASNEAG
+SSSCSATVTVREPPSFVKKVDPSYLMLPGESARLHCKLKGSPVIQVTWFK
+NNKELSESNTVRMYFVNSEAILDITDVKVEDSGSYSCEAVNDVGSDSCST
+EIVIKEPPSFIKTLEPADIVRGTNALLQCEVSGTGPFEISWFKDKKQIRS
+SKKYRLFSQKSLVCLEIFSFNSADVGEYECVVANEVGKCGCMATHLLKEP
+PTFVKKVDDLIALGGQTVTLQAAVRGSEPISVTWMKGQEVIREDGKIKMS
+FSNGVAVLIIPDVQISFGGKYTCLAENEAGSQTSVGELIVKEPAKIIERA
+ELIQVTAGDPATLEYTVAGTPELKPKWYKDGRPLVASKKYRISFKNNVAQ
+LKFYSAELHDSGQYTFEISNEVGSSSCETTFTVLDRDIAPFFTKPLRNVD
+SVVNGTCRLDCKIAGSLPMRVSWFKDGKEIAASDRYRIAFVEGTASLEII
+RVDMNDAGNFTCRATNSVGSKDSSGALIVQEPPSFVTKPGSKDVLPGSAV
+CLKSTFQGSTPLTIRWFKGNKELVSGGSCYITKEALESSLELYLVKTSDS
+GTYTCKVSNVAGGVECSANLFVKEPATFVEKLEPSQLLKKGDATQLACKV
+TGTPPIKITWFANDREIKESSKHRMSFVESTAVLRLTDVGIEDSGEYMCE
+AQNEAGSDHCSSIVIVKESPYFTKEFKPIEVLKEYDVMLLAEVAGTPPFE
+ITWFKDNTILRSGRKYKTFIQDHLVSLQILKFVAADAGEYQCRVTNEVGS
+SICSARVTLREPPSFIKKIESTSSLRGGTAAFQATLKGSLPITVTWLKDS
+DEITEDDNIRMTFENNVASLYLSGIEVKHDGKYVCQAKNDAGIQRCSALL
+SVKEPATITEEAVSIDVTQGDPATLQVKFSGTKEITAKWFKDGQELTLGS
+KYKISVTDTVSILKIISTEKKDSGEYTFEVQNDVGRSSCKARINVLDLII
+PPSFTKKLKKMDSIKGSFIDLECIVAGSHPISIQWFKDDQEISASEKYKF
+SFHDNTAFLEISQLEGTDSGTYTCSATNKAGHNQCSGHLTVKEPPYFVEK
+PQSQDVNPNTRVQLKALVGGTAPMTIKWFKDNKELHSGAARSVWKDDTST
+SLELFAAKATDSGTYICQLSNDVGTATSKATLFVKEPPQFIKKPSPVLVL
+RNGQSTTFECQITGTPKIRVSWYLDGNEITAIQKHGISFIDGLATFQISG
+ARVENSGTYVCEARNDAGTASCSIELKVKEPPTFIRELKPVEVVKYSDVE
+LECEVTGTPPFEVTWLKNNREIRSSKKYTLTDRVSVFNLHITKCDPSDTG
+EYQCIVSNEGGSCSCSTRVALKEPPSFIKKIENTTTVLKSSATFQSTVAG
+SPPISITWLKDDQILDEDDNVYISFVDSVATLQIRSVDNGHSGRYTCQAK
+NESGVERCYAFLLVQEPAQIVEKAKSVDVTEKDPMTLECVVAGTPELKVK
+WLKDGKQIVPSRYFSMSFENNVASFRIQSVMKQDSGQYTFKVENDFGSSS
+CDAYLRVLDQNIPPSFTKKLTKMDKVLGSSIHMECKVSGSLPISAQWFKD
+GKEISTSAKYRLVCHERSVSLEVNNLELEDTANYTCKVSNVAGDDACSGI
+LTVKEPPSFLVKPGRQQAIPDSTVEFKAILKGTPPFKIKWFKDDVELVSG
+PKCFIGLEGSTSFLNLYSVDASKTGQYTCHVTNDVGSDSCTTMLLVTEPP
+KFVKKLEASKIVKAGDSSRLECKIAGSPEIRVVWFRNEHELPASDKYRMT
+FIDSVAVIQMNNLSTEDSGDFICEAQNPAGSTSCSTKVIVKEPPVFSSFP
+PIVETLKNAEVSLECELSGTPPFEVVWYKDKRQLRSSKKYKIASKNFHTS
+IHILNVDTSDIGEYHCKAQNEVGSDTCVCTVKLKEPPRFVSKLNSLTVVA
+GEPAELQASIEGAQPIFVQWLKEKEEVIRESENIRITFVENVATLQFAKA
+EPANAGKYICQIKNDGGMEENMATLMVLEPAVIVEKAGPMTVTVGETCTL
+ECKVAGTPELSVEWYKDGKLLTSSQKHKFSFYNKISSLRILSVERQDAGT
+YTFQVQNNVGKSSCTAVVDVSDRAVPPSFTRRLKNTGGVLGASCILECKV
+AGSSPISVAWFHEKTKIVSGAKYQTTFSDNVCTLQLNSLDSSDMGNYTCV
+AANVAGSDECRAVLTVQEPPSFVKEPEPLEVLPGKNVTFTSVIRGTPPFK
+VNWFRGARELVKGDRCNIYFEDTVAELELFNIDISQSGEYTCVVSNNAGQ
+ASCTTRLFVKEPAAFLKRLSDHSVEPGKSIILESTYTGTLPISVTWKKDG
+FNITTSEKCNIVTTEKTCILEILNSTKRDAGQYSCEIENEAGRDVCGALV
+STLEPPYFVTELEPLEAAVGDSVSLQCQVAGTPEITVSWYKGDTKLRPTP
+EYRTYFTNNVATLVFNKVNINDSGEYTCKAENSIGTASSKTVFRIQERQL
+PPSFARQLKDIEQTVGLPVTLTCRLNGSAPIQVCWYRDGVLLRDDENLQT
+SFVDNVATLKILQTDLSHSGQYSCSASNPLGTASSSARLTAREPKKSPFF
+DIKPVSIDVIAGESADFECHVTGAQPMRITWSKDNKEIRPGGNYTITCVG
+NTPHLRILKVGKGDSGQYTCQATNDVGKDMCSAQLSVKEPPKFVKKLEAS
+KVAKQGESIQLECKISGSPEIKVSWFRNDSELHESWKYNMSFINSVALLT
+INEASAEDSGDYICEAHNGVGDASCSTALTVKAPPVFTQKPSPVGALKGS
+DVILQCEISGTPPFEVVWVKDRKQVRNSKKFKITSKHFDTSLHILNLEAS
+DVGEYHCKATNEVGSDTCSCSVKFKEPPRFVKKLSDTSTLIGDAVELRAI
+VEGFQPISVVWLKDRGEVIRESENTRISFIDNIATLQLGSPEASNSGKYI
+CQIKNDAGMRECSAVLTVLEPARIIEKPEPMTVTTGNPFALECVVTGTPE
+LSAKWFKDGRELSADSKHHITFINKVASLKIPCAEMSDKGLYSFEVKNSV
+GKSNCTVSVHVSDRIVPPSFIRKLKDVNAILGASVVLECRVSGSAPISVG
+WFQDGNEIVSGPKCQSSFSENVCTLNLSLLEPSDTGIYTCVAANVAGSDE
+CSAVLTVQEPPSFEQTPDSVEVLPGMSLTFTSVIRGTPPFKVKWFKGSRE
+LVPGESCNISLEDFVTELELFEVQPLESGDYSCLVTNDAGSASCTTHLFV
+KEPATFVKRLADFSVETGSPIVLEATYTGTPPISVSWIKDEYLISQSERC
+SITMTEKSTILEILESTIEDYAQYSCLIENEAGQDICEALVSVLEPPYFI
+EPLEHVEAVIGEPATLQCKVDGTPEIRISWYKEHTKLRSAPAYKMQFKNN
+VASLVINKVDHSDVGEYSCKADNSVGAVASSAVLVIKERKLPPFFARKLK
+DVHETLGFPVAFECRINGSEPLQVSWYKDGVLLKDDANLQTSFVHNVATL
+QILQTDQSHIGQYNCSASNPLGTASSSAKLILSEHEVPPFFDLKPVSVDL
+ALGESGTFKCHVTGTAPIKITWAKDNREIRPGGNYKMTLVENTATLTVLK
+VGKGDAGQYTCYASNIAGKDSCSAHLGVQEPPRFIKKLEPSRIVKQDEFT
+RYECKIGGSPEIKVLWYKDETEIQESSKFRMSFVDSVAVLEMHNLSVEDS
+GDYTCEAHNAAGSASSSTSLKVKEPPIFRKKPHPIETLKGADVHLECELQ
+GTPPFHVSWYKDKRELRSGKKYKIMSENFLTSIHILNVDAADIGEYQCKA
+TNDVGSDTCVGSIALKAPPRFVKKLSDISTVVGKEVQLQTTIEGAEPISV
+VWFKDKGEIVRESDNIWISYSENIATLQFSRVEPANAGKYTCQIKNDAGM
+QECFATLSVLEPATIVEKPESIKVTTGDTCTLECTVAGTPELSTKWFKDG
+KELTSDNKYKISFFNKVSGLKIINVAPSDSGVYSFEVQNPVGKDSCTASL
+QVSDRTVPPSFTRKLKETNGLSGSSVVMECKVYGSPPISVSWFHEGNEIS
+SGRKYQTTLTDNTCALTVNMLEESDSGDYTCIATNMAGSDECSAPLTVRE
+PPSFVQKPDPMDVLTGTNVTFTSIVKGTPPFSVSWFKGSSELVPGDRCNV
+SLEDSVAELELFDVDTSQSGEYTCIVSNEAGKASCTTHLYIKAPAKFVKR
+LNDYSIEKGKPLILEGTFTGTPPISVTWKKNGINVTPSQRCNITTTEKSA
+ILEIPSSTVEDAGQYNCYIENASGKDSCSAQILILEPPYFVKQLEPVKVS
+VGDSASLQCQLAGTPEIGVSWYKGDTKLRPTTTYKMHFRNNVATLVFNQV
+DINDSGEYICKAENSVGEVSASTFLTVQEQKLPPSFSRQLRDVQETVGLP
+VVFDCAISGSEPISVSWYKDGKPLKDSPNVQTSFLDNTATLNIFKTDRSL
+AGQYSCTATNPIGSASSSARLILTEGKNPPFFDIRLAPVDAVVGESADFE
+CHVTGTQPIKVSWAKDSREIRSGGKYQISYLENSAHLTVLKVDKGDSGQY
+TCYAVNEVGKDSCTAQLNIKERLIPPSFTKRLSETVEETEGNSFKLEGRV
+AGSQPITVAWYKNNIEIQPTSNCEITFKNNTLVLQVRKAGMNDAGLYTCK
+VSNDAGSALCTSSIVIKEPKKPPVFDQHLTPVTVSEGEYVQLSCHVQGSE
+PIRIQWLKAGREIKPSDRCSFSFASGTAVLELRDVAKADSGDYVCKASNV
+AGSDTTKSKVTIKDKPAVAPATKKAAVDGRLFFVSEPQSIRVVEKTTATF
+IAKVGGDPIPNVKWTKGKWRQLNQGGRVFIHQKGDEAKLEIRDTTKTDSG
+LYRCVAFNEHGEIESNVNLQVDERKKQEKIEGDLRAMLKKTPILKKGAGE
+EEEIDIMELLKNVDPKEYEKYARMYGITDFRGLLQAFELLKQSQEEETHR
+LEIEEIERSERDEKEFEELVSFIQQRLSQTEPVTLIKDIENQTVLKDNDA
+VFEIDIKINYPEIKLSWYKGTEKLEPSDKFEISIDGDRHTLRVKNCQLKD
+QGNYRLVCGPHIASAKLTVIEPAWERHLQDVTLKEGQTCTMTCQFSVPNV
+KSEWFRNGRILKPQGRHKTEVEHKVHKLTIADVRAEDQGQYTCKYEDLET
+SAELRIEAEPIQFTKRIQNIVVSEHQSATFECEVSFDDAIVTWYKGPTEL
+TESQKYNFRNDGRCHYMTIHNVTPDDEGVYSVIARLEPRGEARSTAELYL
+TTKEIKLELKPPDIPDSRVPIPTMPIRAVPPEEIPPVVAPPIPLLLPTPE
+EKKPPPKRIEVTKKAVKKDAKKVVAKPKEMTPREEIVKKPPPPTTLIPAK
+APEIIDVSSKAEEVKIMTITRKKEVQKEKEAVYEKKQAVHKEKRVFIESF
+EEPYDELEVEPYTEPFEQPYYEEPDEDYEEIKVEAKKEVHEEWEEDFEEG
+QEYYEREEGYDEGEEEWEEAYQEREVIQVQKEVYEESHERKVPAKVPEKK
+APPPPKVIKKPVIEKIEKTSRRMEEEKVQVTKVPEVSKKIVPQKPSRTPV
+QEEVIEVKVPAVHTKKMVISEEKMFFASHTEEEVSVTVPEVQKEIVTEEK
+IHVAVSKRVEPPPKVPELPEKPAPEEVAPVPIPKKVEPPAPKVPEVPKKP
+VPEEKKPVPVPKKEPAAPPKVPEVPKKPVPEEKIPVPVAKKKEAPPAKVP
+EVQKRVVTEEKITIVTQREESPPPAVPEIPKKKVPEERKPVPRKEEEVPP
+PPKVPALPKKPVPEEKVAVPVPVAKKAPPPRAEVSKKTVVEEKRFVAEEK
+LSFAVPQRVEVTRHEVSAEEEWSYSEEEEGVSISVYREEEREEEEEAEVT
+EYEVMEEPEEYVVEEKLHIISKRVEAEPAEVTERQEKKIVLKPKIPAKIE
+EPPPAKVPEAPKKIVPEKKVPAPVPKKEKVPPPKVPEEPKKPVPEKKVPP
+KVIKMEEPLPAKVTERHMQITQEEKVLVAVTKKEAPPKARVPEEPKRAVP
+EEKVLKLKPKREEEPPAKVTEFRKRVVKEEKVSIEAPKREPQPIKEVTIM
+EEKERAYTLEEEAVSVQREEEYEEYEEYDYKEFEEYEPTEEYDQYEEYEE
+REYERYEEHEEYITEPEKPIPVKPVPEEPVPTKPKAPPAKVLKKAVPEEK
+VPVPIPKKLKPPPPKVPEEPKKVFEEKIRISITKREKEQVTEPAAKVPMK
+PKRVVAEEKVPVPRKEVAPPVRVPEVPKELEPEEVAFEEEVVTHVEEYLV
+EEEEEYIHEEEEFITEEEVVPVIPVKVPEVPRKPVPEEKKPVPVPKKKEA
+PPAKVPEVPKKPEEKVPVLIPKKEKPPPAKVPEVPKKPVPEEKVPVPVPK
+KVEAPPAKVPEVPKKPVPEKKVPVPAPKKVEAPPAKVPEVPKKLIPEEKK
+PTPVPKKVEAPPPKVPKKREPVPVPVALPQEEEVLFEEEIVPEEEVLPEE
+EEVLPEEEEVLPEEEEVLPEEEEIPPEEEEVPPEEEYVPEEEEFVPEEEV
+LPEVKPKVPVPAPVPEIKKKVTEKKVVIPKKEEAPPAKVPEVPKKVEEKR
+IILPKEEEVLPVEVTEEPEEEPISEEEIPEEPPSIEEVEEVAPPRVPEVI
+KKAVPEAPTPVPKKVEAPPAKVSKKIPEEKVPVPVQKKEAPPAKVPEVPK
+KVPEKKVLVPKKEAVPPAKGRTVLEEKVSVAFRQEVVVKERLELEVVEAE
+VEEIPEEEEFHEVEEYFEEGEFHEVEEFIKLEQHRVEEEHRVEKVHRVIE
+VFEAEEVEVFEKPKAPPKGPEISEKIIPPKKPPTKVVPRKEPPAKVPEVP
+KKIVVEEKVRVPEEPRVPPTKVPDVLPPKEVVPEKKVPVPPAKKPEAPPP
+KVPEAPKEVVPEKKVPVPPPKKPEVPPTKVPEVPKAAVPEKKVPEAIPPK
+PESPPPEVPEAPKEVVPEKKVPAAPPKKPEVTPVKVPEAPKEVVPEKKVP
+VPPPKKPEVPPTKVPEVPKVAVPEKKVPEAIPPKPESPPPEVFEEPEEVA
+LEEPPAEVVEEPEPAAPPQVTVPPKKPVPEKKAPAVVAKKPELPPVKVPE
+VPKEVVPEKKVPLVVPKKPEAPPAKVPEVPKEVVPEKKVAVPKKPEVPPA
+KVPEVPKKPVLEEKPAVPVPERAESPPPEVYEEPEEIAPEEEIAPEEEKP
+VPVAEEEEPEVPPPAVPEEPKKIIPEKKVPVIKKPEAPPPKEPEPEKVIE
+KPKLKPRPPPPPPAPPKEDVKEKIFQLKAIPKKKVPEKPQVPEKVELTPL
+KVPGGEKKVRKLLPERKPEPKEEVVLKSVLRKRPEEEEPKVEPKKLEKVK
+KPAVPEPPPPKPVEEVEVPTVTKRERKIPEPTKVPEIKPAIPLPAPEPKP
+KPEAEVKTIKPPPVEPEPTPIAAPVTVPVVGKKAEAKAPKEEAAKPKGPI
+KGVPKKTPSPIEAERRKLRPGSGGEKPPDEAPFTYQLKAVPLKFVKEIKD
+IILTESEFVGSSAIFECLVSPSTAITTWMKDGSNIRESPKHRFIADGKDR
+KLHIIDVQLSDAGEYTCVLRLGNKEKTSTAKLVVEELPVRFVKTLEEEVT
+VVKGQPLYLSCELNKERDVVWRKDGKIVVEKPGRIVPGVIGLMRALTIND
+ADDTDAGTYTVTVENANNLECSSCVKVVEVIRDWLVKPIRDQHVKPKGTA
+IFACDIAKDTPNIKWFKGYDEIPAEPNDKTEILRDGNHLYLKIKNAMPED
+IAEYAVEIEGKRYPAKLTLGEREVELLKPIEDVTIYEKESASFDAEISEA
+DIPGQWKLKGELLRPSPTCEIKAEGGKRFLTLRKVKLDQAGEVLYQALNA
+ITTAILTVKEIELDFAVPLKDVTVPERRQARFECVLTREANVIWSKGPDI
+IKSSDKFDIIADGKKHILVINDSQFDDEGVYTAEVEGKKTSARLFVTGIR
+LKFMSPLEDQTVKEGETATFVCELSHEKMHVVWFKNDAKLHTSRTVLISS
+EGKTHKLEMKEVTLDDISQIKAQVKELSSTAQLKVLEADPYFTVKLHDKT
+AVEKDEITLKCEVSKDVPVKWFKDGEEIVPSPKYSIKADGLRRILKIKKA
+DLKDKGEYVCDCGTDKTKANVTVEARLIKVEKPLYGVEVFVGETAHFEIE
+LSEPDVHGQWKLKGQPLTASPDCEIIEDGKKHILILHNCQLGMTGEVSFQ
+AANAKSAANLKVKELPLIFITPLSDVKVFEKDEAKFECEVSREPKTFRWL
+KGTQEITGDDRFELIKDGTKHSMVIKSAAFEDEAKYMFEAEDKHTSGKLI
+IEGIRLKFLTPLKDVTAKEKESAVFTVELSHDNIRVKWFKNDQRLHTTRS
+VSMQDEGKTHSITFKDLSIDDTSQIRVEAMGMSSEAKLTVLEGDPYFTGK
+LQDYTGVEKDEVILQCEISKADAPVKWFKDGKEIKPSKNAVIKADGKKRM
+LILKKALKSDIGQYTCDCGTDKTSGKLDIEDREIKLVRPLHSVEVMETET
+ARFETEISEDDIHANWKLKGEALLQTPDCEIKEEGKIHSLVLHNCRLDQT
+GGVDFQAANVKSSAHLRVKPRVIGLLRPLKDVTVTAGETATFDCELSYED
+IPVEWYLKGKKLEPSDKVVPRSEGKVHTLTLRDVKLEDAGEVQLTAKDFK
+THANLFVKEPPVEFTKPLEDQTVEEGATAVLECEVSRENAKVKWFKNGTE
+ILKSKKYEIVADGRVRKLVIHDCTPEDIKTYTCDAKDFKTSCNLNVVPPH
+VEFLRPLTDLQVREKEMARFECELSRENAKVKWFKDGAEIKKGKKYDIIS
+KGAVRILVINKCLLDDEAEYSCEVRTARTSGMLTVLEEEAVFTKNLANIE
+VSETDTIKLVCEVSKPGAEVIWYKGDEEIIETGRYEILTEGRKRILVIQN
+AHLEDAGNYNCRLPSSRTDGKVKVHELAAEFISKPQNLEILEGEKAEFVC
+SISKESFPVQWKRDDKTLESGDKYDVIADGKKRVLVVKDATLQDMGTYVV
+MVGAARAAAHLTVIEKLRIVVPLKDTRVKEQQEVVFNCEVNTEGAKAKWF
+RNEEAIFDSSKYIILQKDLVYTLRIRDAHLDDQANYNVSLTNHRGENVKS
+AANLIVEEEDLRIVEPLKDIETMEKKSVTFWCKVNRLNVTLKWTKNGEEV
+PFDNRVSYRVDKYKHMLTIKDCGFPDEGEYIVTAGQDKSVAELLIIEAPT
+EFVEHLEDQTVTEFDDAVFSCQLSREKANVKWYRNGREIKEGKKYKFEKD
+GSIHRLIIKDCRLDDECEYACGVEDRKSRARLFVEEIPVEIIRPPQDILE
+APGADVVFLAELNKDKVEVQWLRNNMVVVQGDKHQMMSEGKIHRLQICDI
+KPRDQGEYRFIAKDKEARAKLELAAAPKIKTADQDLVVDVGKPLTMVVPY
+DAYPKAEAEWFKENEPLSTKTIDTTAEQTSFRILEAKKGDKGRYKIVLQN
+KHGKAEGFINLKVIDVPGPVRNLEVTETFDGEVSLAWEEPLTDGGSKIIG
+YVVERRDIKRKTWVLATDRAESCEFTVTGLQKGGVEYLFRVSARNRVGTG
+EPVETDNPVEARSKYDVPGPPLNVTITDVNRFGVSLTWEPPEYDGGAEIT
+NYVIELRDKTSIRWDTAMTVRAEDLSATVTDVVEGQEYSFRVRAQNRIGV
+GKPSAATPFVKVADPIERPSPPVNLTSSDQTQSSVQLKWEPPLKDGGSPI
+LGYIIERCEEGKDNWIRCNMKLVPELTYKVTGLEKGNKYLYRVSAENKAG
+VSDPSEILGPLTADDAFVEPTMDLSAFKDGLEVIVPNPITILVPSTGYPR
+PTATWCFGDKVLETGDRVKMKTLSAYAELVISPSERSDKGIYTLKLENRV
+KTISGEIDVNVIARPSAPKELKFGDITKDSVHLTWEPPDDDGGSPLTGYV
+VEKREVSRKTWTKVMDFVTDLEFTVPDLVQGKEYLFKVCARNKCGPGEPA
+YVDEPVNMSTPATVPDPPENVKWRDRTANSIFLTWDPPKNDGGSRIKGYI
+VERCPRGSDKWVACGEPVAETKMEVTGLEEGKWYAYRVKALNRQGASKPS
+RPTEEIQAVDTQEAPEIFLDVKLLAGLTVKAGTKIELPATVTGKPEPKIT
+WTKADMILKQDKRITIENVPKKSTVTIVDSKRSDTGTYIIEAVNVCGRAT
+AVVEVNVLDKPGPPAAFDITDVTNESCLLTWNPPRDDGGSKITNYVVERR
+ATDSEVWHKLSSTVKDTNFKATKLIPNKEYIFRVAAENMYGVGEPVQASP
+ITAKYQFDPPGPPTRLEPSDITKDAVTLTWCEPDDDGGSPITGYWVERLD
+PDTDKWVRCNKMPVKDTTYRVKGLTNKKKYRFRVLAENLAGPGKPSKSTE
+PILIKDPIDPPWPPGKPTVKDVGKTSVRLNWTKPEHDGGAKIESYVIEML
+KTGTDEWVRVAEGVPTTQHLLPGLMEGQEYSFRVRAVNKAGESEPSEPSD
+PVLCREKLYPPSPPRWLEVINITKNTADLKWTVPEKDGGSPITNYIVEKR
+DVRRKGWQTVDTTVKDTKCTVTPLTEGSLYVFRVAAENAIGQSDYTEIED
+SVLAKDTFTTPGPPYALAVVDVTKRHVDLKWEPPKNDGGRPIQRYVIEKK
+ERLGTRWVKAGKTAGPDCNFRVTDVIEGTEVQFQVRAENEAGVGHPSEPT
+EILSIEDPTSPPSPPLDLHVTDAGRKHIAIAWKPPEKNGGSPIIGYHVEM
+CPVGTEKWMRVNSRPIKDLKFKVEEGVVPDKEYVLRVRAVNAIGVSEPSE
+ISENVVAKDPDCKPTIDLETHDIIVIEGEKLSIPVPFRAVPVPTVSWHKD
+GKEVKASDRLTMKNDHISAHLEVPKSVRADAGIYTITLENKLGSATASIN
+VKVIGLPGPCKDIKASDITKSSCKLTWEPPEFDGGTPILHYVLERREAGR
+RTYIPVMSGENKLSWTVKDLIPNGEYFFRVKAVNKVGGGEYIELKNPVIA
+QDPKQPPDPPVDVEVHNPTAEAMTITWKPPLYDGGSKIMGYIIEKIAKGE
+ERWKRCNEHLVPILTYTAKGLEEGKEYQFRVRAENAAGISEPSRATPPTK
+AVDPIDAPKVILRTSLEVKRGDEIALDASISGSPYPTITWIKDENVIVPE
+EIKKRAAPLVRRRKGEVQEEEPFVLPLTQRLSIDNSKKGESQLRVRDSLR
+PDHGLYMIKVENDHGIAKAPCTVSVLDTPGPPINFVFEDIRKTSVLCKWE
+PPLDDGGSEIINYTLEKKDKTKPDSEWIVVTSTLRHCKYSVTKLIEGKEY
+LFRVRAENRFGPGPPCVSKPLVAKDPFGPPDAPDKPIVEDVTSNSMLVKW
+NEPKDNGSPILGYWLEKREVNSTHWSRVNKSLLNALKANVDGLLEGLTYV
+FRVCAENAAGPGKFSPPSDPKTAHDPISPPGPPIPRVTDTSSTTIELEWE
+PPAFNGGGEIVGYFVDKQLVGTNEWSRCTEKMIKVRQYTVKEIREGADYK
+LRVSAVNAAGEGPPGETQPVTVAEPQEPPAVELDVSVKGGIQIMAGKTLR
+IPAVVTGRPVPTKVWTKEEGELDKDRVVIDNVGTKSELIIKDALRKDHGR
+YVITATNSCGSKFAAARVEVFDVPGPVLDLKPVVTNRKMCLLNWSDPEDD
+GGSEITGFIIERKDAKMHTWRQPIETERSKCDITGLLEGQEYKFRVIAKN
+KFGCGPPVEIGPILAVDPLGPPTSPERLTYTERTKSTITLDWKEPRSNGG
+SPIQGYIIEKRRHDKPDFERVNKRLCPTTSFLVENLDEHQMYEFRVKAVN
+EIGESEPSLPLNVVIQDDEVPPTIKLRLSVRGDTIKVKAGEPVHIPADVT
+GLPMPKIEWSKNETVIEKPTDALQITKEEVSRSEAKTELSIPKAVREDKG
+TYTVTASNRLGSVFRNVHVEVYDRPSPPRNLAVTDIKAESCYLTWDAPLD
+NGGSEITHYVIDKRDASRKKAEWEEVTNTAVEKRYGIWKLIPNGQYEFRV
+RAVNKYGISDECKSDKVVIQDPYRLPGPPGKPKVLARTKGSMLVSWTPPL
+DNGGSPITGYWLEKREEGSPYWSRVSRAPITKVGLKGVEFNVPRLLEGVK
+YQFRAMAINAAGIGPPSEPSDPEVAGDPIFPPGPPSCPEVKDKTKSSISL
+GWKPPAKDGGSPIKGYIVEMQEEGTTDWKRVNEPDKLITTCECVVPNLKE
+LRKYRFRVKAVNEAGESEPSDTTGEIPATDIQEEPEVFIDIGAQDCLVCK
+AGSQIRIPAVIKGRPTPKSSWEFDGKAKKAMKDGVHDIPEDAQLETAENS
+SVIIIPECKRSHTGKYSITAKNKAGQKTANCRVKVMDVPGPPKDLKVSDI
+TRGSCRLSWKMPDDDGGDRIKGYVIEKRTIDGKAWTKVNPDCGSTTFVVP
+DLLSEQQYFFRVRAENRFGIGPPVETIQRTTARDPIYPPDPPIKLKIGLI
+TKNTVHLSWKPPKNDGGSPVTHYIVECLAWDPTGTKKEAWRQCNKRDVEE
+LQFTVEDLVEGGEYEFRVKAVNAAGVSKPSATVGPCDCQRPDMPPSIDLK
+EFMEVEEGTNVNIVAKIKGVPFPTLTWFKAPPKKPDNKEPVLYDTHVNKL
+VVDDTCTLVIPQSRRSDTGLYTITAVNNLGTASKEMRLNVLGRPGPPVGP
+IKFESVSADQMTLSWFPPKDDGGSKITNYVIEKREANRKTWVHVSSEPKE
+CTYTIPKLLEGHEYVFRIMAQNKYGIGEPLDSEPETARNLFSVPGAPDKP
+TVSSVTRNSMTVNWEEPEYDGGSPVTGYWLEMKDTTSKRWKRVNRDPIKA
+MTLGVSYKVTGLIEGSDYQFRVYAINAAGVGPASLPSDPATARDPIAPPG
+PPFPKVTDWTKSSADLEWSPPLKDGGSKVTGYIVEYKEEGKEEWEKGKDK
+EVRGTKLVVTGLKEGAFYKFRVSAVNIAGIGEPGEVTDVIEMKDRLVSPD
+LQLDASVRDRIVVHAGGVIRIIAYVSGKPPPTVTWNMNERTLPQEATIET
+TAISSSMVIKNCQRSHQGVYSLLAKNEAGERKKTIIVDVLDVPGPVGTPF
+LAHNLTNESCKLTWFSPEDDGGSPITNYVIEKRESDRRAWTPVTYTVTRQ
+NATVQGLIQGKAYFFRIAAENSIGMGPFVETSEALVIREPITVPERPEDL
+EVKEVTKNTVTLTWNPPKYDGGSEIINYVLESRLIGTEKFHKVTNDNLLS
+RKYTVKGLKEGDTYEYRVSAVNIVGQGKPSFCTKPITCKDELAPPTLHLD
+FRDKLTIRVGEAFALTGRYSGKPKPKVSWFKDEADVLEDDRTHIKTTPAT
+LALEKIKAKRSDSGKYCVVVENSTGSRKGFCQVNVVDRPGPPVGPVSFDE
+VTKDYMVISWKPPLDDGGSKITNYIIEKKEVGKDVWMPVTSASAKTTCKV
+SKLLEGKDYIFRIHAENLYGISDPLVSDSMKAKDRFRVPDAPDQPIVTEV
+TKDSALVTWNKPHDGGKPITNYILEKRETMSKRWARVTKDPIHPYTKFRV
+PDLLEGCQYEFRVSAENEIGIGDPSPPSKPVFAKDPIAKPSPPVNPEAID
+TTCNSVDLTWQPPRHDGGSKILGYIVEYQKVGDEEWRRANHTPESCPETK
+YKVTGLRDGQTYKFRVLAVNAAGESDPAHVPEPVLVKDRLEPPELILDAN
+MAREQHIKVGDTLRLSAIIKGVPFPKVTWKKEDRDAPTKARIDVTPVGSK
+LEIRNAAHEDGGIYSLTVENPAGSKTVSVKVLVLDKPGPPRDLEVSEIRK
+DSCYLTWKEPLDDGGSVITNYVVERRDVASAQWSPLSATSKKKSHFAKHL
+NEGNQYLFRVAAENQYGRGPFVETPKPIKALDPLHPPGPPKDLHHVDVDK
+TEVSLVWNKPDRDGGSPITGYLVEYQEEGTQDWIKFKTVTNLECVVTGLQ
+QGKTYRFRVKAENIVGLGLPDTTIPIECQEKLVPPSVELDVKLIEGLVVK
+AGTTVRFPAIIRGVPVPTAKWTTDGSEIKTDEHYTVETDNFSSVLTIKNC
+LRRDTGEYQITVSNAAGSKTVAVHLTVLDVPGPPTGPINILDVTPEHMTI
+SWQPPKDDGGSPVINYIVEKQDTRKDTWGVVSSGSSKTKLKIPHLQKGCE
+YVFRVRAENKIGVGPPLDSTPTVAKHKFSPPSPPGKPVVTDITENAATVS
+WTLPKSDGGSPITGYYMERREVTGKWVRVNKTPIADLKFRVTGLYEGNTY
+EFRVFAENLAGLSKPSPSSDPIKACRPIKPPGPPINPKLKDKSRETADLV
+WTKPLSDGGSPILGYVVECQKPGTAQWNRINKDELIRQCAFRVPGLIEGN
+EYRFRIKAANIVGEGEPRELAESVIAKDILHPPEVELDVTCRDVITVRVG
+QTIRILARVKGRPEPDITWTKEGKVLVREKRVDLIQDLPRVELQIKEAVR
+ADHGKYIISAKNSSGHAQGSAIVNVLDRPGPCQNLKVTNVTKENCTISWE
+NPLDNGGSEITNFIVEYRKPNQKGWSIVASDVTKRLIKANLLANNEYYFR
+VCAENKVGVGPTIETKTPILAINPIDRPGEPENLHIADKGKTFVYLKWRR
+PDYDGGSPNLSYHVERRLKGSDDWERVHKGSIKETHYMVDRCVENQIYEF
+RVQTKNEGGESDWVKTEEVVVKEDLQKPVLDLKLSGVLTVKAGDTIRLEA
+GVRGKPFPEVAWTKDKDATDLTRSPRVKIDTRADSSKFSLTKAKRSDGGK
+YVVTATNTAGSFVAYATVNVLDKPGPVRNLKIVDVSSDRCTVCWDPPEDD
+GGCEIQNYILEKCETKRMVWSTYSATVLTPGTTVTRLIEGNEYIFRVRAE
+NKIGTGPPTESKPVIAKTKYDKPGRPDPPEVTKVSKEEMTVVWNPPEYDG
+GKSITGYFLEKKEKHSTRWVPVNKSAIPERRMKVQNLLPDHEYQFRVKAE
+NEIGIGEPSLPSRPVVAKDPIEPPGPPTNFRVVDTTKHSITLGWGKPVYD
+GGAPIIGYVVEMRPKIADASPDEGWKRCNAAAQLVRKEFTVTSLDENQEY
+EFRVCAQNQVGIGRPAELKEAIKPKEILEPPEIDLDASMRKLVIVRAGCP
+IRLFAIVRGRPAPKVTWRKVGIDNVVRKGQVDLVDTMAFLVIPNSTRDDS
+GKYSLTLVNPAGEKAVFVNVRVLDTPGPVSDLKVSDVTKTSCHVSWAPPE
+NDGGSQVTHYIVEKREADRKTWSTVTPEVKKTSFHVTNLVPGNEYYFRVT
+AVNEYGPGVPTDVPKPVLASDPLSEPDPPRKLEVTEMTKNSATLAWLPPL
+RDGGAKIDGYITSYREEEQPADRWTEYSVVKDLSLVVTGLKEGKKYKFRV
+AARNAVGVSLPREAEGVYEAKEQLLPPKILMPEQITIKAGKKLRIEAHVY
+GKPHPTCKWKKGEDEVVTSSHLAVHKADSSSILIIKDVTRKDSGYYSLTA
+ENSSGTDTQKIKVVVMDAPGPPQPPFDISDIDADACSLSWHIPLEDGGSN
+ITNYIVEKCDVSRGDWVTALASVTKTSCRVGKLIPGQEYIFRVRAENRFG
+ISEPLTSPKMVAQFPFGVPSEPKNARVTKVNKDCIFVAWDRPDSDGGSPI
+IGYLIERKERNSLLWVKANDTLVRSTEYPCAGLVEGLEYSFRIYALNKAG
+SSPPSKPTEYVTARMPVDPPGKPEVIDVTKSTVSLIWARPKHDGGSKIIG
+YFVEACKLPGDKWVRCNTAPHQIPQEEYTATGLEEKAQYQFRAIARTAVN
+ISPPSEPSDPVTILAENVPPRIDLSVAMKSLLTVKAGTNVCLDATVFGKP
+MPTVSWKKDGTLLKPAEGIKMAMQRNLCTLELFSVNRKDSGDYTITAENS
+SGSKSATIKLKVLDKPGPPASVKINKMYSDRAMLSWEPPLEDGGSEITNY
+IVDKRETSRPNWAQVSATVPITSCSVEKLIEGHEYQFRICAENKYGVGDP
+VFTEPAIAKNPYDPPGRCDPPVISNITKDHMTVSWKPPADDGGSPITGYL
+LEKRETQAVNWTKVNRKPIIERTLKATGLQEGTEYEFRVTAINKAGPGKP
+SDASKAAYARDPQYPPAPPAFPKVYDTTRSSVSLSWGKPAYDGGSPIIGY
+LVEVKRADSDNWVRCNLPQNLQKTRFEVTGLMEDTQYQFRVYAVNKIGYS
+DPSDVPDKHYPKDILIPPEGELDADLRKTLILRAGVTMRLYVPVKGRPPP
+KITWSKPNVNLRDRIGLDIKSTDFDTFLRCENVNKYDAGKYILTLENSCG
+KKEYTIVVKVLDTPGPPVNVTVKEISKDSAYVTWEPPIIDGGSPIINYVV
+QKRDAERKSWSTVTTECSKTSFRVANLEEGKSYFFRVFAENEYGIGDPGE
+TRDAVKASQTPGPVVDLKVRSVSKSSCSIGWKKPHSDGGSRIIGYVVDFL
+TEENKWQRVMKSLSLQYSAKDLTEGKEYTFRVSAENENGEGTPSEITVVA
+RDDVVAPDLDLKGLPDLCYLAKENSNFRLKIPIKGKPAPSVSWKKGEDPL
+ATDTRVSVESSAVNTTLIVYDCQKSDAGKYTITLKNVAGTKEGTISIKVV
+GKPGIPTGPIKFDEVTAEAMTLKWAPPKDDGGSEITNYILEKRDSVNNKW
+VTCASAVQKTTFRVTRLHEGMEYTFRVSAENKYGVGEGLKSEPIVARHPF
+DVPDAPPPPNIVDVRHDSVSLTWTDPKKTGGSPITGYHLEFKERNSLLWK
+RANKTPIRMRDFKVTGLTEGLEYEFRVMAINLAGVGKPSLPSEPVVALDP
+IDPPGKPEVINITRNSVTLIWTEPKYDGGHKLTGYIVEKRDLPSKSWMKA
+NHVNVPECAFTVTDLVEGGKYEFRIRAKNTAGAISAPSESTETIICKDEY
+EAPTIVLDPTIKDGLTIKAGDTIVLNAISILGKPLPKSSWSKAGKDIRPS
+DITQITSTPTSSMLTIKYATRKDAGEYTITATNPFGTKVEHVKVTVLDVP
+GPPGPVEISNVSAEKATLTWTPPLEDGGSPIKSYILEKRETSRLLWTVVS
+EDIQSCRHVATKLIQGNEYIFRVSAVNHYGKGEPVQSEPVKMVDRFGPPG
+PPEKPEVSNVTKNTATVSWKRPVDDGGSEITGYHVERREKKSLRWVRAIK
+TPVSDLRCKVTGLQEGSTYEFRVSAENRAGIGPPSEASDSVLMKDAAYPP
+GPPSNPHVTDTTKKSASLAWGKPHYDGGLEITGYVVEHQKVGDEAWIKDT
+TGTALRITQFVVPDLQTKEKYNFRISAINDAGVGEPAVIPDVEIVEREMA
+PDFELDAELRRTLVVRAGLSIRIFVPIKGRPAPEVTWTKDNINLKNRANI
+ENTESFTLLIIPECNRYDTGKFVMTIENPAGKKSGFVNVRVLDTPGPVLN
+LRPTDITKDSVTLHWDLPLIDGGSRITNYIVEKREATRKSYSTATTKCHK
+CTYKVTGLSEGCEYFFRVMAENEYGIGEPTETTEPVKASEAPSPPDSLNI
+MDITKSTVSLAWPKPKHDGGSKITGYVIEAQRKGSDQWTHITTVKGLECV
+VRNLTEGEEYTFQVMAVNSAGRSAPRESRPVIVKEQTMLPELDLRGIYQK
+LVIAKAGDNIKVEIPVLGRPKPTVTWKKGDQILKQTQRVNFETTATSTIL
+NINECVRSDSGPYPLTARNIVGEVGDVITIQVHDIPGPPTGPIKFDEVSS
+DFVTFSWDPPENDGGVPISNYVVEMRQTDSTTWVELATTVIRTTYKATRL
+TTGLEYQFRVKAQNRYGVGPGITSACIVANYPFKVPGPPGTPQVTAVTKD
+SMTISWHEPLSDGGSPILGYHVERKERNGILWQTVSKALVPGNIFKSSGL
+TDGIAYEFRVIAENMAGKSKPSKPSEPMLALDPIDPPGKPVPLNITRHTV
+TLKWAKPEYTGGFKITSYIVEKRDLPNGRWLKANFSNILENEFTVSGLTE
+DAAYEFRVIAKNAAGAISPPSEPSDAITCRDDVEAPKIKVDVKFKDTVIL
+KAGEAFRLEADVSGRPPPTMEWSKDGKELEGTAKLEIKIADFSTNLVNKD
+STRRDSGAYTLTATNPGGFAKHIFNVKVLDRPGPPEGPLAVTEVTSEKCV
+LSWFPPLDDGGAKIDHYIVQKRETSRLAWTNVASEVQVTKLKVTKLLKGN
+EYIFRVMAVNKYGVGEPLESEPVLAVNPYGPPDPPKNPEVTTITKDSMVV
+CWGHPDSDGGSEIINYIVERRDKAGQRWIKCNKKTLTDLRYKVSGLTEGH
+EYEFRIMAENAAGISAPSPTSPFYKACDTVFKPGPPGNPRVLDTSRSSIS
+IAWNKPIYDGGSEITGYMVEIALPEEDEWQIVTPPAGLKATSYTITGLTE
+NQEYKIRIYAMNSEGLGEPALVPGTPKAEDRMLPPEIELDADLRKVVTIR
+ACCTLRLFVPIKGRPAPEVKWARDHGESLDKASIESTSSYTLLIVGNVNR
+FDSGKYILTVENSSGSKSAFVNVRVLDTPGPPQDLKVKEVTKTSVTLTWD
+PPLLDGGSKIKNYIVEKRESTRKAYSTVATNCHKTSWKVDQLQEGCSYYF
+RVLAENEYGIGLPAETAESVKASERPLPPGKITLMDVTRNSVSLSWEKPE
+HDGGSRILGYIVEMQTKGSDKWATCATVKVTEATITGLIQGEEYSFRVSA
+QNEKGISDPRQLSVPVIAKDLVIPPAFKLLFNTFTVLAGEDLKVDVPFIG
+RPTPAVTWHKDNVPLKQTTRVNAESTENNSLLTIKDACREDVGHYVVKLT
+NSAGEAIETLNVIVLDKPGPPTGPVKMDEVTADSITLSWGPPKYDGGSSI
+NNYIVEKRDTSTTTWQIVSATVARTTIKACRLKTGCEYQFRIAAENRYGK
+STYLNSEPTVAQYPFKVPGPPGTPVVTLSSRDSMEVQWNEPISDGGSRVI
+GYHLERKERNSILWVKLNKTPIPQTKFKTTGLEEGVEYEFRVSAENIVGI
+GKPSKVSECYVARDPCDPPGRPEAIIVTRNSVTLQWKKPTYDGGSKITGY
+IVEKKELPEGRWMKASFTNIIDTHFEVTGLVEDHRYEFRVIARNAAGVFS
+EPSESTGAITARDEVDPPRISMDPKYKDTIVVHAGESFKVDADIYGKPIP
+TIQWIKGDQELSNTARLEIKSTDFATSLSVKDAVRVDSGNYILKAKNVAG
+ERSVTVNVKVLDRPGPPEGPVVISGVTAEKCTLAWKPPLQDGGSDIINYI
+VERRETSRLVWTVVDANVQTLSCKVTKLLEGNEYTFRIMAVNKYGVGEPL
+ESEPVVAKNPFVVPDAPKAPEVTTVTKDSMIVVWERPASDGGSEILGYVL
+EKRDKEGIRWTRCHKRLIGELRLRVTGLIENHDYEFRVSAENAAGLSEPS
+PPSAYQKACDPIYKPGPPNNPKVIDITRSSVFLSWSKPIYDGGCEIQGYI
+VEKCDVSVGEWTMCTPPTGINKTNIEVEKLLEKHEYNFRICAINKAGVGE
+HADVPGPIIVEEKLEAPDIDLDLELRKIINIRAGGSLRLFVPIKGRPTPE
+VKWGKVDGEIRDAAIIDVTSSFTSLVLDNVNRYDSGKYTLTLENSSGTKS
+AFVTVRVLDTPSPPVNLKVTEITKDSVSITWEPPLLDGGSKIKNYIVEKR
+EATRKSYAAVVTNCHKNSWKIDQLQEGCSYYFRVTAENEYGIGLPAQTAD
+PIKVAEVPQPPGKITVDDVTRNSVSLSWTKPEHDGGSKIIQYIVEMQAKH
+SEKWSECARVKSLQAVITNLTQGEEYLFRVVAVNEKGRSDPRSLAVPIVA
+KDLVIEPDVKPAFSSYSVQVGQDLKIEVPISGRPKPTITWTKDGLPLKQT
+TRINVTDSLDLTTLSIKETHKDDGGQYGITVANVVGQKTASIEIVTLDKP
+DPPKGPVKFDDVSAESITLSWNPPLYTGGCQITNYIVQKRDTTTTVWDVV
+SATVARTTLKVTKLKTGTEYQFRIFAENRYGQSFALESDPIVAQYPYKEP
+GPPGTPFATAISKDSMVIQWHEPVNNGGSPVIGYHLERKERNSILWTKVN
+KTIIHDTQFKAQNLEEGIEYEFRVYAENIVGVGKASKNSECYVARDPCDP
+PGTPEPIMVKRNEITLQWTKPVYDGGSMITGYIVEKRDLPDGRWMKASFT
+NVIETQFTVSGLTEDQRYEFRVIAKNAAGAISKPSDSTGPITAKDEVELP
+RISMDPKFRDTIVVNAGETFRLEADVHGKPLPTIEWLRGDKEIEESARCE
+IKNTDFKALLIVKDAIRIDGGQYILRASNVAGSKSFPVNVKVLDRPGPPE
+GPVQVTGVTSEKCSLTWSPPLQDGGSDISHYVVEKRETSRLAWTVVASEV
+VTNSLKVTKLLEGNEYVFRIMAVNKYGVGEPLESAPVLMKNPFVLPGPPK
+SLEVTNIAKDSMTVCWNRPDSDGGSEIIGYIVEKRDRSGIRWIKCNKRRI
+TDLRLRVTGLTEDHEYEFRVSAENAAGVGEPSPATVYYKACDPVFKPGPP
+TNAHIVDTTKNSITLAWGKPIYDGGSEILGYVVEICKADEEEWQIVTPQT
+GLRVTRFEISKLTEHQEYKIRVCALNKVGLGEATSVPGTVKPEDKLEAPE
+LDLDSELRKGIVVRAGGSARIHIPFKGRPTPEITWSREEGEFTDKVQIEK
+GVNYTQLSIDNCDRNDAGKYILKLENSSGSKSAFVTVKVLDTPGPPQNLA
+VKEVRKDSAFLVWEPPIIDGGAKVKNYVIDKRESTRKAYANVSSKCSKTS
+FKVENLTEGAIYYFRVMAENEFGVGVPVETVDAVKAAEPPSPPGKVTLTD
+VSQTSASLMWEKPEHDGGSRVLGYVVEMQPKGTEKWSIVAESKVCNAVVT
+GLSSGQEYQFRVKAYNEKGKSDPRVLGVPVIAKDLTIQPSLKLPFNTYSI
+QAGEDLKIEIPVIGRPRPNISWVKDGEPLKQTTRVNVEETATSTVLHIKE
+GNKDDFGKYTVTATNSAGTATENLSVIVLEKPGPPVGPVRFDEVSADFVV
+ISWEPPAYTGGCQISNYIVEKRDTTTTTWHMVSATVARTTIKITKLKTGT
+EYQFRIFAENRYGKSAPLDSKAVIVQYPFKEPGPPGTPFVTSISKDQMLV
+QWHEPVNDGGTKIIGYHLEQKEKNSILWVKLNKTPIQDTKFKTTGLDEGL
+EYEFKVSAENIVGIGKPSKVSECFVARDPCDPPGRPEAIVITRNNVTLKW
+KKPAYDGGSKITGYIVEKKDLPDGRWMKASFTNVLETEFTVSGLVEDQRY
+EFRVIARNAAGNFSEPSDSSGAITARDEIDAPNASLDPKYKDVIVVHAGE
+TFVLEADIRGKPIPDVVWSKDGKELEETAARMEIKSTIQKTTLVVKDCIR
+TDGGQYILKLSNVGGTKSIPITVKVLDRPGPPEGPLKVTGVTAEKCYLAW
+NPPLQDGGANISHYIIEKRETSRLSWTQVSTEVQALNYKVTKLLPGNEYI
+FRVMAVNKYGIGEPLESGPVTACNPYKPPGPPSTPEVSAITKDSMVVTWA
+RPVDDGGTEIEGYILEKRDKEGVRWTKCNKKTLTDLRLRVTGLTEGHSYE
+FRVAAENAAGVGEPSEPSVFYRACDALYPPGPPSNPKVTDTSRSSVSLAW
+SKPIYDGGAPVKGYVVEVKEAAADEWTTCTPPTGLQGKQFTVTKLKENTE
+YNFRICAINSEGVGEPATLPGSVVAQERIEPPEIELDADLRKVVVLRASA
+TLRLFVTIKGRPEPEVKWEKAEGILTDRAQIEVTSSFTMLVIDNVTRFDS
+GRYNLTLENNSGSKTAFVNVRVLDSPSAPVNLTIREVKKDSVTLSWEPPL
+IDGGAKITNYIVEKRETTRKAYATITNNCTKTTFRIENLQEGCSYYFRVL
+ASNEYGIGLPAETTEPVKVSEPPLPPGRVTLVDVTRNTATIKWEKPESDG
+GSKITGYVVEMQTKGSEKWSTCTQVKTLEATISGLTAGEEYVFRVAAVNE
+KGRSDPRQLGVPVIARDIEIKPSVELPFHTFNVKAREQLKIDVPFKGRPQ
+ATVNWRKDGQTLKETTRVNVSSSKTVTSLSIKEASKEDVGTYELCVSNSA
+GSITVPITIIVLDRPGPPGPIRIDEVSCDSITISWNPPEYDGGCQISNYI
+VEKKETTSTTWHIVSQAVARTSIKIVRLTTGSEYQFRVCAENRYGKSSYS
+ESSAVVAEYPFSPPGPPGTPKVVHATKSTMLVTWQVPVNDGGSRVIGYHL
+EYKERSSILWSKANKILIADTQMKVSGLDEGLMYEYRVYAENIAGIGKCS
+KSCEPVPARDPCDPPGQPEVTNITRKSVSLKWSKPHYDGGAKITGYIVER
+RELPDGRWLKCNYTNIQETYFEVTELTEDQRYEFRVFARNAADSVSEPSE
+STGPIIVKDDVEPPRVMMDVKFRDVIVVKAGEVLKINADIAGRPLPVISW
+AKDGIEIEERARTEIISTDNHTLLTVKDCIRRDTGQYVLTLKNVAGTRSV
+AVNCKVLDKPGPPAGPLEINGLTAEKCSLSWGRPQEDGGADIDYYIVEKR
+ETSHLAWTICEGELQMTSCKVTKLLKGNEYIFRVTGVNKYGVGEPLESVA
+IKALDPFTVPSPPTSLEITSVTKESMTLCWSRPESDGGSEISGYIIERRE
+KNSLRWVRVNKKPVYDLRVKSTGLREGCEYEYRVYAENAAGLSLPSETSP
+LIRAEDPVFLPSPPSKPKIVDSGKTTITIAWVKPLFDGGAPITGYTVEYK
+KSDDTDWKTSIQSLRGTEYTISGLTTGAEYVFRVKSVNKVGASDPSDSSD
+PQIAKEREEEPLFDIDSEMRKTLIVKAGASFTMTVPFRGRPVPNVLWSKP
+DTDLRTRAYVDTTDSRTSLTIENANRNDSGKYTLTIQNVLSAASLTLVVK
+VLDTPGPPTNITVQDVTKESAVLSWDVPENDGGAPVKNYHIEKREASKKA
+WVSVTNNCNRLSYKVTNLQEGAIYYFRVSGENEFGVGIPAETKEGVKITE
+KPSPPEKLGVTSISKDSVSLTWLKPEHDGGSRIVHYVVEALEKGQKNWVK
+CAVAKSTHHVVSGLRENSEYFFRVFAENQAGLSDPRELLLPVLIKEQLEP
+PEIDMKNFPSHTVYVRAGSNLKVDIPISGKPLPKVTLSRDGVPLKATMRF
+NTEITAENLTINLKESVTADAGRYEITAANSSGTTKAFINIVVLDRPGPP
+TGPVVISDITEESVTLKWEPPKYDGGSQVTNYILLKRETSTAVWTEVSAT
+VARTMMKVMKLTTGEEYQFRIKAENRFGISDHIDSACVTVKLPYTTPGPP
+STPWVTNVTRESITVGWHEPVSNGGSAVVGYHLEMKDRNSILWQKANKLV
+IRTTHFKVTTISAGLIYEFRVYAENAAGVGKPSHPSEPVLAIDACEPPRN
+VRITDISKNSVSLSWQQPAFDGGSKITGYIVERRDLPDGRWTKASFTNVT
+ETQFIISGLTQNSQYEFRVFARNAVGSISNPSEVVGPITCIDSYGGPVID
+LPLEYTEVVKYRAGTSVKLRAGISGKPAPTIEWYKDDKELQTNALVCVEN
+TTDLASILIKDADRLNSGCYELKLRNAMGSASATIRVQILDKPGPPGGPI
+EFKTVTAEKITLLWRPPADDGGAKITHYIVEKRETSRVVWSMVSEHLEEC
+IITTTKIIKGNEYIFRVRAVNKYGIGEPLESDSVVAKNAFVTPGPPGIPE
+VTKITKNSMTVVWSRPIADGGSDISGYFLEKRDKKSLGWFKVLKETIRDT
+RQKVTGLTENSDYQYRVCAVNAAGQGPFSEPSEFYKAADPIDPPGPPAKI
+RIADSTKSSITLGWSKPVYDGGSAVTGYVVEIRQGEEEEWTTVSTKGEVR
+TTEYVVSNLKPGVNYYFRVSAVNCAGQGEPIEMNEPVQAKDILEAPEIDL
+DVALRTSVIAKAGEDVQVLIPFKGRPPPTVTWRKDEKNLGSDARYSIENT
+DSSSLLTIPQVTRNDTGKYILTIENGVGEPKSSTVSVKVLDTPAACQKLQ
+VKHVSRGTVTLLWDPPLIDGGSPIINYVIEKRDATKRTWSVVSHKCSSTS
+FKLIDLSEKTPFFFRVLAENEIGIGEPCETTEPVKAAEVPAPIRDLSMKD
+STKTSVILSWTKPDFDGGSVITEYVVERKGKGEQTWSHAGISKTCEIEVS
+QLKEQSVLEFRVFAKNEKGLSDPVTIGPITVKELIITPEVDLSDIPGAQV
+TVRIGHNVHLELPYKGKPKPSISWLKDGLPLKESEFVRFSKTENKITLSI
+KNAKKEHGGKYTVILDNAVCRIAVPITVITLGPPSKPKGPIRFDEIKADS
+VILSWDVPEDNGGGEITCYSIEKRETSQTNWKMVCSSVARTTFKVPNLVK
+DAEYQFRVRAENRYGVSQPLVSSIIVAKHQFRIPGPPGKPVIYNVTSDGM
+SLTWDAPVYDGGSEVTGFHVEKKERNSILWQKVNTSPISGREYRATGLVE
+GLDYQFRVYAENSAGLSSPSDPSKFTLAVSPVDPPGTPDYIDVTRETITL
+KWNPPLRDGGSKIVGYSIEKRQGNERWVRCNFTDVSECQYTVTGLSPGDR
+YEFRIIARNAVGTISPPSQSSGIIMTRDENVPPIVEFGPEYFDGLIIKSG
+ESLRIKALVQGRPVPRVTWFKDGVEIEKRMNMEITDVLGSTSLFVRDATR
+DHRGVYTVEAKNASGSAKAEIKVKVQDTPGKVVGPIRFTNITGEKMTLWW
+DAPLNDGCAPITHYIIEKRETSRLAWALIEDKCEAQSYTAIKLINGNEYQ
+FRVSAVNKFGVGRPLDSDPVVAQIQYTVPDAPGIPEPSNITGNSITLTWA
+RPESDGGSEIQQYILERREKKSTRWVKVISKRPISETRFKVTGLTEGNEY
+EFHVMAENAAGVGPASGISRLIKCREPVNPPGPPTVVKVTDTSKTTVSLE
+WSKPVFDGGMEIIGYIIEMCKADLGDWHKVNAEACVKTRYTVTDLQAGEE
+YKFRVSAINGAGKGDSCEVTGTIKAVDRLTAPELDIDANFKQTHVVRAGA
+SIRLFIAYQGRPTPTAVWSKPDSNLSLRADIHTTDSFSTLTVENCNRNDA
+GKYTLTVENNSGSKSITFTVKVLDTPGPPGPITFKDVTRGSATLMWDAPL
+LDGGARIHHYVVEKREASRRSWQVISEKCTRQIFKVNDLAEGVPYYFRVS
+AVNEYGVGEPYEMPEPIVATEQPAPPRRLDVVDTSKSSAVLAWLKPDHDG
+GSRITGYLLEMRQKGSDFWVEAGHTKQLTFTVERLVEKTEYEFRVKAKND
+AGYSEPREAFSSVIIKEPQIEPTADLTGITNQLITCKAGSPFTIDVPISG
+RPAPKVTWKLEEMRLKETDRVSITTTKDRTTLTVKDSMRGDSGRYFLTLE
+NTAGVKTFSVTVVVIGRPGPVTGPIEVSSVSAESCVLSWGEPKDGGGTEI
+TNYIVEKRESGTTAWQLVNSSVKRTQIKVTHLTKYMEYSFRVSSENRFGV
+SKPLESAPIIAEHPFVPPSAPTRPEVYHVSANAMSIRWEEPYHDGGSKII
+GYWVEKKERNTILWVKENKVPCLECNYKVTGLVEGLEYQFRTYALNAAGV
+SKASEASRPIMAQNPVDAPGRPEVTDVTRSTVSLIWSAPAYDGGSKVVGY
+IIERKPVSEVGDGRWLKCNYTIVSDNFFTVTALSEGDTYEFRVLAKNAAG
+VISKGSESTGPVTCRDEYAPPKAELDARLHGDLVTIRAGSDLVLDAAVGG
+KPEPKIIWTKGDKELDLCEKVSLQYTGKRATAVIKFCDRSDSGKYTLTVK
+NASGTKAVSVMVKVLDSPGPCGKLTVSRVTQEKCTLAWSLPQEDGGAEIT
+HYIVERRETSRLNWVIVEGECPTLSYVVTRLIKNNEYIFRVRAVNKYGPG
+VPVESEPIVARNSFTIPSPPGIPEEVGTGKEHIIIQWTKPESDGGNEISN
+YLVDKREKKSLRWTRVNKDYVVYDTRLKVTSLMEGCDYQFRVTAVNAAGN
+SEPSEASNFISCREPSYTPGPPSAPRVVDTTKHSISLAWTKPMYDGGTDI
+VGYVLEMQEKDTDQWYRVHTNATIRNTEFTVPDLKMGQKYSFRVAAVNVK
+GMSEYSESIAEIEPVERIEIPDLELADDLKKTVTIRAGASLRLMVSVSGR
+PPPVITWSKQGIDLASRAIIDTTESYSLLIVDKVNRYDAGKYTIEAENQS
+GKKSATVLVKVYDTPGPCPSVKVKEVSRDSVTITWEIPTIDGGAPVNNYI
+VEKREAAMRAFKTVTTKCSKTLYRISGLVEGTMYYFRVLPENIYGIGEPC
+ETSDAVLVSEVPLVPAKLEVVDVTKSTVTLAWEKPLYDGGSRLTGYVLEA
+CKAGTERWMKVVTLKPTVLEHTVTSLNEGEQYLFRIRAQNEKGVSEPRET
+VTAVTVQDLRVLPTIDLSTMPQKTIHVPAGRPVELVIPIAGRPPPAASWF
+FAGSKLRESERVTVETHTKVAKLTIRETTIRDTGEYTLELKNVTGTTSET
+IKVIILDKPGPPTGPIKIDEIDATSITISWEPPELDGGAPLSGYVVEQRD
+AHRPGWLPVSESVTRSTFKFTRLTEGNEYVFRVAATNRFGIGSYLQSEVI
+ECRSSIRIPGPPETLQIFDVSRDGMTLTWYPPEDDGGSQVTGYIVERKEV
+RADRWVRVNKVPVTMTRYRSTGLTEGLEYEHRVTAINARGSGKPSRPSKP
+IVAMDPIAPPGKPQNPRVTDTTRTSVSLAWSVPEDEGGSKVTGYLIEMQK
+VDQHEWTKCNTTPTKIREYTLTHLPQGAEYRFRVLACNAGGPGEPAEVPG
+TVKVTEMLEYPDYELDERYQEGIFVRQGGVIRLTIPIKGKPFPICKWTKE
+GQDISKRAMIATSETHTELVIKEADRGDSGTYDLVLENKCGKKAVYIKVR
+VIGSPNSPEGPLEYDDIQVRSVRVSWRPPADDGGADILGYILERREVPKA
+AWYTIDSRVRGTSLVVKGLKENVEYHFRVSAENQFGISKPLKSEEPVTPK
+TPLNPPEPPSNPPEVLDVTKSSVSLSWSRPKDDGGSRVTGYYIERKETST
+DKWVRHNKTQITTTMYTVTGLVPDAEYQFRIIAQNDVGLSETSPASEPVV
+CKDPFDKPSQPGELEILSISKDSVTLQWEKPECDGGKEILGYWVEYRQSG
+DSAWKKSNKERIKDKQFTIGGLLEATEYEFRVFAENETGLSRPRRTAMSI
+KTKLTSGEAPGIRKEMKDVTTKLGEAAQLSCQIVGRPLPDIKWYRFGKEL
+IQSRKYKMSSDGRTHTLTVMTEEQEDEGVYTCIATNEVGEVETSSKLLLQ
+ATPQFHPGYPLKEKYYGAVGSTLRLHVMYIGRPVPAMTWFHGQKLLQNSE
+NITIENTEHYTHLVMKNVQRKTHAGKYKVQLSNVFGTVDAILDVEIQDKP
+DKPTGPIVIEALLKNSAVISWKPPADDGGSWITNYVVEKCEAKEGAEWQL
+VSSAISVTTCRIVNLTENAGYYFRVSAQNTFGISDPLEVSSVVIIKSPFE
+KPGAPGKPTITAVTKDSCVVAWKPPASDGGAKIRNYYLEKREKKQNKWIS
+VTTEEIRETVFSVKNLIEGLEYEFRVKCENLGGESEWSEISEPITPKSDV
+PIQAPHFKEELRNLNVRYQSNATLVCKVTGHPKPIVKWYRQGKEIIADGL
+KYRIQEFKGGYHQLIIASVTDDDATVYQVRATNQGGSVSGTASLEVEVPA
+KIHLPKTLEGMGAVHALRGEVVSIKIPFSGKPDPVITWQKGQDLIDNNGH
+YQVIVTRSFTSLVFPNGVERKDAGFYVVCAKNRFGIDQKTVELDVADVPD
+PPRGVKVSDVSRDSVNLTWTEPASDGGSKITNYIVEKCATTAERWLRVGQ
+ARETRYTVINLFGKTSYQFRVIAENKFGLSKPSEPSEPTITKEDKTRAMN
+YDEEVDETREVSMTKASHSSTKELYEKYMIAEDLGRGEFGIVHRCVETSS
+KKTYMAKFVKVKGTDQVLVKKEISILNIARHRNILHLHESFESMEELVMI
+FEFISGLDIFERINTSAFELNEREIVSYVHQVCEALQFLHSHNIGHFDIR
+PENIIYQTRRSSTIKIIEFGQARQLKPGDNFRLLFTAPEYYAPEVHQHDV
+VSTATDMWSLGTLVYVLLSGINPFLAETNQQIIENIMNAEYTFDEEAFKE
+ISIEAMDFVDRLLVKERKSRMTASEALQHPWLKQKIERVSTKVIRTLKHR
+RYYHTLIKKDLNMVVSAARISCGGAIRSQKGVSVAKVKVASIEIGPVSGQ
+IMHAVGEEGGHVKYVCKIENYDQSTQVTWYFGVRQLENSEKYEITYEDGV
+AILYVKDITKLDDGTYRCKVVNDYGEDSSYAELFVKGVREVYDYYCRRTM
+KKIKRRTDTMRLLERPPEFTLPLYNKTAYVGENVRFGVTITVHPEPHVTW
+YKSGQKIKPGDNDKKYTFESDKGLYQLTINSVTTDDDAEYTVVARNKYGE
+DSCKAKLTVTLHPPPTDSTLRPMFKRLLANAECQEGQSVCFEIRVSGIPP
+PTLKWEKDGQPLSLGPNIEIIHEGLDYYALHIRDTLPEDTGYYRVTATNT
+AGSTSCQAHLQVERLRYKKQEFKSKEEHERHVQKQIDKTLRMAEILSGTE
+SVPLTQVAKEALREAAVLYKPAVSTKTVKGEFRLEIEEKKEERKLRMPYD
+VPEPRKYKQTTIEEDQRIKQFVPMSDMKWYKKIRDQYEMPGKLDRVVQKR
+PKRIRLSRWEQFYVMPLPRITDQYRPKWRIPKLSQDDLEIVRPARRRTPS
+PDYDFYYRPRRRSLGDISDEELLLPIDDYLAMKRTEEERLRLEEELELGF
+SASPPSRSPPHFELSSLRYSSPQAHVKVEETRKDFRYSTYHIPTKAEAST
+SYAELRERHAQAAYRQPKQRQRIMAEREDEELLRPVTTTQHLSEYKSELD
+FMSKEEKSRKKSRRQREVTEITEIEEEYEISKHAQRESSSSASRLLRRRR
+SLSPTYIELMRPVSELIRSRPQPAEEYEDDTERRSPTPERTRPRSPSPVS
+SERSLSRFERSARFDIFSRYESMKAALKTQKTSERKYEVLSQQPFTLDHA
+PRITLRMRSHRVPCGQNTRFILNVQSKPTAEVKWYHNGVELQESSKIHYT
+NTSGVLTLEILDCHTDDSGTYRAVCTNYKGEASDYATLDVTGGDYTTYAS
+QRRDEEVPRSVFPELTRTEAYAVSSFKKTSEMEASSSVREVKSQMTETRE
+SLSSYEHSASAEMKSAALEEKSLEEKSTTRKIKTTLAARILTKPRSMTVY
+EGESARFSCDTDGEPVPTVTWLRKGQVLSTSARHQVTTTKYKSTFEISSV
+QASDEGNYSVVVENSEGKQEAEFTLTIQKARVTEKAVTSPPRVKSPEPRV
+KSPEAVKSPKRVKSPEPSHPKAVSPTETKPTPTEKVQHLPVSAPPKITQF
+LKAEASKEIAKLTCVVESSVLRAKEVTWYKDGKKLKENGHFQFHYSADGT
+YELKINNLTESDQGEYVCEISGEGGTSKTNLQFMGQAFKSIHEKVSKISE
+TKKSDQKTTESTVTRKTEPKAPEPISSKPVIVTGLQDTTVSSDSVAKFAV
+KATGEPRPTAIWTKDGKAITQGGKYKLSEDKGGFFLEIHKTDTSDSGLYT
+CTVKNSAGSVSSSCKLTIKAIKDTEAQKVSTQKTSEITPQKKAVVQEEIS
+QKALRSEEIKMSEAKSQEKLALKEEASKVLISEEVKKSAATSLEKSIVHE
+EITKTSQASEEVRTHAEIKAFSTQMSINEGQRLVLKANIAGATDVKWVLN
+GVELTNSEEYRYGVSGSDQTLTIKQASHRDEGILTCISKTKEGIVKCQYD
+LTLSKELSDAPAFISQPRSQNINEGQNVLFTCEISGEPSPEIEWFKNNLP
+ISISSNVSISRSRNVYSLEIRNASVSDSGKYTIKAKNFRGQCSATASLMV
+LPLVEEPSREVVLRTSGDTSLQGSFSSQSVQMSASKQEASFSSFSSSSAS
+SMTEMKFASMSAQSMSSMQESFVEMSSSSFMGISNMTQLESSTSKMLKAG
+IRGIPPKIEALPSDISIDEGKVLTVACAFTGEPTPEVTWSCGGRKIHSQE
+QGRFHIENTDDLTTLIIMDVQKQDGGLYTLSLGNEFGSDSATVNIHIRSI

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



More information about the debian-med-commit mailing list