[med-svn] [libbiod] 01/02: New upstream version 0.1.0

Andreas Tille tille at debian.org
Sun Feb 26 06:37:27 UTC 2017


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

tille pushed a commit to branch master
in repository libbiod.

commit 7c34c122c9fd249c74206a345234c90034e6ed89
Author: Andreas Tille <tille at debian.org>
Date:   Sun Feb 26 07:36:00 2017 +0100

    New upstream version 0.1.0
---
 .gitignore                                         |    5 +
 .travis.yml                                        |    3 +
 LICENSE                                            |   17 +
 README.md                                          |   25 +
 bio/bam/abstractreader.d                           |   49 +
 bio/bam/bai/bin.d                                  |   92 +
 bio/bam/bai/indexing.d                             |  364 ++
 bio/bam/baifile.d                                  |  169 +
 bio/bam/baseinfo.d                                 |  727 +++
 bio/bam/constants.d                                |   37 +
 bio/bam/iontorrent/flowcall.d                      |  320 ++
 bio/bam/iontorrent/flowindex.d                     |   99 +
 bio/bam/md/core.d                                  |    4 +
 bio/bam/md/operation.d                             |  147 +
 bio/bam/md/parse.d                                 |  182 +
 bio/bam/md/reconstruct.d                           |  439 ++
 bio/bam/multireader.d                              |  429 ++
 bio/bam/pileup.d                                   | 1008 ++++
 bio/bam/randomaccessmanager.d                      |  468 ++
 bio/bam/read.d                                     | 1796 +++++++
 bio/bam/reader.d                                   |  594 +++
 bio/bam/readrange.d                                |  199 +
 bio/bam/reference.d                                |  221 +
 bio/bam/referenceinfo.d                            |   63 +
 bio/bam/region.d                                   |   65 +
 bio/bam/snpcallers/maq.d                           |  541 ++
 bio/bam/snpcallers/simple.d                        |   47 +
 bio/bam/splitter.d                                 |  106 +
 bio/bam/tagvalue.d                                 |  588 +++
 bio/bam/thirdparty/msgpack.d                       | 5173 ++++++++++++++++++++
 bio/bam/utils/array.d                              |  113 +
 bio/bam/utils/graph.d                              |   92 +
 bio/bam/utils/samheadermerger.d                    |  404 ++
 bio/bam/utils/value.d                              |  121 +
 bio/bam/validation/alignment.d                     |  562 +++
 bio/bam/validation/samheader.d                     |  446 ++
 bio/bam/writer.d                                   |  292 ++
 bio/core/base.d                                    |  268 +
 bio/core/bgzf/block.d                              |  197 +
 bio/core/bgzf/chunk.d                              |   41 +
 bio/core/bgzf/compress.d                           |  113 +
 bio/core/bgzf/constants.d                          |   61 +
 bio/core/bgzf/inputstream.d                        |  522 ++
 bio/core/bgzf/outputstream.d                       |  244 +
 bio/core/bgzf/virtualoffset.d                      |   95 +
 bio/core/call.d                                    |  106 +
 bio/core/fasta.d                                   |   52 +
 bio/core/genotype.d                                |   93 +
 bio/core/kmer.d                                    |  113 +
 bio/core/region.d                                  |  234 +
 bio/core/sequence.d                                |  230 +
 bio/core/tinymap.d                                 |  312 ++
 bio/core/utils/algo.d                              |  162 +
 bio/core/utils/bylinefast.d                        |  142 +
 bio/core/utils/format.d                            |  312 ++
 bio/core/utils/memoize.d                           |  272 +
 bio/core/utils/outbuffer.d                         |  108 +
 bio/core/utils/range.d                             |  280 ++
 bio/core/utils/roundbuf.d                          |  102 +
 bio/core/utils/stream.d                            |  167 +
 bio/core/utils/switchendianness.d                  |   50 +
 bio/core/utils/tmpfile.d                           |   20 +
 bio/core/utils/zlib.d                              |  280 ++
 bio/maf/block.d                                    |   73 +
 bio/maf/parser.d                                   |  827 ++++
 bio/maf/reader.d                                   |  105 +
 bio/sam/header.d                                   |  800 +++
 bio/sam/reader.d                                   |  222 +
 bio/sam/utils/fastrecordparser.d                   | 4711 ++++++++++++++++++
 bio/sam/utils/recordparser.d                       | 1457 ++++++
 bio/sff/constants.d                                |    5 +
 bio/sff/index.d                                    |    6 +
 bio/sff/read.d                                     |   26 +
 bio/sff/reader.d                                   |  152 +
 bio/sff/readrange.d                                |  128 +
 bio/sff/utils/roundup.d                            |   13 +
 bio/sff/writer.d                                   |  116 +
 dub.json                                           |   12 +
 examples/calculate_gc_content_from_reference.d     |   35 +
 examples/create_bam_from_scratch.d                 |   38 +
 examples/iterate_tags.d                            |   42 +
 examples/make_pileup.d                             |   28 +
 examples/print_base_info.d                         |   36 +
 examples/read_bam_file.d                           |   37 +
 examples/transverse_multiple_bam_files.d           |   32 +
 src_ragel/Makefile                                 |   28 +
 src_ragel/maf_block.rl                             |  153 +
 src_ragel/region.rl                                |   86 +
 src_ragel/sam_alignment.rl                         |  524 ++
 src_ragel/workarounds/fix_static_const.sh          |    6 +
 .../workarounds/fix_switch_case_fallthrough.sh     |    6 +
 test/data/b.sam                                    | 3993 +++++++++++++++
 test/data/b7_295_chunk.bam                         |  Bin 0 -> 420938 bytes
 test/data/bins.bam                                 |  Bin 0 -> 129222 bytes
 test/data/bins.bam.bai                             |  Bin 0 -> 3664 bytes
 test/data/corrupted_zlib_archive.bam               |  Bin 0 -> 124681 bytes
 test/data/duplicated_block_size.bam                |  Bin 0 -> 124687 bytes
 test/data/ex1_header.bam                           |  Bin 0 -> 124681 bytes
 test/data/ex1_header.bam.bai                       |  Bin 0 -> 176 bytes
 test/data/ex1_header.sam                           | 3273 +++++++++++++
 test/data/illu_20_chunk.bam                        |  Bin 0 -> 7561 bytes
 test/data/ion_20_chunk.bam                         |  Bin 0 -> 231521 bytes
 test/data/long_header.bam                          |  Bin 0 -> 10216 bytes
 test/data/mg1655_chunk.bam                         |  Bin 0 -> 535625 bytes
 test/data/no_block_size.bam                        |  Bin 0 -> 124681 bytes
 test/data/tags.bam                                 |  Bin 0 -> 3592 bytes
 test/data/tags.bam.bai                             |  Bin 0 -> 104 bytes
 test/data/wrong_bc_subfield_length.bam             |  Bin 0 -> 124681 bytes
 test/data/wrong_extra_gzip_length.bam              |  Bin 0 -> 124681 bytes
 test/unittests.d                                   |  482 ++
 110 files changed, 38035 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..433d266
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.dub
+docs.json
+__dummy.html
+*.o
+*.obj
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..d7b3485
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: d
+script:
+- rdmd -unittest -d test/unittests.d
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..fc825c7
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"), 
+to deal in the Software without restriction, including without limitation 
+the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the 
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..319569e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,25 @@
+### BioD
+
+[BioD](https://github.com/biod/BioD) is a fast and memory efficient bioinformatics library written in the [D programming language](http://dlang.org).
+BioD aims to:
+
+* Provide a platform for writing high-performance bioinformatics applications in D. BioD achieves this by:
+     - automatic parallelization of tasks where possible for example reading and writing BAM files.
+     - reducing the GC overhead by avoiding unnecessary memory allocations
+* Offer support for manipulating common biological data formats.
+* Write clear documented and maintainable codebase.
+
+
+### Usage
+See the [examples directory](https://github.com/biod/BioD/tree/master/examples) for examples and usage.
+
+
+#### BioD core
+* [Artem Tarasov](https://github.com/lomereiter)
+* [Pjotr Prins](https://github.com/pjotrp)
+
+
+##### License
+This library is licensed under the MIT license. Please see the license file for more details
+
+##### Citation
diff --git a/bio/bam/abstractreader.d b/bio/bam/abstractreader.d
new file mode 100644
index 0000000..402baea
--- /dev/null
+++ b/bio/bam/abstractreader.d
@@ -0,0 +1,49 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.abstractreader;
+
+import bio.sam.header;
+import bio.bam.read;
+import bio.bam.referenceinfo;
+
+public import std.range;
+
+/// Common interface for $(DPREF2 bam, reader, BamReader) 
+/// and $(DPREF2 sam, reader, SamReader).
+interface IBamSamReader {
+    /// SAM header
+    bio.sam.header.SamHeader header() @property;
+
+    /// Information about reference sequences
+    const(bio.bam.referenceinfo.ReferenceSequenceInfo)[] reference_sequences() @property const nothrow;
+
+    /// All reads in the file
+    std.range.InputRange!(bio.bam.read.BamRead) allReads() @property;
+
+    /// Filename
+    string filename() @property const;
+
+    ///
+    void assumeSequentialProcessing();
+} 
diff --git a/bio/bam/bai/bin.d b/bio/bam/bai/bin.d
new file mode 100644
index 0000000..296e7bc
--- /dev/null
+++ b/bio/bam/bai/bin.d
@@ -0,0 +1,92 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.bai.bin;
+
+import bio.core.bgzf.chunk;
+import bio.bam.constants;
+
+/// Distinct bin
+struct Bin {
+
+    /// Construct a bin with an id
+    this(uint id) nothrow {
+        this.id = id;
+    }
+
+    uint id; /// bin number
+    Chunk[] chunks; 
+
+    /// How deep the bin is in the tree
+    int level() @property const nothrow {
+        if (id == 0) return 0;
+        if (id < 9) return 1;
+        if (id < 73) return 2;
+        if (id < 585) return 3;
+        if (id < 4681) return 4;
+        return 5;
+    }
+
+    /// Returns whether the bin is a leaf in the B-tree
+    bool is_leaf() @property const nothrow {
+        return id > BAI_MAX_NONLEAF_BIN_ID;
+    }
+
+    /// Check if bin can overlap with a region
+    bool canOverlapWith(int begin, int end) const nothrow {
+        if (id == 0) return true;
+        if (id > BAI_MAX_BIN_ID) return false;
+
+        /// The following code is based on reg2bins() function
+        if (begin < 0) begin = 0;
+        auto magic_number = 4681;
+        auto b = begin >> 14;
+        auto e = end   >> 14;
+
+        while (true) {
+            auto delta = id - magic_number;
+            if (b <= delta && delta <= e) return true;
+
+            magic_number >>= 3;
+
+            if (magic_number == 0) return false;
+
+            b >>= 3;
+            e >>= 3;
+        }
+    } 
+}
+
+/// Returns bin number for [beg, end) interval (zero-based).
+/// Taken from SAM/BAM specification.
+ushort reg2bin(int beg, int end) {
+    if (end == beg) end = beg + 1; // edge case
+
+    --end;
+    if (beg>>14 == end>>14) return cast(ushort)(((1<<15)-1)/7 + (beg>>14));
+    if (beg>>17 == end>>17) return cast(ushort)(((1<<12)-1)/7 + (beg>>17));
+    if (beg>>20 == end>>20) return cast(ushort)(((1<<9)-1)/7  + (beg>>20));
+    if (beg>>23 == end>>23) return cast(ushort)(((1<<6)-1)/7  + (beg>>23));
+    if (beg>>26 == end>>26) return cast(ushort)(((1<<3)-1)/7  + (beg>>26));
+    return 0;
+}
diff --git a/bio/bam/bai/indexing.d b/bio/bam/bai/indexing.d
new file mode 100644
index 0000000..270f5e6
--- /dev/null
+++ b/bio/bam/bai/indexing.d
@@ -0,0 +1,364 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.bai.indexing;
+
+import bio.bam.reader;
+import bio.bam.readrange;
+import bio.bam.constants;
+
+import bio.bam.bai.bin;
+import bio.core.bgzf.chunk;
+
+import std.stream;
+import std.array;
+import std.algorithm;
+import std.system;
+import std.exception;
+import std.c.string;
+
+// Suppose we have an alignment which covers bases on a reference,
+// starting from one position and ending at another position.
+// In order to build linear index, we need to find to which windows
+// the two positions correspond. 
+//
+//
+// (K = 16384)
+//
+// [0, K)[K, 2K)[2K, 3K)...         <- windows
+//    [.......)                     <- alignment
+// 
+private size_t toLinearIndexOffset(int position) {
+    return position < 0 ? 0 : position / BAI_LINEAR_INDEX_WINDOW_SIZE;
+}
+
+///
+struct IndexBuilder {
+    private {
+        // array of linear offsets for the current reference entry
+        VirtualOffset[] _linear_index;
+        // (maximum index in _linear_index where data was written) + 1
+        size_t _linear_index_write_length;
+
+        static struct PreviousRead {
+            int ref_id = -1;
+            int position;
+            int end_position;
+            int basesCovered() { return end_position - position; }
+            Bin bin;
+            bool is_unmapped;
+
+            private char[256] _name_buf; // by spec., name length is <= 255 chars
+            string name;
+
+            VirtualOffset start_virtual_offset;
+            VirtualOffset end_virtual_offset;
+        }
+
+        PreviousRead _prev_read;
+
+        Stream _stream;
+        int _n_refs;
+
+        ulong _no_coord = 0;
+        // metadata for each reference
+        ulong _beg_vo = -1UL;
+        ulong _end_vo = 0;
+        ulong _unmapped = 0;
+        ulong _mapped = 0;
+
+        bool _first_read = true;
+
+        // map: bin ID -> array of chunks
+        Chunk[][uint] _chunks;
+
+        VirtualOffset _current_chunk_beg; // start of current chunk
+
+        // no metadata for empty references
+        void writeEmptyReference() { 
+            _stream.write(cast(int)0); // n_bins
+            _stream.write(cast(int)0); // n_intv
+        }
+
+        void updateLastReadInfo(ref BamReadBlock read) {
+            with (_prev_read) {
+                ref_id = read.ref_id;
+                position = read.position;
+                end_position = position + read.basesCovered();
+                bin = read.bin;
+                is_unmapped = read.is_unmapped;
+                _name_buf[0 .. read.name.length] = read.name[];
+                name = cast(string)_name_buf[0 .. read.name.length];
+                start_virtual_offset = read.start_virtual_offset;
+                end_virtual_offset = read.end_virtual_offset;
+            }
+        }
+
+        void updateMetadata(ref BamReadBlock read) {
+            if (read.ref_id == -1) {
+                ++_no_coord;
+            } else if (read.is_unmapped) {
+                ++_unmapped;
+            } else {
+                ++_mapped;
+            }
+
+            if (_beg_vo == -1UL)
+                _beg_vo = cast(ulong)read.start_virtual_offset;
+            _end_vo = cast(ulong)read.end_virtual_offset;
+        }
+
+        void updateLinearIndex() {
+            assert(_prev_read.ref_id >= 0);
+
+            size_t beg, end;
+
+            if (_prev_read.is_unmapped) {
+                end = beg = toLinearIndexOffset(_prev_read.position);
+            } else {
+                beg = toLinearIndexOffset(_prev_read.position);
+                end = toLinearIndexOffset(_prev_read.position + _prev_read.basesCovered() - 1);
+            }
+
+            debug {
+                import std.stdio;
+                if (end >= _linear_index.length) {
+                    writeln("beg: ", beg);
+                    writeln("end: ", end);
+                    writeln("pos: ", _prev_read.position);
+                    writeln("bases: ", _prev_read.basesCovered());
+                }
+            }
+
+            foreach (i; beg .. end + 1)
+                if (_linear_index[i] == 0UL)
+                    _linear_index[i] = _prev_read.start_virtual_offset;
+
+            if (end + 1 > _linear_index_write_length)
+                _linear_index_write_length = end + 1;
+        }
+
+        void dumpCurrentLinearIndex() {
+            _stream.write(cast(int)_linear_index_write_length);
+
+            //                                                                 
+            // There might be untouched places in linear index                 
+            // with virtual offset equal to zero.                              
+            // However, it's not a good idea to leave those zeros,             
+            // since we can start lookup from the last non-zero virtual offset 
+            // encountered before the untouched window.                        
+            //                                                                 
+            VirtualOffset last_voffset = 0;
+
+            foreach (voffset; _linear_index[0 .. _linear_index_write_length]) {
+                if (voffset == 0)
+                    voffset = last_voffset;
+                else
+                    last_voffset = voffset;
+                _stream.write(cast(ulong)voffset);
+            }
+        }
+
+        void dumpCurrentReference() {
+            // +1 because we output dummy bin, too
+            _stream.write(cast(int)(_chunks.length + 1));
+
+            foreach (bin_id, bin_chunks; _chunks) {
+                if (bin_chunks.length > 0) {
+                    _stream.write(cast(uint)bin_id);
+                    _stream.write(cast(int)bin_chunks.length);
+                    foreach (chunk; bin_chunks) {
+                        _stream.write(cast(ulong)chunk.beg);
+                        _stream.write(cast(ulong)chunk.end);
+                    }
+                }
+            }
+            _stream.write(cast(uint)37450);
+            _stream.write(cast(int)2);
+            _stream.write(cast(ulong)_beg_vo);
+            _stream.write(cast(ulong)_end_vo);
+            _stream.write(cast(ulong)_mapped);
+            _stream.write(cast(ulong)_unmapped);
+
+            dumpCurrentLinearIndex();
+
+            // reset data
+            memset(_linear_index.ptr, 0, _linear_index.length * ulong.sizeof);
+            _linear_index_write_length = 0;
+            _chunks = null;
+            _current_chunk_beg = _prev_read.end_virtual_offset;
+
+            _beg_vo = _end_vo = cast(ulong)_current_chunk_beg;
+            _unmapped = 0;
+            _mapped = 0;
+        }
+
+        // adds chunk to the current bin (which is determined from _prev_read)
+        void updateChunks() {
+            auto current_chunk_end = _prev_read.end_virtual_offset;
+
+            auto bin_id = _prev_read.bin.id;
+
+            if (bin_id !in _chunks)
+                _chunks[bin_id] = [];
+            auto cs = _chunks[bin_id];
+
+            bool canMergeWithPreviousChunk() {
+                assert(cs.length > 0);
+                auto last_chunk = cs[$ - 1];
+
+                if (last_chunk.end.coffset == _current_chunk_beg.coffset)
+                    return true;
+
+                return false;
+            }
+
+            if (cs.length == 0 || !canMergeWithPreviousChunk()) {
+                auto new_chunk = Chunk(_current_chunk_beg, current_chunk_end);
+                _chunks[_prev_read.bin.id] ~= new_chunk;
+            } else {
+                _chunks[_prev_read.bin.id][$ - 1].end = current_chunk_end;
+            }
+
+            _current_chunk_beg = current_chunk_end;
+        }
+
+        void checkThatBinIsCorrect(ref BamReadBlock read) {
+            if (!check_bins)
+                return;
+            auto expected = reg2bin(read.position, 
+                                    read.position + read.basesCovered());
+            enforce(read.bin.id == expected,
+                    "Bin in read with name '" ~ read.name ~ 
+                    "' is set incorrectly (" ~ to!string(read.bin.id) ~ 
+                    " instead of expected " ~ to!string(expected) ~ ")");
+        }
+
+        void checkThatInputIsSorted(ref BamReadBlock read) {
+            if (_first_read) return;
+            if (read.ref_id == -1) return; // unmapped
+            if (_prev_read.ref_id < read.ref_id) return;
+
+            enforce(read.ref_id == _prev_read.ref_id && 
+                    read.position >= _prev_read.position,
+                    "BAM file is not coordinate-sorted: " ~
+                    "read '" ~ read.name ~ "' (" ~ read.ref_id.to!string ~ ":" ~ read.position.to!string ~ ")" ~
+                    " must be after read '" ~ _prev_read.name ~ "' (" ~ _prev_read.ref_id.to!string ~ ":" ~ _prev_read.position.to!string ~ ")" ~
+                    "' (at virtual offsets " ~ 
+                    to!string(_prev_read.start_virtual_offset) ~ ", " ~ read.start_virtual_offset.to!string ~ ")");
+        }
+    }
+
+    ///
+    this(Stream output_stream, int number_of_references) {
+        _stream = new EndianStream(output_stream, Endian.littleEndian);
+        _n_refs = number_of_references;
+
+        size_t size = BAI_MAX_BIN_ID - BAI_MAX_NONLEAF_BIN_ID + 1;
+        _linear_index = new VirtualOffset[](size);
+
+        _stream.writeString(BAI_MAGIC);            // write BAI magic string
+        _stream.write(cast(int)_n_refs);           // and number of references
+    }
+
+    /// Check that bins are correct.
+    bool check_bins;
+
+    /// Add a read. The reads must be put in coordinate-sorted order.
+    void put(BamReadBlock read) {
+        checkThatInputIsSorted(read);
+        scope(exit) updateMetadata(read);
+
+        if (read.ref_id < 0)
+            return;
+
+        // start position is unavailable, skip
+        if (read.position < 0)
+            return;
+
+        if (_first_read) {
+            updateLastReadInfo(read);
+            _first_read = false;
+            _current_chunk_beg = read.start_virtual_offset;
+
+            if (read.ref_id > 0)
+                foreach (i; 0 .. read.ref_id)
+                    writeEmptyReference();
+
+            return;
+        }
+
+        checkThatBinIsCorrect(read);
+
+        // new reference, so write data for previous one(s)
+        if (read.ref_id > _prev_read.ref_id) {
+            updateLinearIndex();
+            updateChunks();
+            dumpCurrentReference();
+            
+            foreach (i; _prev_read.ref_id + 1 .. read.ref_id)
+                writeEmptyReference();
+        }
+
+        if (read.ref_id == _prev_read.ref_id) {
+            updateLinearIndex();
+
+            if (read.bin.id != _prev_read.bin.id)
+                updateChunks();
+        }
+
+        updateLastReadInfo(read);
+    }
+
+    /// Closes the stream
+    void finish() {
+        if (!_first_read) { // at least one was processed
+            assert(_prev_read.ref_id >= 0);
+            updateLinearIndex();
+            updateChunks();
+            dumpCurrentReference();
+        }
+
+        // _prev_read.ref_id == -1 if all are unmapped
+        foreach (i; _prev_read.ref_id + 1 .. _n_refs)
+            writeEmptyReference();
+
+        _stream.write(cast(ulong)_no_coord);
+        _stream.close();
+    }
+}
+
+/// Writes BAM index to the $(D stream)
+///
+/// Accepts optional $(D progressBarFunc)
+void createIndex(BamReader bam, Stream stream, bool check_bins=false,
+                 void delegate(lazy float p) progressBarFunc=null)
+{
+    auto n_refs = cast(int)bam.reference_sequences.length;
+    auto index_builder = IndexBuilder(stream, n_refs);
+    index_builder.check_bins = check_bins;
+    auto reads = bam.readsWithProgress!withOffsets(progressBarFunc);
+    foreach (read; reads)
+        index_builder.put(read);
+    index_builder.finish();
+}
diff --git a/bio/bam/baifile.d b/bio/bam/baifile.d
new file mode 100644
index 0000000..57359a9
--- /dev/null
+++ b/bio/bam/baifile.d
@@ -0,0 +1,169 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.baifile;
+
+public import bio.core.bgzf.chunk;
+public import bio.bam.bai.bin;
+import bio.core.bgzf.virtualoffset;
+import bio.bam.constants;
+
+import std.stream;
+import std.system;
+import std.exception;
+import std.algorithm;
+import std.conv;
+import std.range;
+import std.file;
+import std.path;
+
+/// Represents index for a single reference
+struct Index {
+    /// Information about bins
+    Bin[] bins;
+
+    /// Virtual file offsets of first alignments overlapping 16384-byte windows
+    /// on the reference sequence. This linear index is used to reduce amount
+    /// of file seeks for region queries, since with its help one can reduce the
+    /// number of chunks to be investigated based on their end position.
+    ///
+    ///
+    /// Suppose you have a region [beg, end) and want to do a query.
+    ///
+    /// Here's the reference:
+    /// [....................!..............!.................................]
+    ///                     beg            end
+    ///
+    /// Here's the same reference with 16384-byte long windows:
+    /// [%...........%.......!....%.........!..%...........%...........%......]
+    ///                     beg            end
+    /// [ 1st window][ 2nd window][...
+    ///
+    /// With linear index, we can take the second window, find out what is 
+    /// the minimum virtual offset among alignments overlapping this window,
+    /// and skip all chunks which end position is less or equal to this offset:
+    ///
+    /// [........ at ...........!..............!.................................]
+    ///   .  ..min. offset   beg           end
+    ///   [  ).        .                              <- this chunk is skipped
+    ///       [        )                              <- this one is not
+    ///
+    VirtualOffset[] ioffsets; 
+
+    /// Get (approximate) virtual offset of the first alignment overlapping $(D position)
+    /// 
+    /// Returned virtual offset is less or equal to real offset.
+    VirtualOffset getMinimumOffset(int position) {
+        int pos = max(0, position);
+        int _i = min(pos / BAI_LINEAR_INDEX_WINDOW_SIZE, cast(int)ioffsets.length - 1);
+        auto min_offset = (_i == -1) ? VirtualOffset(0) : ioffsets[_i];
+        return min_offset;
+    }
+}
+
+struct BaiFile {
+    Index[] indices;
+
+    /// Initialize from stream which contains BAI data
+    this(ref Stream stream) {
+        _stream = stream;
+        parse();
+    }
+
+    /// Open BAI file given either filename of BAM file or that of BAI file.
+    this(string filename) {
+        Stream fstream;
+
+        if (!endsWith(filename, ".bai")) {
+            /// Unfortunately, std.path.addExt is going to be deprecated
+
+            auto first_filename = filename ~ ".bai";
+            auto second_filename = to!string(retro(find(retro(filename), '.'))) ~ "bai";
+
+            if (std.file.exists(first_filename)) {
+                fstream = new BufferedFile(absolutePath(first_filename));
+            } else {
+                if (std.file.exists(second_filename)) {
+                    fstream = new BufferedFile(absolutePath(second_filename));
+                } else {
+                    throw new Exception("searched for " ~ first_filename ~ " or " ~
+                                        second_filename ~ ", found neither");
+                }
+            }
+        } else {
+            fstream = new BufferedFile(filename);
+        }
+
+        Stream estream = new EndianStream(fstream, Endian.littleEndian);
+        this(estream);
+    }
+
+private:
+    Stream _stream;
+
+    /// according to section 4.2 of SAM/BAM specification
+    void parse() {
+        auto magic = _stream.readString(4);
+        enforce(magic == "BAI\1", "Invalid file format: expected BAI\\1");
+
+        int n_ref;
+        _stream.read(n_ref);
+        indices = uninitializedArray!(Index[])(n_ref);
+
+        foreach (i; 0 .. n_ref) {
+            int n_bin = void;
+            _stream.read(n_bin);
+            indices[i].bins = uninitializedArray!(Bin[])(n_bin);
+            
+            foreach (j; 0 .. n_bin) {
+                uint id = void;
+                _stream.read(id);
+                auto bin = Bin(id);
+
+                int n_chunk = void;
+                _stream.read(n_chunk);
+                bin.chunks = uninitializedArray!(Chunk[])(n_chunk);
+                
+                foreach (k; 0 .. n_chunk) {
+                    ulong tmp = void;
+                    _stream.read(tmp);
+                    bin.chunks[k].beg = VirtualOffset(tmp);
+                    _stream.read(tmp);
+                    bin.chunks[k].end = VirtualOffset(tmp);
+                }
+                
+                indices[i].bins[j] = bin;
+            }
+
+            int n_intv = void;
+            _stream.read(n_intv);
+            indices[i].ioffsets = uninitializedArray!(VirtualOffset[])(n_intv);
+
+            foreach (j; 0 .. n_intv) {
+                ulong tmp = void;
+                _stream.read(tmp);
+                indices[i].ioffsets[j] = VirtualOffset(tmp);
+            }
+        }
+    }
+}
diff --git a/bio/bam/baseinfo.d b/bio/bam/baseinfo.d
new file mode 100644
index 0000000..aca9772
--- /dev/null
+++ b/bio/bam/baseinfo.d
@@ -0,0 +1,727 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.baseinfo;
+
+import bio.core.base;
+import bio.core.sequence;
+
+import bio.bam.read;
+import bio.bam.tagvalue;
+import bio.bam.iontorrent.flowcall;
+import bio.bam.md.core;
+
+import std.range;
+import std.conv;
+import std.traits;
+import std.typecons;
+import std.typetuple;
+
+/// 
+enum Option
+{
+    /// adds 'cigar_before' and 'cigar_after' properties
+    cigarExtra, 
+
+    /// adds 'md_operation', 'md_operation_offset' properties
+    mdCurrentOp,
+
+    /// adds 'previous_md_operation' property
+    mdPreviousOp,
+
+    /// adds 'next_md_operation' property
+    mdNextOp
+}
+
+///
+struct MixinArg(T, string Tag) {
+    T value;
+    alias value this;
+    alias Tag TagName;
+}
+
+/// Wrapper for arguments to $(D basesWith) function (see below).
+/// Required to distinguish to which tag each parameter refers.
+MixinArg!(T, Tag) arg(string Tag, T)(T value) {
+    return MixinArg!(T, Tag)(value);
+}
+
+template staticFilter(alias P, T...)
+{
+    static if (T.length == 0)
+        alias TypeTuple!() staticFilter;
+    else static if (P!(T[0]))
+        alias TypeTuple!(T[0], staticFilter!(P, T[1..$])) staticFilter;
+    else
+        alias staticFilter!(P, T[1..$]) staticFilter;
+}
+
+template isTag(alias argument)
+{
+    enum isTag = is(typeof(argument) == string);
+}
+
+template isOption(alias argument)
+{
+    enum isOption = is(typeof(argument) == Option);
+}
+
+struct PerBaseInfo(R, TagsAndOptions...) {
+
+    alias staticFilter!(isTag, TagsAndOptions) Tags;
+    alias staticFilter!(isOption, TagsAndOptions) Options;
+
+    private alias TypeTuple!("CIGAR", Tags) Extensions;
+
+    // /////////////////////////////////////////////////////////////////////////
+    //
+    // Each 'extension' is a template with name TAGbaseInfo, containing 
+    // a couple of mixin templates:
+    // 
+    // * resultProperties
+    //      These are additional properties provided by the template
+    //
+    // * rangeMethods
+    //      These describe how to proceed to the next base.
+    //      The following methods must be implemented:
+    //      
+    //      - void setup(Args...)(const ref R read, Args args);
+    //          Gets called during range construction. All constructor
+    //          arguments are forwarded, and it's this function which
+    //          is responsible for getting required parameters for this
+    //          particular template.
+    //
+    //      - void populate(Result)(ref Result r);
+    //          Populates fields of the result declared in resultProperties.
+    //          Should run in O(1), just copying a few variables.
+    //          Current base of the result is updated before the call.
+    //
+    //      - void update(const ref R read);
+    //          Encapsulates logic of moving to the next base and updating
+    //          mixin variables correspondingly.
+    //
+    //      - void copy(Range)(const ref Range source, ref Range target);
+    //          Gets called during $(D source.save). Therefore, any ranges
+    //          used in mixin templates must be saved as well at that time.
+    //
+    // /////////////////////////////////////////////////////////////////////////
+
+    private static string getResultProperties(Exts...)() {
+        char[] result;
+        foreach (ext; Exts) 
+            result ~= "mixin " ~ ext ~ "baseInfo!(R, Options).resultProperties;".dup;
+        return cast(string)result;
+    }
+
+    static struct Result {
+        /// Actual read base, with strand taken into account.
+        Base base;
+        alias base this;
+
+        string opCast(T)() if (is(T == string))
+        {
+            return to!string(base);
+        }
+
+        bool opEquals(T)(T base) const
+            if (is(Unqual!T == Base)) 
+        {
+            return this.base == base;
+        }
+
+        bool opEquals(T)(T result) const
+            if (is(Unqual!T == Result))
+        {
+            return this == result;
+        }
+
+        bool opEquals(T)(T base) const
+            if (is(Unqual!T == char) || is(Unqual!T == dchar))
+        {
+            return this.base == base;
+        }
+
+        mixin(getResultProperties!Extensions());
+    }
+
+    private static string getRangeMethods(Exts...)() {
+        char[] result;
+        foreach (ext; Exts)
+            result ~= "mixin " ~ ext ~ "baseInfo!(R, Options).rangeMethods " ~ ext ~ ";".dup;
+        return cast(string)result;
+    }
+
+    mixin(getRangeMethods!Extensions());
+
+    private void setup(string tag, Args...)(R read, Args args) {
+        mixin(tag ~ ".setup(read, args);");
+    }
+
+    private void populate(string tag)(ref Result r) {
+        mixin(tag ~ ".populate(r);");
+    }
+
+    private void update(string tag)() {
+        mixin(tag ~ ".update(_read);");
+    }
+
+    private void copy(string tag)(ref typeof(this) other) {
+        mixin(tag ~ ".copy(this, other);");
+    }
+
+    this(Args...)(R read, Args args) {
+        _read = read;
+        _rev = read.is_reverse_strand;
+        _seq = reversableRange!complementBase(read.sequence, _rev);
+
+        foreach (t; Extensions) {
+            setup!t(read, args);
+        }
+    }
+
+    bool empty() @property {
+        return _seq.empty;
+    }
+
+    /// Allows to construct front element in-place, avoiding a copy.
+    void constructFront(Result* addr)
+    {
+        addr.base = _seq.front;
+        foreach (t; Extensions)
+            populate!t(*addr);
+    }
+
+    Result front() @property {
+        Result r = void;
+        r.base = _seq.front;
+        foreach (t; Extensions)
+            populate!t(r);
+        return r;
+    }
+
+    void popFront() {
+        moveToNextBase();
+    }
+
+    PerBaseInfo save() @property {
+        PerBaseInfo r = void;
+        r._read = _read.dup;
+        r._seq = _seq.save;
+        r._rev = _rev;
+        foreach (t; Extensions)
+            copy!t(r);
+        return r;
+    }
+
+    ref PerBaseInfo opAssign(PerBaseInfo other) {
+        _read = other._read;
+        _seq = other._seq.save;
+        _rev = other._rev;
+        foreach (t; Extensions)
+            other.copy!t(this);
+        return this;
+    }
+
+    private void moveToNextBase() {
+
+        foreach (t; Extensions) {
+            update!t();
+        }
+
+        _seq.popFront();
+    }
+
+    /// Returns true if the read is reverse strand,
+    /// and false otherwise.
+    bool reverse_strand() @property const {
+        return _rev;
+    }
+
+    private {
+        bool _rev = void;
+        R _read = void;
+        ReversableRange!(complementBase, typeof(_read.sequence)) _seq = void;
+    }
+}
+
+///
+///  Collect per-base information from available tags. 
+///  Use $(D arg!TagName) to pass a parameter related to a particular tag.
+///
+///  Example:
+///
+/// basesWith!"FZ"(arg!"flowOrder"(flow_order), arg!"keySequence"(key_sequence));
+///
+template basesWith(TagsAndOptions...) {
+    auto basesWith(R, Args...)(R read, Args args) {
+        return PerBaseInfo!(R, TagsAndOptions)(read, args);
+    }
+}
+
+/// Provides additional property $(D reference_base)
+template MDbaseInfo(R, Options...) {
+
+    mixin template resultProperties() {
+    
+        enum MdCurrentOp = staticIndexOf!(Option.mdCurrentOp, Options) != -1;
+        enum MdPreviousOp = staticIndexOf!(Option.mdPreviousOp, Options) != -1;
+        enum MdNextOp = staticIndexOf!(Option.mdNextOp, Options) != -1;
+
+        /// If current CIGAR operation is reference consuming,
+        /// returns reference base at this position, otherwise
+        /// returns '-'.
+        ///
+        /// If read is on '-' strand, the result will be
+        /// complementary base.
+        char reference_base() @property const {
+            return _ref_base;
+        }
+
+        private char _ref_base = void;
+
+        static if (MdPreviousOp)
+        {
+            private Nullable!MdOperation _previous_md_operation = void;
+
+            /// Previous MD operation
+            Nullable!MdOperation previous_md_operation() @property {
+                return _previous_md_operation;
+            }
+        }
+
+        static if (MdCurrentOp)
+        {
+
+            private MdOperation _current_md_operation = void;
+            private uint _current_md_operation_offset = void;
+
+            /// Current MD operation
+            MdOperation md_operation() @property {
+                return _current_md_operation;
+            }
+
+            /// If current MD operation is match, returns how many bases
+            /// have matched before the current base. Otherwise returns 0.
+            uint md_operation_offset() @property const {
+                return _current_md_operation_offset;
+            }
+        }
+
+        static if (MdNextOp)
+        {
+            private Nullable!MdOperation _next_md_operation = void;
+            /// Next MD operation
+            Nullable!MdOperation next_md_operation() @property {
+                return _next_md_operation;
+            }
+        }
+    }
+
+    mixin template rangeMethods() {
+
+        enum MdCurrentOp = staticIndexOf!(Option.mdCurrentOp, Options) != -1;
+        enum MdPreviousOp = staticIndexOf!(Option.mdPreviousOp, Options) != -1;
+        enum MdNextOp = staticIndexOf!(Option.mdNextOp, Options) != -1;
+
+        private {
+            ReversableRange!(reverseMdOp, MdOperationRange) _md_ops = void;
+            uint _match; // remaining length of current match operation
+            MdOperation _md_front = void;
+
+            static if (MdPreviousOp)
+            {
+                Nullable!MdOperation _previous_md_op;
+                bool _md_front_is_initialized;
+            }
+        }
+
+        private void updateMdFrontVariable()
+        {
+            static if (MdPreviousOp)
+            {
+                if (_md_front_is_initialized)
+                    _previous_md_op = _md_front;
+
+                _md_front_is_initialized = true;
+            }
+
+            _md_front = _md_ops.front;
+            _md_ops.popFront();
+        }
+
+        void setup(Args...)(const ref R read, Args args)
+        {
+            auto md = read["MD"];
+            auto md_str = *(cast(string*)&md);
+            _md_ops = reversableRange!reverseMdOp(mdOperations(md_str),
+                                                  read.is_reverse_strand);
+         
+            while (!_md_ops.empty)
+            {
+                updateMdFrontVariable();
+                if (!_md_front.is_deletion) {
+                    if (_md_front.is_match) {
+                        _match = _md_front.match;
+                    }
+                    break;
+                }
+            }
+        }
+
+        void populate(Result)(ref Result result)
+        {
+            if (!current_cigar_operation.is_reference_consuming)
+            {
+                result._ref_base = '-';
+                return;
+            }
+
+            MdOperation op = _md_front;
+            if (op.is_mismatch)
+                result._ref_base = op.mismatch.asCharacter;
+            else if (op.is_match) {
+                result._ref_base = result.base.asCharacter;
+            }
+            else assert(0);
+
+            static if (MdPreviousOp)
+            {
+                if (_previous_md_op.isNull)
+                    result._previous_md_operation.nullify();
+                else
+                    result._previous_md_operation = _previous_md_op.get;
+            }
+
+            static if (MdCurrentOp)
+            {
+
+                result._current_md_operation = op;
+                result._current_md_operation_offset = _md_front.match - _match;
+            }
+
+            static if (MdNextOp)
+            {
+                if (_md_ops.empty)
+                    result._next_md_operation.nullify();
+                else
+                    result._next_md_operation = _md_ops.front;
+            }
+        }
+
+        void update(const ref R read)
+        {
+            if (!current_cigar_operation.is_reference_consuming)
+                return;
+
+            if (_md_front.is_mismatch)
+            {
+                if (_md_ops.empty)
+                    return;
+
+                updateMdFrontVariable();
+            }
+            else if (_md_front.is_match)
+            {
+                --_match;
+                if (_match == 0 && !_md_ops.empty) {
+                    updateMdFrontVariable();
+                }
+            }
+            else assert(0);
+
+            while (_md_front.is_deletion) {
+                if (_md_ops.empty)
+                    return;
+
+                updateMdFrontVariable();
+            }
+
+            if (_match == 0 && _md_front.is_match)
+                _match = _md_front.match;
+        }
+
+        void copy(Range)(ref Range source, ref Range target)
+        {
+            target.MD._md_ops = source.MD._md_ops.save;
+            target.MD._md_front = source.MD._md_front;
+
+            static if (MdPreviousOp)
+            {
+                if (source.MD._previous_md_op.isNull)
+                    target.MD._previous_md_op.nullify();
+                else
+                    target.MD._previous_md_op = source.MD._previous_md_op.get;
+                target.MD._md_front_is_initialized = source.MD._md_front_is_initialized;
+            }
+        }
+    }
+}
+
+/// Provides additional property $(D flow_call).
+template FZbaseInfo(R, Options...) {
+
+    mixin template resultProperties() {
+        /// Current flow call
+        ReadFlowCall flow_call() @property const {
+            return _flow_call;
+        }
+
+        private {
+            ReadFlowCall _flow_call;
+        }
+    }
+
+    mixin template rangeMethods() {
+
+        private {
+            ReadFlowCallRange!(BamRead.SequenceResult) _flow_calls = void;
+            ReadFlowCall _current_flow_call = void;
+            ushort _at = void;
+
+            debug {
+                string _read_name;
+            }
+        }
+
+        void setup(Args...)(const ref R read, Args args) 
+        {
+            string flow_order = void;
+            string key_sequence = void;
+
+            debug {
+                _read_name = read.name.idup;
+            }
+
+            enum flowOrderExists = staticIndexOf!(MixinArg!(string, "flowOrder"), Args);
+            enum keySequenceExists = staticIndexOf!(MixinArg!(string, "keySequence"), Args);
+            static assert(flowOrderExists != -1, `Flow order must be provided via arg!"flowOrder"`);
+            static assert(keySequenceExists != -1, `Flow order must be provided via arg!"keySequence"`);
+
+            foreach (arg; args) {
+                static if(is(typeof(arg) == MixinArg!(string, "flowOrder")))
+                    flow_order = arg;
+
+                static if(is(typeof(arg) == MixinArg!(string, "keySequence")))
+                    key_sequence = arg;
+            }
+
+            _at = 0;
+
+            _flow_calls = readFlowCalls(read, flow_order, key_sequence);
+            if (!_flow_calls.empty) {
+                _current_flow_call = _flow_calls.front;
+            }
+        }
+
+        void populate(Result)(ref Result result) {
+            result._flow_call = _current_flow_call;
+
+            debug {
+                if (result.base != result._flow_call.base) {
+                    import std.stdio;
+                    stderr.writeln("invalid flow call at ", _read_name, ": ", result.position);
+                }
+            }
+        }
+
+        void update(const ref R read) 
+        {
+            ++_at;
+            if (_at == _current_flow_call.length) {
+                _flow_calls.popFront();
+                if (!_flow_calls.empty) {
+                    _current_flow_call = _flow_calls.front;
+                    _at = 0;
+                }
+            }
+        }
+
+        void copy(Range)(ref Range source, ref Range target) {
+            target.FZ._flow_calls = source._flow_calls.save();
+            target.FZ._at = source.FZ._at;
+            target.FZ._current_flow_call = source._current_flow_call;
+
+            debug {
+                target._read_name = _read_name;
+            }
+        }
+    }
+}
+
+/// Retrieving flow signal intensities from ZM tags is also available.
+alias FZbaseInfo ZMbaseInfo;
+
+/// Provides additional properties
+///     * position
+///     * cigar_operation
+///     * cigar_operation_offset
+template CIGARbaseInfo(R, Options...) {
+
+    mixin template resultProperties() {
+
+        enum CigarExtraProperties = staticIndexOf!(Option.cigarExtra, Options) != -1;
+
+        static if (CigarExtraProperties)
+        {
+            /// Current CIGAR operation
+            CigarOperation cigar_operation() @property {
+                return _cigar[_operation_index];
+            }
+
+            /// CIGAR operations before current one
+            auto cigar_before() @property {
+                return _cigar[0 .. _operation_index];
+            }
+
+            /// CIGAR operations after current one
+            auto cigar_after() @property {
+                return _cigar[_operation_index + 1 .. _cigar.length];
+            }
+        }
+        else
+        {
+            /// Current CIGAR operation
+            CigarOperation cigar_operation() @property const {
+                return _current_cigar_op;
+            }
+        }
+
+        /// Position of the corresponding base on the reference.
+        /// If current CIGAR operation is not one of 'M', '=', 'X',
+        /// returns the position of the previous mapped base.
+        uint position() @property const {
+            return _reference_position;
+        }
+
+        /// Offset in current CIGAR operation, starting from 0.
+        uint cigar_operation_offset() @property const {
+            return _cigar_operation_offset;
+        }
+
+        private {
+            int _operation_index = void;
+            uint _reference_position = void;
+            uint _cigar_operation_offset = void;
+            static if (CigarExtraProperties)
+            {
+                ReversableRange!(identity, const(CigarOperation)[]) _cigar = void;
+            }
+            else
+            {
+                CigarOperation _current_cigar_op;
+            }
+        }
+    }
+
+    mixin template rangeMethods() {
+
+        enum CigarExtraProperties = staticIndexOf!(Option.cigarExtra, Options) != -1;
+
+        private {
+            CigarOperation _current_cigar_op = void;
+
+            ulong _cur_cig_op_len = void;
+            bool _cur_cig_op_is_ref_cons = void;
+
+            int _index = void;
+            uint _at = void;
+            uint _ref_pos = void;
+            ReversableRange!(identity, const(CigarOperation)[]) _cigar = void;
+        }
+
+        /// Current CIGAR operation, available to all extensions
+        const(CigarOperation) current_cigar_operation() @property const {
+            return _current_cigar_op;
+        }
+
+        void setup(Args...)(const ref R read, Args) 
+        {
+            _cigar = reversableRange(read.cigar, read.is_reverse_strand);
+
+            _index = -1;
+            _ref_pos = reverse_strand ? (read.position + read.basesCovered() - 1)
+                                      : read.position;
+
+            _moveToNextCigarOperator();
+            assert(_index >= 0);
+        }
+
+        void populate(Result)(ref Result result) {
+            result._reference_position = _ref_pos;
+            result._cigar_operation_offset = _at;
+            static if (CigarExtraProperties)
+            {
+                result._cigar = _cigar;
+                result._operation_index = _index;
+            }
+            else
+            {
+                result._current_cigar_op = _current_cigar_op;
+            }
+        }
+
+        void update(const ref R read) 
+        {
+           ++_at;
+
+           if  (_cur_cig_op_is_ref_cons) {
+               _ref_pos += reverse_strand ? -1 : 1;
+           }
+
+           if (_at == _cur_cig_op_len) {
+               _moveToNextCigarOperator();
+           }
+        }
+
+        void copy(Range)(const ref Range source, ref Range target) {
+            target.CIGAR._cigar = source.CIGAR._cigar;
+            target.CIGAR._index = source.CIGAR._index;
+            target.CIGAR._current_cigar_op = source.CIGAR._current_cigar_op;
+            target.CIGAR._cur_cig_op_len = source.CIGAR._cur_cig_op_len;
+            target.CIGAR._cur_cig_op_is_ref_cons = source.CIGAR._cur_cig_op_is_ref_cons;
+            target.CIGAR._at = source.CIGAR._at;
+            target.CIGAR._ref_pos = source.CIGAR._ref_pos;
+        }
+
+        private void _moveToNextCigarOperator() {
+            _at = 0;
+            for (++_index; _index < _cigar.length; ++_index)
+            {
+                _current_cigar_op = _cigar[_index];
+                _cur_cig_op_is_ref_cons = _current_cigar_op.is_reference_consuming;
+                _cur_cig_op_len = _current_cigar_op.length;
+
+                if (_current_cigar_op.is_query_consuming)
+                    break;
+
+                if (_cur_cig_op_is_ref_cons)
+                {
+                    if (reverse_strand)
+                        _ref_pos -= _cur_cig_op_len;
+                    else
+                        _ref_pos += _cur_cig_op_len;
+                }
+            }
+        }
+    }
+}
diff --git a/bio/bam/constants.d b/bio/bam/constants.d
new file mode 100644
index 0000000..9d12ad6
--- /dev/null
+++ b/bio/bam/constants.d
@@ -0,0 +1,37 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.constants;
+
+public import bio.core.bgzf.constants;
+
+immutable BAM_MAGIC = "BAM\1";
+immutable BAI_MAGIC = "BAI\1";
+
+immutable ubyte BAM_SI1 = 66;
+immutable ubyte BAM_SI2 = 67;
+immutable ubyte[28] BAM_EOF = BGZF_EOF;
+
+immutable BAI_MAX_BIN_ID = 37449;
+immutable BAI_MAX_NONLEAF_BIN_ID = 4680;
+immutable BAI_LINEAR_INDEX_WINDOW_SIZE = 16384;
diff --git a/bio/bam/iontorrent/flowcall.d b/bio/bam/iontorrent/flowcall.d
new file mode 100644
index 0000000..75746fb
--- /dev/null
+++ b/bio/bam/iontorrent/flowcall.d
@@ -0,0 +1,320 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.iontorrent.flowcall;
+
+import bio.bam.tagvalue;
+import bio.bam.iontorrent.flowindex;
+
+import bio.core.base;
+import bio.core.utils.range;
+
+import std.array;
+import std.typecons;
+import std.range;
+import std.algorithm;
+import std.exception;
+
+/// Tag where flow signal intensities are stored
+enum FlowGramTag : ubyte {
+    FZ,
+    ZM
+}
+
+/// Scale of intensity values
+float multiplier(FlowGramTag tag) {
+    return tag == FlowGramTag.FZ ? 100.0 : 256.0;
+}
+
+/// Flow base call
+struct FlowCall {
+    private {
+        short _signal_intensity;
+
+        static assert(Base.ValueSetSize <= 16 && FlowGramTag.max < 16,
+                      "implementation of FlowCall should be changed?");
+
+        ubyte _storage;  // tag in upper 4 bits, base in lower 4 bits
+
+        Base _base() @property const {
+            return Base.fromInternalCode(_storage & 0xF);
+        }
+
+        void _base(Base b) @property {
+            _storage &= 0xF0;
+            _storage |= b.internal_code;
+        }
+
+        FlowGramTag _tag() @property const {
+            return cast(FlowGramTag)(_storage >> 4);
+        }
+
+        void _tag(FlowGramTag tag) @property {
+            _storage &= 0xF;
+            _storage |= (cast(ubyte)tag << 4);
+        }
+
+        this(short signal_intensity, Base b, FlowGramTag tag) {
+            _signal_intensity = signal_intensity;
+            _storage = cast(ubyte)(b.internal_code | (tag << 4));
+        }
+    }
+
+    /// Nucleotide
+    Base base() @property const {
+        return _base;
+    }
+
+    /// Signal intensity, normalized to homopolymer lengths
+    float intensity() @property const {
+        return _signal_intensity / multiplier(_tag);
+    }
+
+    /// round(intensity * Multiplier) where Multiplier is 100.0 for FZ tag,
+    /// and 256.0 for ZM tag.
+    /// More efficient, because this is how intensities are stored in FZ/ZM tag.
+    short intensity_value() @property const {
+        return _signal_intensity;
+    }
+}
+
+/// Flow call associated with a read
+struct ReadFlowCall {
+    private {
+        FlowCall _fc;
+        ushort _offset;
+        ushort _called_len;
+        ushort _flow_index;
+
+        this(Base b, short signal_intensity, ushort offset,
+                     ushort called, ushort flow_index, FlowGramTag tag)
+        {
+            _fc = FlowCall(signal_intensity, b, tag);
+            _offset = offset;
+            _called_len = called;
+            _flow_index = flow_index;
+        }
+    }
+
+    /// Called nucleotide
+    Base base() @property const {
+        return _fc._base;
+    }
+
+    /// Set base to its complement
+    void complement() {
+        _fc._base = _fc._base.complement;
+    }
+
+    /// Called homopolymer length
+    ushort length() @property const {
+        return _called_len;
+    }
+
+    /// Zero-based position of the first nucleotide in the run,      
+    /// relative to start of the read. Takes strandness into account.
+    ushort offset() @property const {
+        return _offset;
+    }
+
+    /// Signal intensity, normalized to homopolymer lengths
+    float intensity() @property const {
+        return _fc.intensity;
+    }
+
+    /// round(intensity * Multiplier) where Multiplier is 100.0 for FZ tags,
+    /// and 256.0 for ZM tags.
+    /// More efficient, because this is how intensities are stored in FZ/ZM tag.
+    short intensity_value() @property const {
+        return _fc._signal_intensity;
+    }
+
+    /// Flow index (0-based)
+    size_t flow_index() @property const {
+        return _flow_index;
+    }
+}
+
+/// Get flow calls from signal intensities and flow order.
+auto flowCalls(short[] intensities, string flow_order, FlowGramTag tag) {
+    
+    static FlowCall flowCall(T)(T call) {
+        return FlowCall(call[0], Base(call[1]), call[2]);
+    }
+
+    return map!flowCall(zip(intensities, flow_order, repeat(tag)));
+}
+
+struct ReadFlowCallRange(S) 
+    if (!is(S == class))
+{
+    private {
+        string _flow_order = void;
+        short[] _intensities = void;
+        bool _rev = void;
+        S _sequence = void;
+
+        int _zf = void;
+        Base _current_base = void;
+        ushort _current_length = void;
+        size_t _current_flow_index;
+        ushort _current_offset;
+
+        ushort _overlap = void;
+        
+        FlowGramTag _tag = void;
+
+        bool _empty = false;
+
+        // consumes next homopolymer from the sequence,
+        // and updates _current_base, _current_flow_index, 
+        // _current_length appropriately
+        void _doSetup() {
+            if (_sequence.empty) {
+                _empty = true;
+                return;
+            }
+
+            _current_length = 1; 
+
+            // setup current base and current length
+            if (!_rev) {
+                _current_base = _sequence.front;
+                _sequence.popFront();
+                while (!_sequence.empty && _sequence.front == _current_base) {
+                    _sequence.popFront();
+                    ++_current_length;
+                }
+            } else {
+                _current_base = _sequence.back; // complement later
+                _sequence.popBack();            // because of comparison below
+                while (!_sequence.empty && _sequence.back == _current_base) {
+                    _sequence.popBack();
+                    ++_current_length;
+                }
+                _current_base = _current_base.complement;
+            }
+
+            // setup current flow index
+            for ( ; _current_flow_index < _flow_order.length; ++_current_flow_index) {
+                if (_flow_order[_current_flow_index] == _current_base) {
+                    break;
+                }
+            }
+        }
+    }
+
+    this(S seq, short[] intensities, bool reverse_strand, 
+         string flow_order, ushort first_base_overlap, int zf, FlowGramTag tag) 
+    {
+        _sequence = seq;
+        _intensities = intensities;
+        _rev = reverse_strand;
+        _flow_order = flow_order;
+        _zf = zf;
+        _overlap = first_base_overlap;
+        _tag = tag;
+
+        if (_sequence.empty) {
+            _empty = true;
+        } else {
+            _doSetup();
+        }
+    }
+
+    bool empty() @property const {
+        return _empty;
+    }
+
+    ReadFlowCall front() @property const {
+        enforce(_current_flow_index < _intensities.length,
+                "Inconsistency between FZ/ZM tag and read bases");
+
+        auto intensity = cast(ushort)(_intensities[_current_flow_index] - _overlap);
+        ReadFlowCall rfc = void;
+        rfc._fc = FlowCall(intensity, _current_base, _tag);
+        rfc._offset = _current_offset;
+        rfc._called_len = _current_length;
+        rfc._flow_index = cast(ushort)(_current_flow_index + _zf);
+        return rfc;
+    }
+
+    void popFront() {
+        _current_offset += _current_length;
+
+        ++_current_flow_index;
+        _overlap = 0; // after first base it is always zero
+
+        _doSetup();
+    }
+
+    ReadFlowCallRange!S save() @property {
+        // bitwise copy
+        // FIXME: is it safe?
+        ReadFlowCallRange!S r = this;
+        return r;
+    }
+}
+
+private ReadFlowCallRange!S readFlowCallRange(S)(S seq, short[] intensities, bool rev,
+                                                 string flow_order, ushort overlap, int zf,
+                                                 FlowGramTag tag)
+{
+    return ReadFlowCallRange!S(seq, intensities, rev, flow_order, overlap, zf, tag);
+}
+
+
+/// Get read flow calls. Takes ZF tag and strandness into account.
+///
+/// Tag name is an optional argument because it is not standard and will likely
+/// be changed in the future (there was a proposal on samtools mailing list
+/// to introduce standard FB tag).
+auto readFlowCalls(R)(R read, string flow_order, string key_sequence, string tag="ZF") {
+
+    auto zf = cast(int)read[tag];
+    auto fz_value = read["FZ"];
+    auto zm_value = read["ZM"];
+
+    enforce(!(fz_value.is_nothing && zm_value.is_nothing),
+            "Neither FZ nor ZM tag is presented in a mapped read");
+
+    auto fg_tag = fz_value.is_nothing ? FlowGramTag.ZM : FlowGramTag.FZ;
+
+    short[] flow_int = *cast(short[]*)(fg_tag == FlowGramTag.ZM ? &zm_value : &fz_value);
+
+    flow_order = flow_order[zf .. $];
+    auto intensities = flow_int[zf .. $];
+
+    // key sequence is required because its last base can overlap with first called base
+    ushort overlap = 0;
+
+    Base5 base = read.is_reverse_strand ? read.sequence.back.complement : read.sequence.front;
+    foreach_reverse (c; key_sequence) {
+        if (c != base)
+            break;
+        overlap += cast(int)(multiplier(fg_tag));
+    }
+
+    return readFlowCallRange(read.sequence, intensities, read.is_reverse_strand,
+                             flow_order, overlap, zf, fg_tag);
+}
diff --git a/bio/bam/iontorrent/flowindex.d b/bio/bam/iontorrent/flowindex.d
new file mode 100644
index 0000000..35a0b22
--- /dev/null
+++ b/bio/bam/iontorrent/flowindex.d
@@ -0,0 +1,99 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.iontorrent.flowindex;
+
+import std.range;
+
+///
+struct FlowIndex(S) 
+{
+    private {
+        S _seq;
+        string _fo;
+        size_t _index;
+    }
+
+    this(S sequence, string flow_order) {
+        _seq = sequence;
+        _fo = flow_order;
+
+        if (!_seq.empty) {
+            while (_index < _fo.length) {
+                if (_fo[_index] == _seq.front)
+                    break;
+
+                ++_index;
+            }
+        }
+    }
+
+    ///
+    bool empty() @property {
+        return _seq.empty || (_index == _fo.length);
+    }
+
+    /// Current flow index
+    size_t front() @property const {
+        return _index;
+    }
+
+    /// Move to next read base
+    void popFront() {
+        auto prev_base = _seq.front;
+        _seq.popFront();
+        if (_seq.empty) return;
+
+        if (_seq.front == prev_base) {
+            return; // keep index as is
+        }
+
+        _index += 1;
+        while (_index < _fo.length) {
+            if (_fo[_index] == _seq.front)
+                break;
+
+            _index++;
+        }
+    }
+}
+
+/// Given a sequence of bases and flow order, recover flow index,
+/// i.e. sequence of 0-based flow positions for each base.
+auto flowIndex(S)(S sequence, string flow_order) 
+{
+    return FlowIndex!S(sequence, flow_order);
+}
+
+unittest {
+    import bio.core.base;
+
+    import std.conv;
+    import std.algorithm;
+
+    auto seq = map!(c => Base5(c))("AACGTAAACCTCACT");
+    string flow_order = "ATGCATGCATGCATGCATGCATGCATGC";
+                      // 0123456789111111111122222222
+                      //           012345678901234567
+    assert(equal(flowIndex(seq, flow_order), [0, 0, 3, 6, 9, 12, 12, 12, 15, 15, 17, 19, 20, 23, 25]));
+}
diff --git a/bio/bam/md/core.d b/bio/bam/md/core.d
new file mode 100644
index 0000000..a5e5b00
--- /dev/null
+++ b/bio/bam/md/core.d
@@ -0,0 +1,4 @@
+module bio.bam.md.core;
+
+public import bio.bam.md.operation;
+public import bio.bam.md.parse;
diff --git a/bio/bam/md/operation.d b/bio/bam/md/operation.d
new file mode 100644
index 0000000..2f8eef2
--- /dev/null
+++ b/bio/bam/md/operation.d
@@ -0,0 +1,147 @@
+module bio.bam.md.operation;
+
+import bio.core.base;
+import bio.core.sequence;
+
+import std.conv;
+import std.traits;
+import std.bitmanip;
+import std.algorithm;
+
+/// MD tag operation types
+enum MdOperationType : ubyte {
+    Match,
+    Mismatch,
+    Deletion
+}
+
+/// Single MD operation.
+struct MdOperation {
+
+    private {
+        MdOperationType _type;
+        union {
+            uint _match;
+            NucleotideSequence _deletion;
+            Base16 _mismatch;
+        }
+    }
+
+    /// Operation type
+    MdOperationType type() @property const {
+        return _type;
+    }
+
+    /// ditto
+    void type(MdOperationType t) @property {
+        _type = t;
+    }
+
+    /// Convenience methods
+    bool is_deletion() @property const {
+        return _type == MdOperationType.Deletion;
+    }
+
+    /// ditto
+    bool is_match() @property const {
+        return _type == MdOperationType.Match;
+    }
+
+    /// ditto
+    bool is_mismatch() @property const {
+        return _type == MdOperationType.Mismatch;
+    }
+
+    /// The number of matched bases
+    ref uint match() @property {
+        return _match;
+    }
+
+    /// Mismatched reference base
+    Base16 mismatch() @property const {
+        return _mismatch;
+    }
+
+    /// ditto
+    void mismatch(Base16 base) @property {
+        _mismatch = base;
+    }
+
+    /// Deleted sequence
+    ref NucleotideSequence deletion() @property {
+        return _deletion;
+    }
+
+    static MdOperation createMatch(uint match) {
+        MdOperation m = void;
+        m._type = MdOperationType.Match;
+        m._match = match;
+        return m;
+    }
+
+    static MdOperation createDeletion(string deletion) {
+        MdOperation m = void;
+        m._type = MdOperationType.Deletion;
+        m._deletion = nucleotideSequence(sliceableString(deletion));
+        return m;
+    }
+
+    static MdOperation createMismatch(char mismatch) {
+        MdOperation m = void;
+        m._type = MdOperationType.Mismatch;
+        m._mismatch = Base16(mismatch);
+        return m;
+    }
+
+    static MdOperation createDeletion(NucleotideSequence seq) {
+        MdOperation m = void;
+        m._type = MdOperationType.Deletion;
+        m._deletion = seq;
+        return m;
+    }
+
+    static MdOperation createMismatch(Base16 base) {
+        MdOperation m = void;
+        m._type = MdOperationType.Mismatch;
+        m._mismatch = base;
+        return m;
+    }
+
+    bool opEquals(ref const(MdOperation) other) const {
+
+        if (type != other.type) {
+            return false;
+        }
+
+        final switch (type) {
+            case MdOperationType.Match:
+                return _match == other._match;
+            case MdOperationType.Mismatch:
+                return mismatch == other.mismatch;
+            case MdOperationType.Deletion:
+                return equal(cast()_deletion, cast()other._deletion);
+        }
+    }
+
+    string toString() const {
+        final switch (type) {
+            case MdOperationType.Match:
+                return "Match(" ~ to!string(_match) ~ ")";
+            case MdOperationType.Mismatch:
+                return "Mismatch(" ~ to!string(_mismatch) ~ ")";
+            case MdOperationType.Deletion:
+                return "Deletion(" ~ to!string(_deletion) ~ ")";
+        }
+    }
+}
+
+/// Returns MD operation with reverse-complemented data
+MdOperation reverseMdOp(MdOperation op) {
+    if (op.is_deletion)
+        return MdOperation.createDeletion(op.deletion.reverse);
+
+    if (op.is_mismatch)
+        return MdOperation.createMismatch(op.mismatch.complement);
+
+    return op;
+}
diff --git a/bio/bam/md/parse.d b/bio/bam/md/parse.d
new file mode 100644
index 0000000..0b2793b
--- /dev/null
+++ b/bio/bam/md/parse.d
@@ -0,0 +1,182 @@
+module bio.bam.md.parse;
+
+import bio.bam.md.operation;
+import std.ascii;
+import std.array;
+import std.algorithm;
+import std.functional;
+import std.range;
+import std.conv;
+import std.traits;
+
+/// Returns bidirectional range of MD operations. Zero matches are skipped.
+auto mdOperations(string md) {
+
+    static struct Result {
+        private {
+            string _md = void;
+            MdOperation _cached_front = void;
+            MdOperation _cached_back = void;
+            ubyte _rem = 255;
+        }
+
+        this(string md) {
+            _md = md;
+            if (!cacheFront()) {
+                _rem = 0;
+            } else {
+                if (!cacheBack()) {
+                    _cached_back = _cached_front;
+                    _rem = 1;
+                }
+            }
+        }
+      
+        bool empty() @property {
+            return _rem == 0;
+        }
+
+        Result save() @property {
+            Result res = void;
+            res._md = _md;
+            res._cached_front = _cached_front;
+            res._cached_back = _cached_back;
+            res._rem = _rem;
+            return res;
+        }
+
+        ref MdOperation front() @property {
+            return _cached_front;
+        }
+
+        ref MdOperation back() @property {
+            return _cached_back;
+        }
+
+        void popFront() {
+            if (_md.empty) {
+                if (_rem == 255) {
+                    _cached_front = _cached_back;
+                    _rem = 1;
+                } else {
+                    _rem = 0;
+                }
+            } else {
+                if (!cacheFront())
+                    _rem = 0;
+            }
+        }
+
+        void popBack() {
+            if (_md.empty) {
+                if (_rem == 255) {
+                    _cached_back = _cached_front;
+                    _rem = 1;
+                } else {
+                    _rem = 0;
+                }
+            } else {
+                if (!cacheBack())
+                    _rem = 0;
+            }
+        }
+
+        private bool cacheFront() {
+            if (_md.empty)
+                return false;
+
+            if (_md[0] == '^') {          // deletion, get bases
+                _md = _md[1 .. $];
+                auto len = countUntil!(not!isUpper)(_md);
+                if (len == -1) {
+                    len = _md.length;
+                }
+                _cached_front = MdOperation.createDeletion(_md[0 .. len]);
+                _md = _md[len .. $];
+            } else if (isDigit(_md[0])) { // match, get number
+                auto len = countUntil!(not!isDigit)(_md);
+                if (len == -1) {
+                    len = _md.length;
+                }
+                _cached_front = MdOperation.createMatch(to!uint(_md[0 .. len]));
+                _md = _md[len .. $];
+            } else {                     // mismatch
+                _cached_front = MdOperation.createMismatch(_md[0]);
+                _md = _md[1 .. $];
+            }
+
+            return true;
+        }
+
+        private bool cacheBack() {
+            if (_md.empty)
+                return false;
+
+            if (isDigit(_md[$ - 1])) { // match, get number
+                auto len = countUntil!(not!isDigit)(retro(_md));
+                if (len == -1) {
+                    len = _md.length;
+                }
+                _cached_back = MdOperation.createMatch(to!uint(_md[$ - len .. $]));
+                _md = _md[0 .. $ - len];
+            } else {
+                if (_md.length == 1 || isDigit(_md[$ - 2])) { // mismatch
+                    _cached_back = MdOperation.createMismatch(_md[$ - 1]);
+                    _md = _md[0 .. $ - 1];
+                } else { // deletion
+                    auto len = countUntil!"a == '^'"(retro(_md));
+                    _cached_back = MdOperation.createDeletion(_md[$ - len .. $]);
+                    _md = _md[0 .. $ - len - 1];
+                }
+            }
+
+            return true;
+        }
+    }
+
+    static bool isZeroMatch(MdOperation op) {
+        return op.type == MdOperationType.Match &&
+               op.match == 0;
+    }
+
+    return filterBidirectional!(not!isZeroMatch)(Result(md));
+}
+
+/// Alias for return type of mdOperations
+alias ReturnType!mdOperations MdOperationRange;
+
+unittest {
+
+    import std.algorithm;
+
+    import std.stdio;
+    
+    assert(equal(mdOperations("86"), 
+                [MdOperation.createMatch(86)]));
+
+    assert(equal(mdOperations("0G81"), 
+                [MdOperation.createMismatch('G'), 
+                 MdOperation.createMatch(81)]));
+
+    assert(equal(mdOperations("62^T28"), 
+                [MdOperation.createMatch(62), 
+                 MdOperation.createDeletion("T"), 
+                 MdOperation.createMatch(28)]));
+
+    assert(equal(retro(mdOperations("3C6C0A13^A4C2")),
+                 retro([MdOperation.createMatch(3),   
+                        MdOperation.createMismatch('C'), 
+                        MdOperation.createMatch(6),
+                        MdOperation.createMismatch('C'), 
+                        MdOperation.createMismatch('A'),
+                        MdOperation.createMatch(13),  
+                        MdOperation.createDeletion("A"), 
+                        MdOperation.createMatch(4),
+                        MdOperation.createMismatch('C'), 
+                        MdOperation.createMatch(2)])));
+
+    assert(equal(mdOperations("27^TTT63"),
+                [MdOperation.createMatch(27), 
+                 MdOperation.createDeletion("TTT"), 
+                 MdOperation.createMatch(63)]));
+}
diff --git a/bio/bam/md/reconstruct.d b/bio/bam/md/reconstruct.d
new file mode 100644
index 0000000..3865e30
--- /dev/null
+++ b/bio/bam/md/reconstruct.d
@@ -0,0 +1,439 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.md.reconstruct;
+
+import bio.bam.read;
+import bio.bam.md.core;
+
+import std.conv;
+import std.range;
+import std.traits;
+import std.algorithm;
+import std.range;
+
+/// Reconstruct read DNA.
+/// Returns lazy sequence.
+auto dna(T)(T read) 
+    if(isBamRead!(Unqual!T))
+{
+
+    debug {
+        /*
+        import std.stdio;
+        stderr.writeln("[dna] processing read ", read.name);
+        stderr.flush();
+        */
+    }
+
+    static struct QueryChunk(S) {
+        S sequence;
+        CigarOperation operation;
+    }
+
+    static struct QueryChunksResult(R, S) {
+        this(R ops, S seq) {
+            _seq = seq;
+            _ops = ops;
+        }
+    
+        auto front() @property {
+            auto op = _ops.front;
+            return QueryChunk!S(_seq[0 .. op.length], op);
+        }
+
+        bool empty() @property {
+            return _ops.empty;    
+        }
+
+        void popFront() {
+            _seq = _seq[_ops.front.length .. _seq.length];
+            _ops.popFront();
+        }
+
+        private R _ops;
+        private S _seq;
+    }
+
+    static auto getQueryChunksResult(R, S)(S sequence, R cigar) {
+        return QueryChunksResult!(R, S)(cigar, sequence);
+    }
+
+    // Get read sequence chunks corresponding to query-consuming operations in read.sequence
+    static auto queryChunks(ref T read) {
+        
+
+        return getQueryChunksResult(read.sequence, filter!"a.is_query_consuming"(read.cigar));
+    }
+
+    auto _read = read;
+
+    auto query_chunks = queryChunks(_read);
+
+    static struct Result(R, M) {
+        this(ref T read, R query_sequence, M md_operations) {
+            debug {
+                _initial_qseq = to!string(query_sequence);
+            }
+            _qseq = query_sequence; 
+            _md = md_operations;
+            _fetchNextMdOperation();
+        }
+
+        bool empty() @property {
+            return _empty;            
+        }
+
+        /*
+        MD operations -> match(N)    ? consume N characters from query
+                         mismatch(C) ? consume a character from query and replace it with C
+                         deletion(S) ? consume S from MD
+        */
+
+        char front() @property {
+            final switch (_cur_md_op.type) {
+                case MdOperationType.Match:
+                    return cast(char)_qseq.front;
+                case MdOperationType.Mismatch:
+                    return _cur_md_op.mismatch;
+                case MdOperationType.Deletion:
+                    return cast(char)_cur_md_op.deletion.front;
+            }
+        }
+
+        private void _fetchNextMdOperation() {
+            if (_md.empty) {
+                _empty = true;
+                return;
+            }
+            _cur_md_op = _md.front;
+            _md.popFront();
+        }
+
+        private bool _qseqIsSuddenlyEmpty() {
+            if (!_qseq.empty) {
+                return false;
+            }
+
+            /* MD and CIGAR don't match */
+            debug {
+                import std.stdio;
+                stderr.writeln("Current MD operation: ", _cur_md_op);
+                stderr.writeln("Query sequence: ", _initial_qseq);
+            }
+
+            return true;
+        }
+
+        void popFront() {
+            final switch (_cur_md_op.type) {
+                case MdOperationType.Mismatch:
+                    if (_qseqIsSuddenlyEmpty())
+                        break;
+                    _qseq.popFront();
+                    _fetchNextMdOperation();
+                    break;
+                case MdOperationType.Match:
+                    if (_qseqIsSuddenlyEmpty())
+                        break;
+                    --_cur_md_op.match;
+                    _qseq.popFront();
+                    if (_cur_md_op.match == 0) {
+                        _fetchNextMdOperation();
+                    }
+                    break;
+                case MdOperationType.Deletion:
+                    _cur_md_op.deletion.popFront();
+                    if (_cur_md_op.deletion.empty) {
+                        _fetchNextMdOperation();
+                    }
+                    break;
+            }
+        }
+
+        private {
+            debug {
+                string _initial_qseq;
+            }
+            R _qseq;
+            M _md;
+      
+            bool _empty;
+            MdOperation _cur_md_op;
+        }
+    }
+  
+    auto md = _read["MD"];
+    string md_str;
+    if (!md.is_nothing) {
+        md_str = cast(string)_read["MD"];
+    }
+    
+    static auto getResult(R, M)(ref T read, R query, M md_ops) {
+        return Result!(R, M)(read, query, md_ops);
+    }
+
+    auto result =  getResult(_read, 
+                             joiner(map!"a.sequence"(filter!"a.operation.is_reference_consuming"(query_chunks))),
+                             mdOperations(md_str));
+
+    debug {
+        import std.stdio;
+        if (result.empty) {
+            stderr.writeln("[dna] empty DNA!");
+            stderr.writeln("      read name: ", read.name);
+            stderr.writeln("      read sequence: ", read.sequence);
+            stderr.writeln("      read CIGAR: ", read.cigarString());
+            stderr.writeln("      read MD tag: ", read["MD"]);
+            stderr.flush();
+        }
+    }
+
+    return result;
+}
+
+unittest {
+
+    import std.stdio;
+    writeln("Testing reconstruction of reference from MD tags and CIGAR");
+
+    // Test reference reconstruction from MD and CIGAR.
+    // (Tests are taken from http://davetang.org/muse/2011/01/28/perl-and-sam/)
+
+    BamRead read;
+
+    read = BamRead("r1",
+                   "CGATACGGGGACATCCGGCCTGCTCCTTCTCACATG",
+                   [CigarOperation(36, 'M')]);
+    read["MD"] = "1A0C0C0C1T0C0T27";
+
+    assert(equal(dna(read), "CACCCCTCTGACATCCGGCCTGCTCCTTCTCACATG"));
+
+    read = BamRead("r2",
+                   "GAGACGGGGTGACATCCGGCCTGCTCCTTCTCACAT",
+                   [CigarOperation(6, 'M'),
+                    CigarOperation(1, 'I'),
+                    CigarOperation(29, 'M')]);
+    read["MD"] = "0C1C0C1C0T0C27";
+
+    assert(equal(dna(read), "CACCCCTCTGACATCCGGCCTGCTCCTTCTCACAT"));
+
+    read = BamRead("r3",
+                   "AGTGATGGGGGGGTTCCAGGTGGAGACGAGGACTCC",
+                   [CigarOperation(9, 'M'),
+                    CigarOperation(9, 'D'),
+                    CigarOperation(27, 'M')]);
+    read["MD"] = "2G0A5^ATGATGTCA27";
+    assert(equal(dna(read), "AGGAATGGGATGATGTCAGGGGTTCCAGGTGGAGACGAGGACTCC"));
+
+    read = BamRead("r4",
+                   "AGTGATGGGAGGATGTCTCGTCTGTGAGTTACAGCA",
+                   [CigarOperation(2, 'M'),
+                    CigarOperation(1, 'I'),
+                    CigarOperation(7, 'M'),
+                    CigarOperation(6, 'D'),
+                    CigarOperation(26, 'M')]);
+    read["MD"] = "3C3T1^GCTCAG26";
+    assert(equal(dna(read), "AGGCTGGTAGCTCAGGGATGTCTCGTCTGTGAGTTACAGCA"));
+
+}
+
+/**
+ * Returns lazy sequence of reference bases. If some bases can't be determined from reads,
+ * they are replaced with 'N'.
+ *
+ * Reads must be a range of reads aligned to the same reference sequence, sorted by leftmost
+ * coordinate.
+ * Returned reference bases start from the leftmost position of the first read,
+ * and end at the rightmost position of all the reads.
+ */
+auto dna(R)(R reads)
+    if (isInputRange!R && isBamRead!(Unqual!(ElementType!R)))
+{
+    static struct Result(F) {
+        alias Unqual!(ElementType!F) Read;
+
+        this(F reads) {
+            _reads = reads;
+            if (_reads.empty) {
+                _empty = true;
+                return;
+            }
+            auto read = _reads.front;
+            _chunk = dna(read);
+            _reference_pos = read.position;
+            _reads.popFront();
+        }
+
+        @property bool empty() {
+            return _empty;
+        }
+
+        @property char front() {
+            if (_bases_to_skip > 0) {
+                return 'N';
+            }
+            return _chunk.front;
+        }
+
+        private void setSkipMode(ref Read read) {
+            _reads.popFront();
+            _chunk = dna(read);
+            _bases_to_skip = read.position - _reference_pos;
+        }
+
+        void popFront() {
+            _reference_pos += 1;
+
+            if (_bases_to_skip > 0) {
+                --_bases_to_skip;
+                return;
+            }
+
+            _chunk.popFront();
+
+            /*
+             * If current chunk is empty, get the next one.
+             *                                                                  
+             * Here's the reference:                                            
+             * .........................*.......................................
+             *                          _reference_pos (we are here)            
+             * Last chunk ended just now:                                       
+             *              [..........]                                        
+             * Go through subsequent reads while their leftmost position is     
+             * less or equal to _reference_pos, select the one which covers     
+             * more bases to the right of _reference_pos.                       
+             *               [...............]                                  
+             *                [....]                                            
+             *                  [..........]                                    
+             *                        [.........]  <- this one is the best      
+             */
+            if (_chunk.empty) {
+                if (_reads.empty) {
+                    _empty = true;
+                    return;
+                }
+                auto next_read = _reads.front;
+                if (next_read.position > _reference_pos) {
+                    setSkipMode(next_read);
+                    return;
+                }
+                auto best_read = next_read;
+                // read covers half-open [position .. position + basesCovered) interval
+                auto best_end_pos = best_read.basesCovered() + best_read.position;
+                bool found_good = best_end_pos > _reference_pos;
+                while (true) {
+                    if (_reads.empty) {
+                        if (!found_good) {
+                            _empty = true;
+                            return;
+                        }
+                        break;
+                    }
+
+                    auto read = _reads.front;
+
+                    if (read.position > _reference_pos) {
+                        if (!found_good) {
+                            setSkipMode(read);
+                            return;
+                        }
+                        break;
+                    }
+
+                    auto end_pos = read.basesCovered() + read.position;
+                    if (end_pos > _reference_pos) {
+                        found_good = true;
+                        if (end_pos > best_end_pos) {
+                            best_end_pos = end_pos;
+                            best_read = read;
+                        }
+                    }
+                    _reads.popFront();
+                }
+
+                // If we're here, we've found a good read.
+                _chunk = dna(best_read);
+                debug {
+                    /*
+                    import std.stdio;
+                    writeln("_reference_pos = ", _reference_pos, 
+                            "; best_read.position = ", best_read.position,
+                            "; _chunk length = ", best_read.basesCovered());
+                            */
+                }
+                // However, we need to strip some bases from the left.
+                popFrontN(_chunk, _reference_pos - best_read.position);
+            }
+        }
+
+        private size_t _bases_to_skip;
+        private size_t _reference_pos;
+        private ReturnType!(dna!Read) _chunk;
+        private bool _empty = false;
+        private F _reads;
+    }
+
+    auto nonempty = filter!"a.basesCovered() > 0"(reads);
+    return Result!(typeof(nonempty))(nonempty);
+}
+
+unittest {
+
+    // reads are taken from HG00110.chrom20.ILLUMINA.bwa.GBR.exome.20111114.bam 
+
+    auto r1 = BamRead("r1",
+                      "AGGTTTTGTGAGTGGGACAGTTGCAGCAAAACACAACCATAGGTGCCCATCCACCAAGGCAGGCTCTCCATCTTGCTCAGAGTGGCTCTA",
+                      [CigarOperation(89, 'M'),
+                       CigarOperation(1, 'S')]);
+    r1.position = 60246;
+    r1["MD"] = "89";
+
+    auto r2 = BamRead("r2",
+                      "TGTGAGTGGGACAGTTGCAGCAAAACACAACCATAGGTGCCCATCCACCAAGGCAGGCTCTCCATCTTGCTCAGAGTGGCTCCAGCCCTT",
+                      [CigarOperation(83, 'M'),
+                       CigarOperation(7, 'S')]);
+    r2.position = 60252;
+    r2["MD"] = "82T0";
+    
+    auto r3 = BamRead("r3",
+                      "CATAGGTGCCCATCCACCAAGGCAGGCTCTCCATCTTGCTCAGAGTGGCTCTAGCCCTTGCTGACTGCTGGGCAGGGAGAGAGCAGAGCT",
+                      [CigarOperation(90, 'M')]);
+    r3.position = 60283;
+    r3["MD"] = "90";
+
+    auto r4 = BamRead("r4",
+                      "CCCTTGCTGACTGCTGGGCAGGGAGAGAGCAGAGCTAACTTCCTCATGGGACCTGGGTGTGTCTGATCTGTGCACACCACTATCCAACCG",
+                      [CigarOperation(90, 'M')]);
+    r4.position = 60337;
+    r4["MD"] = "90";
+
+    auto r5 = BamRead("r5",
+                      "GAGGCTCCACCCTGGCCACTCTTGTGTGCACACAGCACAGCCTCTACTGCTACACCTGAGTACTTTGCCAGTGGCCTGGAAGCACTTTGT",
+                      [CigarOperation(90, 'M')]);
+    r5.position = 60432;
+    r5["MD"] = "90";
+
+    auto reads = [r1, r2, r3, r4, r5];
+    assert(equal(dna(reads), "AGGTTTTGTGAGTGGGACAGTTGCAGCAAAACACAACCATAGGTGCCCATCCACCAAGGCAGGCTCTCCATCTTGCTCAGAGTGGCTCTAGCCCTTGCTGACTGCTGGGCAGGGAGAGAGCAGAGCTAACTTCCTCATGGGACCTGGGTGTGTCTGATCTGTGCACACCACTATCCAACCGNNNNNGAGGCTCCACCCTGGCCACTCTTGTGTGCACACAGCACAGCCTCTACTGCTACACCTGAGTACTTTGCCAGTGGCCTGGAAGCACTTTGT"));
+}
diff --git a/bio/bam/multireader.d b/bio/bam/multireader.d
new file mode 100644
index 0000000..2a9705f
--- /dev/null
+++ b/bio/bam/multireader.d
@@ -0,0 +1,429 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2016    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.multireader;
+
+import bio.sam.header;
+import bio.bam.reader;
+import bio.bam.read;
+import bio.bam.referenceinfo;
+import bio.bam.utils.samheadermerger;
+
+import std.algorithm;
+import std.range;
+import std.conv;
+import std.parallelism;
+import std.array;
+import std.numeric : normalize, dotProduct;
+import std.exception;
+import std.typecons;
+import std.file : getSize;
+
+alias size_t FileId;
+
+/// Read from one of multiple BAM files
+struct MultiBamRead(R=BamRead) {
+    R read;
+    alias read this;
+
+    /// from which file it came
+    FileId file_id;
+
+    ///
+    MultiBamRead dup() @property const {
+        return MultiBamRead(read.dup, file_id);
+    }
+}
+
+// ((MultiBamRead, SamHeaderMerger), (MultiBamRead, SamHeaderMerger)) -> bool
+bool compare(T)(auto ref T r1, auto ref T r2) {
+    assert(r1[1] == r2[1]);
+
+    SortingOrder sorting_order;
+    if (r1[1] is null)
+        sorting_order = r1[0].read.reader.header.sorting_order;
+    else
+        sorting_order = r1[1].merged_header.sorting_order;
+
+    if (sorting_order == SortingOrder.coordinate)
+        return compareCoordinates(r1[0], r2[0]);
+    else if (sorting_order == SortingOrder.queryname)
+        return compareReadNames(r1[0], r2[0]);
+    else
+        assert(0);
+}
+
+// ([BamRead/BamReadBlock], FileId) -> [MultiBamRead]
+auto multiBamReads(R)(R reads, FileId index) {
+  static if (is(ElementType!R == BamRead))
+    return reads.zip(repeat(index)).map!(x => MultiBamRead!BamRead(x[0], x[1]));
+  else
+    return reads.zip(repeat(index)).map!(x => MultiBamRead!BamRead(x[0].read, x[1]));
+}
+
+// (BamReader, SamHeaderMerger, FileId) -> [(MultiBamRead, SamHeaderMerger, FileId)]
+auto readRange(BamReader reader, SamHeaderMerger merger, FileId index) {
+    return zip(reader.reads.multiBamReads(index), repeat(merger), repeat(index));
+}
+
+// (BamReader, SamHeaderMerger, FileId, int, uint, uint) -> 
+//                                    [(MultiBamRead, SamHeaderMerger, FileId)]
+auto readRange(BamReader reader, SamHeaderMerger merger, FileId index,
+               int ref_id, uint start, uint end) 
+{
+    int old_ref_id = ref_id;
+    if (merger !is null)
+        old_ref_id = cast(int)merger.ref_id_reverse_map[index][ref_id];
+    auto reads = reader.reference(old_ref_id)[start .. end];
+    return zip(reads.multiBamReads(index), repeat(merger), repeat(index));
+}
+
+// (BamReader, SamHeaderMerger, FileId, [BamRegion]) ->
+//                                    [(MultiBamRead, SamHeaderMerger, FileId)]
+auto readRange(BamReader reader, SamHeaderMerger merger, FileId index,
+               BamRegion[] regions) {
+    if (merger is null) // single reader => no fiddling with ref_id
+        return zip(reader.getReadsOverlapping(regions).multiBamReads(index),
+                   repeat(merger), repeat(index));
+
+    auto old_regions = merger is null ? regions : regions.dup;
+    foreach (j; 0 .. regions.length) {
+        auto new_ref_id = regions[j].ref_id;
+        if (new_ref_id != -1) {
+            auto old_ref_id = cast(uint)merger.ref_id_reverse_map[index][new_ref_id];
+            old_regions[j].ref_id = old_ref_id;
+        }
+    }
+    return zip(reader.getReadsOverlapping(old_regions).multiBamReads(index),
+               repeat(merger), repeat(index));
+}
+
+// ([BamReader], SamHeaderMerger) -> [[(MultiBamRead, SamHeaderMerger, FileId)]]
+auto readRanges(BamReader[] readers, SamHeaderMerger merger) {
+    return readers.zip(repeat(merger), iota(readers.length))
+                  .map!(t => readRange(t[0], t[1], t[2]))();
+}
+
+auto readRangeWithProgress
+(BamReader reader, SamHeaderMerger merger, FileId index,
+ void delegate() f, void delegate(lazy float) u) {
+    return zip(reader.readsWithProgress(u, f).multiBamReads(index),
+               repeat(merger), repeat(index));
+}
+
+auto readRangesWithProgress
+(BamReader[] readers, SamHeaderMerger merger,
+ void delegate() f, void delegate(lazy float) delegate(size_t) u)
+{
+    return readers.zip(repeat(merger), iota(readers.length))
+                  .map!(t => readRangeWithProgress(t[0], t[1], t[2], f, u(t[2])))();
+}
+
+// ([BamReader], SamHeaderMerger, int, uint, uint) -> 
+//                                    [[(MultiBamRead, SamHeaderMerger, FileId)]]
+auto readRanges(BamReader[] readers, SamHeaderMerger merger, 
+                int ref_id, uint start, uint end) 
+{
+    return readers.zip(repeat(merger), iota(readers.length), 
+                       repeat(ref_id), repeat(start), repeat(end))
+                  .map!(t => readRange(t[0], t[1], t[2], t[3], t[4], t[5]))();
+}
+
+// ([BamReader], SamHeaderMerger, [BamRegion]) ->
+//        [[(MultiBamRead, SamHeaderMerger, FileId)])
+auto readRanges(BamReader[] readers, SamHeaderMerger merger, BamRegion[] regions)
+{
+    return readers.zip(repeat(merger), iota(readers.length),
+                       repeat(regions))
+        .map!(t => readRange(t[0], t[1], t[2], t[3]))();
+}
+
+// tweaks RG and PG tags, and reference sequence ID
+// [[(BamRead, SamHeaderMerger, size_t)]] -> [[MultiBamRead]]
+auto adjustTags(R)(R reads_with_aux_info, TaskPool pool, size_t bufsize) 
+    if (isInputRange!R) 
+{
+  alias R2 = typeof(pool.map!adjustTagsInRange(reads_with_aux_info.front, 1));
+  R2[] result;
+  foreach (read_range; reads_with_aux_info)
+    result ~= pool.map!adjustTagsInRange(read_range, bufsize);
+  return result;
+}
+
+// (BamRead, SamHeaderMerger, size_t) -> (MultiBamRead, SamHeaderMerger)
+auto adjustTagsInRange(R)(R read_with_aux_info) if (!isInputRange!R) {
+    auto read = read_with_aux_info[0];
+    auto merger = read_with_aux_info[1];
+    auto file_id = read_with_aux_info[2];
+
+    if (merger is null) {
+        assert(file_id == 0);
+        return tuple(read, merger);
+    }
+
+    with (merger) {
+        assert(file_id < ref_id_map.length);
+
+        auto old_ref_id = read.ref_id;
+        if (old_ref_id != -1 && old_ref_id in ref_id_map[file_id]) {
+            auto new_ref_id = to!int(ref_id_map[file_id][old_ref_id]);
+            if (new_ref_id != old_ref_id)
+                read.ref_id = new_ref_id;
+        } 
+
+        auto program = read["PG"];
+        if (!program.is_nothing) {
+            auto pg_str = *(cast(string*)(&program));
+            if (pg_str in program_id_map[file_id]) {
+                auto new_pg = program_id_map[file_id][pg_str];
+                if (new_pg != pg_str)
+                    read["PG"] = new_pg;
+            }
+        }
+
+        auto read_group = read["RG"];
+        if (!read_group.is_nothing) {
+            auto rg_str = *(cast(string*)(&read_group));
+            if (rg_str in readgroup_id_map[file_id]) {
+                auto new_rg = readgroup_id_map[file_id][rg_str];
+                if (new_rg != rg_str)
+                    read["RG"] = new_rg;
+            }
+        }
+    }
+    return tuple(read, merger);
+}
+
+///
+class MultiBamReader {
+  
+    ///
+    this(BamReader[] readers) {
+        _readers = readers;
+
+        enforce(_readers.length >= 1, "MultiBamReader requires at least one BAM file");
+
+        if (_readers.length > 1) {
+            _merger = new SamHeaderMerger(readers.map!(r => r.header)().array());
+            enforce(_merger.strategy == SamHeaderMerger.Strategy.simple, "NYI"); // TODO
+
+            auto n_references = _merger.merged_header.sequences.length;
+            _reference_sequences = new ReferenceSequenceInfo[n_references];
+            size_t i;
+            foreach (line; _merger.merged_header.sequences) {
+                _reference_sequences[i] = ReferenceSequenceInfo(line.name, line.length);
+                _reference_sequence_dict[line.name] = i++;
+            }
+        }
+
+        // TODO: maybe try to guess optimal size, based on the number of files?
+        setBufferSize(1_048_576);
+    }
+
+    ///
+    this(string[] filenames) {
+        this(filenames.map!(fn => new BamReader(fn))().array());
+    }
+
+    ///
+    this(string[] filenames, std.parallelism.TaskPool task_pool = taskPool) {
+        this(filenames.zip(repeat(task_pool))
+                      .map!(fn => new BamReader(fn[0], fn[1]))().array());
+    }
+
+    ///
+    BamReader[] readers() @property {
+        return _readers;
+    }
+
+    ///
+    SamHeader header() @property {
+        return _readers.length > 1 ? _merger.merged_header : _readers[0].header;
+    }
+
+    /// Input range of MultiBamRead instances
+    auto reads() @property {
+        return readRanges(_readers, _merger).adjustTags(task_pool, _adj_bufsz)
+                                            .nWayUnion!compare().map!"a[0]"();
+    }
+
+    ///
+    auto readsWithProgress(void delegate(lazy float p) progressBarFunc,
+                           void delegate() finishFunc=null)
+    {
+        size_t _running = _readers.length;
+        void innerFinishFunc() {
+            if (--_running == 0 && finishFunc)
+                finishFunc();
+        }
+
+        auto _progress = new float[_readers.length];
+        _progress[] = 0.0;
+        auto _weights = _readers.map!(r => r.filename.getSize.to!float).array;
+        normalize(_weights);
+
+        auto innerProgressBarFunc(size_t idx) {
+            return (lazy float p) {
+                _progress[idx] = p;
+                progressBarFunc(dotProduct(_progress, _weights));
+            };
+        }
+
+        return readRangesWithProgress(_readers, _merger,
+                                      &innerFinishFunc, &innerProgressBarFunc)
+                         .adjustTags(task_pool, _adj_bufsz)
+                         .nWayUnion!compare().map!"a[0]"();
+    }
+
+    ///
+    const(ReferenceSequenceInfo)[] reference_sequences() @property const nothrow {
+        if (_readers.length > 1)
+            return _reference_sequences;
+        else
+            return _readers[0].reference_sequences;
+    }
+
+    /**
+      Check if reference named $(I ref_name) is presented in BAM header.
+     */
+    bool hasReference(string ref_name) {
+        if (_readers.length > 1)
+            return null != (ref_name in _reference_sequence_dict);
+        else
+            return _readers[0].hasReference(ref_name);
+    }
+
+    /**
+       Check if all BAM files have indices.
+    */
+    bool has_index() @property {
+        return readers.all!(b => b.has_index);
+    }
+
+    /**
+      Returns reference sequence with id $(I ref_id).
+     */
+    MultiBamReference reference(int ref_id) {
+        enforce(ref_id >= 0, "Invalid reference index");
+        enforce(ref_id < reference_sequences.length, "Invalid reference index");
+        return MultiBamReference(_readers, _merger, task_pool, _adj_bufsz,
+                                 reference_sequences[ref_id], ref_id);
+    }
+
+    /**
+      Returns reference sequence named $(I ref_name).
+     */
+    MultiBamReference opIndex(string ref_name) {
+        enforce(hasReference(ref_name),
+                "Reference with name " ~ ref_name ~ " does not exist");
+        if (_readers.length > 1) {
+            auto ref_id = cast(int)_reference_sequence_dict[ref_name];
+            return reference(ref_id);
+        } else {
+            auto ref_id = _readers[0][ref_name].id;
+            return reference(ref_id);
+        }
+    }
+
+    /// Sets buffer size for all readers (default is 1MB)
+    void setBufferSize(size_t bytes) {
+        foreach (reader; _readers)
+            reader.setBufferSize(bytes);
+    }
+
+    /**
+       Requires coordinate sorting and presence of indices.
+    */
+    auto getReadsOverlapping(BamRegion[] regions) {
+        enforce(header.sorting_order == SortingOrder.coordinate,
+                "Not all files are coordinate-sorted");
+        enforce(has_index, "Not all files are indexed");
+
+        auto ranges = readRanges(_readers, _merger, regions);
+        return ranges.adjustTags(_task_pool, _adj_bufsz)
+                     .nWayUnion!compare().map!"a[0]"();
+    }
+
+    private {
+        BamReader[] _readers;
+        SamHeaderMerger _merger;
+        ReferenceSequenceInfo[] _reference_sequences;
+        size_t[string] _reference_sequence_dict;
+        TaskPool _task_pool;
+        TaskPool task_pool() @property {
+            if (_task_pool is null)
+                _task_pool = taskPool;
+            return _task_pool;
+        }
+
+        size_t _adj_bufsz = 512;
+    }
+}
+
+///
+struct MultiBamReference {
+    private {
+        BamReader[] _readers;
+        SamHeaderMerger _merger;
+        int _ref_id;
+        ReferenceSequenceInfo _info;
+        TaskPool _pool;
+        size_t _adj_bufsz;
+    }
+
+    this(BamReader[] readers, SamHeaderMerger merger,
+         TaskPool task_pool, size_t adj_bufsize,
+         ReferenceSequenceInfo info, int ref_id)
+    {
+        _readers = readers;
+        _merger = merger;
+        _pool = task_pool;
+        _adj_bufsz = adj_bufsize;
+        _ref_id = ref_id;
+        _info = info;
+    }
+
+    ///
+    string name() @property const { return _info.name; }
+
+    ///
+    int length() @property const { return _info.length; }
+
+    ///
+    int id() @property const { return _ref_id; }
+
+    /// Get alignments overlapping [start, end) region.
+    /// $(BR)
+    /// Coordinates are 0-based.
+    auto opSlice(uint start, uint end) {
+        enforce(start < end, "start must be less than end");
+        auto ranges = readRanges(_readers, _merger, id, start, end);
+        return ranges.adjustTags(_pool, _adj_bufsz)
+                     .nWayUnion!compare().map!"a[0]"();
+    }
+
+    ///
+    auto opSlice() {
+        return opSlice(0, length);
+    }
+}
diff --git a/bio/bam/pileup.d b/bio/bam/pileup.d
new file mode 100644
index 0000000..576a16b
--- /dev/null
+++ b/bio/bam/pileup.d
@@ -0,0 +1,1008 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2016    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/// $(P This module is used for iterating over columns of alignment.)
+/// $(P The function makePileup is called on
+/// a range of coordinate-sorted reads mapped to the same reference.
+/// It returns an input range of columns.)
+/// $(P This returned range can then be iterated with $(D foreach).
+/// First column is located at the same position on the reference,
+/// as the first base of the first read.
+/// $(BR)
+/// Each $(D popFront) operation advances current position on the
+/// reference. The default behaviour is to exclude sites with zero coverage
+/// from the iteration.)
+/// $(P Each column keeps set of reads that overlap corresponding position
+/// on the reference.
+/// If reads contain MD tags, and makePileup was asked
+/// to use them, reference base at the column is also available.)
+/// $(BR)
+/// Each read preserves all standard read properties
+/// but also keeps column-related information, namely
+/// <ul>
+///     $(LI number of bases consumed from the read sequence so far)
+///     $(LI current CIGAR operation and offset in it)
+///     $(LI all CIGAR operations before and after current one)</ul>
+/// $(BR)
+/// It is clear from the above that current CIGAR operation cannot be an insertion.
+/// The following are suggested ways to check for them:
+/// <ul>
+///     $(LI $(D cigar_after.length > 0 &&
+///              cigar_operation_offset == cigar_operation.length - 1 &&
+///              cigar_after[0].type == 'I'))
+///     $(LI $(D cigar_before.length > 0 &&
+///              cigar_operation_offset == 0 &&
+///              cigar_before[$ - 1].type == 'I'))</ul>
+/// $(BR)
+/// Example:
+/// ---------------------------------------------------------
+/// import bio.bam.reader, bio.bam.pileup, std.stdio, std.algorithm : count;
+/// void main() {
+///     auto bam = new BamReader("file.bam");       // assume single reference and MD tags
+///     auto pileup = bam.reads().makePileup(useMD);
+///     foreach (column; pileup) {
+///         auto matches = column.bases.count(column.reference_base);
+///         if (matches < column.coverage * 2 / 3)
+///             writeln(column.position);           // print positions of possible mismatches
+///     }
+/// }
+/// ---------------------------------------------------------
+module bio.bam.pileup;
+
+import bio.bam.read;
+import bio.bam.md.reconstruct;
+import bio.bam.splitter;
+
+import std.algorithm;
+import std.range;
+import std.random;
+import std.traits;
+import std.conv;
+import std.array;
+import std.exception;
+
+/// Represents a read aligned to a column
+struct PileupRead(Read=bio.bam.read.EagerBamRead) {
+
+    Read read; ///
+    alias read this;
+    private alias read _read;
+
+    /// Current CIGAR operation. One of 'M', '=', 'X', 'D', 'N.
+    /// Use $(D cigar_after)/$(D cigar_before) to determine insertions.
+    bio.bam.read.CigarOperation cigar_operation() @property const {
+        return _cur_op;
+    }
+
+    /// Number of bases consumed from the current CIGAR operation.
+    uint cigar_operation_offset() @property const {
+        return _cur_op_offset;
+    }
+
+    /// CIGAR operations after the current operation
+    const(bio.bam.read.CigarOperation)[] cigar_after() @property const {
+        return _read.cigar[_cur_op_index + 1 .. $];
+    }
+
+    /// CIGAR operations before the current operation
+    const(bio.bam.read.CigarOperation)[] cigar_before() @property const {
+        return _read.cigar[0 .. _cur_op_index];
+    }
+
+    /// If current CIGAR operation is one of 'M', '=', or 'X', returns read base
+    /// at the current column. Otherwise, returns '-'.
+    char current_base() @property const {
+        assert(_query_offset <= _read.sequence_length);
+        if (_cur_op.is_query_consuming && _cur_op.is_reference_consuming) {
+            return _read.sequence[_query_offset];
+        } else {
+            return '-';
+        }
+    }
+
+    /// If current CIGAR operation is one of 'M', '=', or 'X', returns
+    /// Phred-scaled read base quality at the current column.
+    /// Otherwise, returns 255.
+    ubyte current_base_quality() @property const {
+        assert(_query_offset <= _read.sequence_length);
+        if (_cur_op.is_query_consuming && _cur_op.is_reference_consuming) {
+            return _read.base_qualities[_query_offset];
+        } else {
+            return 255;
+        }
+    }
+
+    /// Returns number of bases consumed from the read sequence.
+    /// $(BR)
+    /// More concisely,
+    /// $(UL
+    ///     $(LI if current CIGAR operation is 'M', '=', or 'X',
+    ///       index of current read base in the read sequence)
+    ///     $(LI if current CIGAR operation is 'D' or 'N',
+    ///       index of read base after the deletion)
+    /// )
+    /// (in both cases indices are 0-based)
+    int query_offset() @property const {
+        assert(_query_offset <= _read.sequence_length);
+        return _query_offset;
+    }
+
+    /// Returns duplicate
+    PileupRead dup() @property {
+        PileupRead r = void;
+        r._read = _read; // logically const, thus no .dup here
+        r._cur_op_index = _cur_op_index;
+        r._cur_op = _cur_op;
+        r._cur_op_offset = _cur_op_offset;
+        r._query_offset = _query_offset;
+        return r;
+    }
+
+    private {
+        // index of current CIGAR operation in _read.cigar
+        uint _cur_op_index;
+
+        // current CIGAR operation
+        CigarOperation _cur_op;
+
+        // number of bases consumed from the current CIGAR operation
+        uint _cur_op_offset;
+
+        // number of bases consumed from the read sequence
+        uint _query_offset;
+
+        this(Read read) {
+            _read = read;
+
+            // find first M/=/X/D operation
+            auto cigar = _read.cigar;
+            for (_cur_op_index = 0; _cur_op_index < cigar.length; ++_cur_op_index) {
+                _cur_op = cigar[_cur_op_index];
+                if (_cur_op.is_reference_consuming) {
+                    if (_cur_op.type != 'N') {
+                        break;
+                    }
+                } else if (_cur_op.is_query_consuming) {
+                    _query_offset += _cur_op.length; // skip S and I operations
+                }
+            }
+
+            assertCigarIndexIsValid();
+        }
+
+        // move one base to the right on the reference
+        void incrementPosition() {
+            ++_cur_op_offset;
+
+            // if current CIGAR operation is D or N, query offset is untouched
+            if (_cur_op.is_query_consuming) {
+                ++_query_offset;
+            }
+
+            if (_cur_op_offset >= _cur_op.length) {
+
+                _cur_op_offset = 0; // reset CIGAR operation offset
+
+                auto cigar = _read.cigar;
+                // get next reference-consuming CIGAR operation (M/=/X/D/N)
+                for (++_cur_op_index; _cur_op_index < cigar.length; ++_cur_op_index) {
+                    _cur_op = cigar[_cur_op_index];
+                    if (_cur_op.is_reference_consuming) {
+                        break;
+                    }
+
+                    if (_cur_op.is_query_consuming) {
+                        _query_offset += _cur_op.length;
+                    }
+                }
+
+                assertCigarIndexIsValid();
+            }
+        }
+
+        void assertCigarIndexIsValid() {
+            assert(_cur_op_index < _read.cigar.length, "Invalid read " ~ _read.name
+                                                       ~ " - CIGAR " ~ _read.cigarString()
+                                                       ~ ", sequence " ~ to!string(_read.sequence));
+        }
+    }
+}
+
+static assert(isBamRead!(PileupRead!BamRead));
+//static assert(isBamRead!(PileupRead!(EagerBamRead!BamRead)));
+
+/// Represents a single pileup column
+struct PileupColumn(R) {
+    private {
+        ulong _position;
+        int _ref_id = -1;
+        R _reads;
+        size_t _n_starting_here;
+    }
+
+    /// Reference base. 'N' if not available.
+    char reference_base() @property const {
+        return _reference_base;
+    }
+
+    private char _reference_base = 'N';
+
+    /// Coverage at this position (equals to number of reads)
+    size_t coverage() const @property {
+        return _reads.length;
+    }
+
+    /// Returns reference ID (-1 if unmapped)
+    int ref_id() const @property {
+        return _ref_id;
+    }
+
+    /// Position on the reference
+    ulong position() const @property {
+        return _position;
+    }
+
+    /// Reads overlapping the position, sorted by coordinate
+    auto reads() @property {
+        return assumeSorted!compareCoordinates(_reads[]);
+    }
+
+    /// Reads that have leftmost mapped position at this column
+    auto reads_starting_here() @property {
+        return _reads[$ - _n_starting_here .. $];
+    }
+
+    /// Shortcut for map!(read => read.current_base)(reads)
+    auto bases() @property {
+        return map!"a.current_base"(reads);
+    }
+
+    /// Shortcut for map!(read => read.current_base_quality)(reads)
+    auto base_qualities() @property {
+        return map!"a.current_base_quality"(reads);
+    }
+
+    /// Shortcut for map!(read => read.mapping_quality)(reads)
+    auto read_qualities() @property {
+        return map!"a.mapping_quality"(reads);
+    }
+}
+
+/**
+ * The class for iterating reference bases together with reads overlapping them.
+ */
+class PileupRange(R, alias TColumn=PileupColumn) {
+    alias Unqual!(ElementType!R) Raw;
+    alias EagerBamRead!Raw Eager;
+    alias PileupRead!Eager Read;
+    alias Read[] ReadArray;
+    alias TColumn!ReadArray Column;
+
+    private {
+        R _reads;
+        Column _column;
+        Appender!ReadArray _read_buf;
+        bool _skip_zero_coverage;
+    }
+
+    protected {
+        // This is extracted into a method not only to reduce duplication
+        // (not so much of it), but to allow to override it!
+        // For that reason it is not marked as final. Overhead of virtual
+        // function is negligible compared to computations in EagerBamRead
+        // constructor together with inserting new element into appender.
+        void add(ref Raw read) {
+            _read_buf.put(PileupRead!Eager(Eager(read)));
+        }
+    }
+
+    /**
+     * Create new pileup iterator from a range of reads.
+     */
+    this(R reads, bool skip_zero_coverage) {
+        _reads = reads;
+        _read_buf = appender!ReadArray();
+        _skip_zero_coverage = skip_zero_coverage;
+
+        if (!_reads.empty) {
+            initNewReference(); // C++ programmers, don't worry! Virtual tables in D
+                                // are populated before constructor body is executed.
+        }
+    }
+
+    /// Returns PileupColumn struct corresponding to the current position.
+    ref Column front() @property {
+        return _column;
+    }
+
+    /// Whether all reads have been processed.
+    bool empty() @property {
+        return _reads.empty && _read_buf.data.empty;
+    }
+
+    /// Move to next position on the reference.
+    void popFront() {
+        auto pos = ++_column._position;
+
+        size_t survived = 0;
+        auto data = _read_buf.data;
+
+        for (size_t i = 0; i < data.length; ++i) {
+            if (data[i].end_position > pos) {
+                if (survived < i)
+                {
+                    data[survived] = data[i];
+                }
+                ++survived;
+            }
+        }
+
+        for (size_t i = 0; i < survived; ++i) {
+            data[i].incrementPosition();
+        }
+                                      // unless range is empty, this value is
+        _read_buf.shrinkTo(survived);
+
+        _column._n_starting_here = 0; // updated either in initNewReference()
+                                      // or in the loop below
+
+        if (!_reads.empty) {
+            if (_reads.front.ref_id != _column._ref_id &&
+                survived == 0) // processed all reads aligned to the previous reference
+            {
+                initNewReference();
+            } else {
+                size_t n = 0;
+                while (!_reads.empty &&
+                        _reads.front.position == pos &&
+                        _reads.front.ref_id == _column._ref_id)
+                {
+                    auto read = _reads.front;
+                    add(read);
+                    _reads.popFront();
+                    ++n;
+                }
+                _column._n_starting_here = n;
+
+                // handle option of skipping sites with zero coverage
+                if (survived == 0 && n == 0 && _skip_zero_coverage) {
+                    // the name might be misleading but it does the trick
+                    initNewReference();
+                }
+            }
+        }
+
+        _column._reads = _read_buf.data;
+    }
+
+    protected void initNewReference() {
+        auto read = _reads.front;
+
+        _column._position = read.position;
+        _column._ref_id = read.ref_id;
+        uint n = 1;
+        add(read);
+
+        _reads.popFront();
+
+        while (!_reads.empty) {
+            read = _reads.front;
+            if (read.ref_id == _column.ref_id &&
+                read.position == _column._position)
+            {
+                add(read);
+                ++n;
+                _reads.popFront();
+            } else {
+                break;
+            }
+        }
+
+        _column._n_starting_here = n;
+        _column._reads = _read_buf.data;
+    }
+}
+
+/// Abstract pileup structure. S is type of column range.
+struct AbstractPileup(R, S) {
+    private R reads_;
+    R reads() @property {
+        return reads_;
+    }
+
+    S columns;
+    /// Pileup columns
+    alias columns this;
+
+    private {
+        ulong _start_position;
+        ulong _end_position;
+        int _ref_id;
+    }
+
+    /// $(D start_from) parameter provided to a pileup function
+    ulong start_position() @property const {
+        return _start_position;
+    }
+
+    /// $(D end_at) parameter provided to a pileup function
+    ulong end_position() @property const {
+        return _end_position;
+    }
+
+    /// Reference ID of all reads in this pileup.
+    int ref_id() @property const {
+        return _ref_id;
+    }
+}
+
+struct TakeUntil(alias pred, Range, Sentinel) if (isInputRange!Range)
+{
+    private Range _input;
+    private Sentinel _sentinel;
+    bool _done;
+
+    this(Range input, Sentinel sentinel) {
+        _input = input; _sentinel = sentinel; _done = _input.empty || predSatisfied();
+    }
+
+    @property bool empty() { return _done; }
+    @property auto ref front() { return _input.front; }
+    private bool predSatisfied() { return startsWith!pred(_input, _sentinel); }
+    void popFront() { _input.popFront(); _done = _input.empty || predSatisfied(); }
+}
+
+auto takeUntil(alias pred, Range, Sentinel)(Range range, Sentinel sentinel) {
+    return TakeUntil!(pred, Range, Sentinel)(range, sentinel);
+}
+
+auto pileupInstance(alias P, R)(R reads, ulong start_from, ulong end_at, bool skip_zero_coverage) {
+    auto rs = filter!"a.basesCovered() > 0"(reads);
+    while (!rs.empty) {
+        auto r = rs.front;
+        if (r.position + r.basesCovered() < start_from) {
+            rs.popFront();
+        } else {
+            break;
+        }
+    }
+    int ref_id = -1;
+    if (!rs.empty) {
+        ref_id = rs.front.ref_id;
+    }
+    auto sameref_rs = takeUntil!"a.ref_id != b"(rs, ref_id);
+    alias typeof(sameref_rs) ReadRange;
+    PileupRange!ReadRange columns = new P!ReadRange(sameref_rs, skip_zero_coverage);
+    while (!columns.empty) {
+        auto c = columns.front;
+        if (c.position < start_from) {
+            columns.popFront();
+        } else {
+            break;
+        }
+    }
+    auto chopped = takeUntil!"a.position >= b"(columns, end_at);
+    return AbstractPileup!(R, typeof(chopped))(reads, chopped, start_from, end_at, ref_id);
+}
+
+auto pileupColumns(R)(R reads, bool use_md_tag=false, bool skip_zero_coverage=true) {
+    auto rs = filter!"a.basesCovered() > 0"(reads);
+    alias typeof(rs) ReadRange;
+    PileupRange!ReadRange columns;
+    if (use_md_tag) {
+        columns = new PileupRangeUsingMdTag!ReadRange(rs, skip_zero_coverage);
+    } else {
+        columns = new PileupRange!ReadRange(rs, skip_zero_coverage);
+    }
+    return columns;
+}
+
+/// Tracks current reference base
+final static class PileupRangeUsingMdTag(R) :
+    PileupRange!(R, PileupColumn)
+{
+    // The code is similar to that in reconstruct.d but here we can't make
+    // an assumption about any particular read having non-zero length on reference.
+
+    // current chunk of reference
+    private alias typeof(_column._reads[].front) Read;
+    private ReturnType!(dna!Read) _chunk;
+
+    // end position of the current chunk on reference (assuming half-open interval)
+    private uint _chunk_end_position;
+
+    // next read from which we will extract reference chunk
+    //
+    // More precisely,
+    // _next_chunk_provider = argmax (read => read.end_position)
+    //                 {reads overlapping current column}
+    private Read _next_chunk_provider;
+
+    private bool _has_next_chunk_provider = false;
+
+    // coverage at the previous location
+    private ulong _prev_coverage;
+
+    // we also track current reference ID
+    private int _curr_ref_id = -1;
+
+    ///
+    this(R reads, bool skip_zero_coverage) {
+        super(reads, skip_zero_coverage);
+    }
+
+    alias Unqual!(ElementType!R) Raw;
+
+    //  Checks length of the newly added read and tracks the read which
+    //  end position on the reference is the largest.
+    //
+    //  When reconstructed reference chunk will become empty, next one will be
+    //  constructed from that read. This algorithm allows to minimize the number
+    //  of reads for which MD tag will be decoded.
+    protected override void add(ref Raw read) {
+        // the behaviour depends on whether a new contig starts here or not
+        bool had_zero_coverage = _prev_coverage == 0;
+
+        super.add(read);
+
+        // get wrapped read
+        auto _read = _read_buf.data.back;
+
+        // if we've just moved to another reference sequence, do the setup
+        if (_read.ref_id != _curr_ref_id) {
+            _curr_ref_id = _read.ref_id;
+
+            _has_next_chunk_provider = true;
+            _next_chunk_provider = _read;
+            return;
+        }
+
+        // two subsequent next_chunk_providers must overlap
+        // unless (!) there was a region with zero coverage in-between
+        if (_read.position > _chunk_end_position && !had_zero_coverage) {
+            return;
+        }
+
+        // compare with previous candidate and replace if this one is better
+        if (_read.end_position > _chunk_end_position) {
+            if (!_has_next_chunk_provider) {
+                _has_next_chunk_provider = true;
+                _next_chunk_provider = _read;
+            } else if (_read.end_position > _next_chunk_provider.end_position) {
+                _next_chunk_provider = _read;
+            }
+        }
+    }
+
+    protected override void initNewReference() {
+        _prev_coverage = 0;
+        super.initNewReference();
+        if (_has_next_chunk_provider) {
+            // prepare first chunk
+            _chunk = dna(_next_chunk_provider);
+            _chunk_end_position = _next_chunk_provider.end_position;
+            _has_next_chunk_provider = false;
+            _column._reference_base = _chunk.front;
+            _chunk.popFront();
+        } else {
+            _column._reference_base = 'N';
+        }
+    }
+
+    ///
+    override void popFront() {
+        if (!_chunk.empty) {
+            // update current reference base
+            _column._reference_base = _chunk.front;
+
+            _chunk.popFront();
+        } else {
+            _column._reference_base = 'N';
+        }
+
+        // update _prev_coverage
+        _prev_coverage = _column.coverage;
+
+        // the order is important - maybe we will obtain new next_chunk_provider
+        // during this call to popFront()
+        super.popFront();
+
+        // If we have consumed the whole current chunk,
+        // we need to obtain the next one if it's possible.
+        if (_chunk.empty && _has_next_chunk_provider) {
+            _chunk = dna(_next_chunk_provider);
+
+            debug {
+            /*  import std.stdio;
+                writeln();
+                writeln("position: ", _next_chunk_provider.position);
+                writeln("next chunk: ", to!string(_chunk));
+                */
+            }
+
+            _chunk_end_position = _next_chunk_provider.end_position;
+
+            _has_next_chunk_provider = false;
+
+            _chunk.popFrontN(cast(size_t)(_column.position - _next_chunk_provider.position));
+
+            _column._reference_base = _chunk.front;
+            _chunk.popFront();
+        }
+    }
+}
+
+/// Creates a pileup range from a range of reads.
+/// Note that all reads must be aligned to the same reference.
+///
+/// See $(D PileupColumn) documentation for description of range elements.
+/// Note also that you can't use $(D std.array.array()) function on pileup
+/// because it won't make deep copies of underlying data structure.
+/// (One might argue that in this case it would be better to use opApply,
+/// but typically one would use $(D std.algorithm.map) on pileup columns
+/// to obtain some numeric characteristics.)
+///
+/// Params:
+///     use_md_tag =  if true, use MD tag together with CIGAR
+///                   to recover reference bases
+///
+///     start_from =  position from which to start
+///
+///     end_at     =  position before which to stop
+///
+/// $(BR)
+/// That is, the range of positions is half-open interval
+/// $(BR)
+/// [max(start_from, first mapped read start position),
+/// $(BR)
+///  min(end_at, last mapped end position among all reads))
+///
+///     skip_zero_coverage = if true, skip sites with zero coverage
+///
+auto makePileup(R)(R reads,
+                   bool use_md_tag=false,
+                   ulong start_from=0,
+                   ulong end_at=ulong.max,
+                   bool skip_zero_coverage=true)
+{
+    if (use_md_tag) {
+        return pileupInstance!PileupRangeUsingMdTag(reads, start_from, end_at, skip_zero_coverage);
+    } else {
+        return pileupInstance!PileupRange(reads, start_from, end_at, skip_zero_coverage);
+    }
+}
+
+/// Allows to express the intention clearer.
+enum useMD = true;
+
+unittest {
+    import std.algorithm;
+    import std.range;
+    import std.array;
+
+    // the set of reads below was taken from 1000 Genomes BAM file
+    // NA20828.mapped.ILLUMINA.bwa.TSI.low_coverage.20101123.bam
+    // (region 20:1127810-1127819)
+    auto readnames = array(iota(10).map!(i => "r" ~ to!string(i))());
+
+    auto sequences = ["ATTATGGACATTGTTTCCGTTATCATCATCATCATCATCATCATCATTATCATC",
+                      "GACATTGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCATC",
+                      "ATTGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCATCACC",
+                      "TGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCATCACCAC",
+                      "TCCGTTATCATCATCATCATCATCATCATCATCATCATCATCATCACCACCACC",
+                      "GTTATCATCATCATCATCATCATCATCATCATCATCATCATCATCGTCACCCTG",
+                      "TCATCATCATCATAATCATCATCATCATCATCATCATCGTCACCCTGTGTTGAG",
+                      "TCATCATCATCGTCACCCTGTGTTGAGGACAGAAGTAATTTCCCTTTCTTGGCT",
+                      "TCATCATCATCATCACCACCACCACCCTGTGTTGAGGACAGAAGTAATATCCCT",
+                      "CACCACCACCCTGTGTTGAGGACAGAAGTAATTTCCCTTTCTTGGCTGGTCACC"];
+
+// multiple sequence alignment:
+//                                                            ***
+// ATTATGGACATTGTTTCCGTTATCATCATCATCATCATCATCATCATTATCATC
+//       GACATTGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCAT---C
+//          ATTGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCATCACC
+//            TGTTTCCGTTATCATCATCATCATCATCATCATCATCATCATCATCAT---CACCAC
+//                TCCGTTATCATCATCATCATCATCATCATCATCATCATCATCAT---CACCACCACC
+//                   GTTATCATCATCATCATCATCATCATCATCATCATCATCAT---CATCGTCACCCTG
+//                            ATCATCATCATAATCATCATCATCATCATCAT---CATCGTCACCCTGTGTTGAG
+//                                      TCATCATCATCGTCAC------------------CCTGTGTTGAGGACAGAAGTAATTTCCCTTTCTTGGCT
+//                                               TCATCATCATCATCACCACCACCACCCTGTGTTGAGGACAGAAGTAATATCCCT
+//                                                            ---CACCACCACCCTGTGTTGAGGACAGAAGTAATTTCCCTTTCTTGGCTGGTCACC
+//   *         *         *         *         *         *            *         *        *         *
+//  760       770       780       790       800       810          820       830      840       850
+
+    auto cigars = [[CigarOperation(54, 'M')],
+                   [CigarOperation(54, 'M')],
+                   [CigarOperation(50, 'M'), CigarOperation(3, 'I'), CigarOperation(1, 'M')],
+                   [CigarOperation(54, 'M')],
+                   [CigarOperation(54, 'M')],
+                   [CigarOperation(54, 'M')],
+                   [CigarOperation(2, 'S'), CigarOperation(52, 'M')],
+                   [CigarOperation(16, 'M'), CigarOperation(15, 'D'), CigarOperation(38, 'M')],
+                   [CigarOperation(13, 'M'), CigarOperation(3, 'I'), CigarOperation(38, 'M')],
+                   [CigarOperation(54, 'M')]];
+
+    auto positions = [758, 764, 767, 769, 773, 776, 785, 795, 804, 817];
+
+    auto md_tags = ["47C6", "54", "51", "50T3", "46T7", "45A0C7", "11C24A0C14",
+                    "11A3T0^CATCATCATCACCAC38", "15T29T5", "2T45T5"];
+
+    BamRead[] reads = new BamRead[10];
+
+    foreach (i; iota(10)) {
+        reads[i] = BamRead(readnames[i], sequences[i], cigars[i]);
+        reads[i].position = positions[i];
+        reads[i].ref_id = 0;
+        reads[i]["MD"] = md_tags[i];
+    }
+
+    auto first_read_position = reads.front.position;
+    auto reference = to!string(dna(reads));
+
+    import std.stdio;
+    writeln("Testing pileup (low-level aspects)...");
+
+    auto pileup = makePileup(reads, true, 796, 849, false);
+    auto pileup2 = makePileup(reads, true, 0, ulong.max, false);
+    assert(pileup.front.position == 796);
+    assert(pileup.start_position == 796);
+    assert(pileup.end_position == 849);
+
+    while (pileup2.front.position != 796) {
+        pileup2.popFront();
+    }
+
+    while (!pileup.empty) {
+        auto column = pileup.front;
+        auto column2 = pileup2.front;
+        assert(column.coverage == column2.coverage);
+        pileup2.popFront();
+
+        // check that DNA is built correctly from MD tags and CIGAR
+        assert(column.reference_base == reference[cast(size_t)(column.position - first_read_position)]);
+
+        switch (column.position) {
+            case 796:
+                assert(equal(column.bases, "CCCCCCAC"));
+                pileup.popFront();
+                break;
+            case 805:
+                assert(equal(column.bases, "TCCCCCCCC"));
+                pileup.popFront();
+                break;
+            case 806:
+                assert(equal(column.bases, "AAAAAAAGA"));
+                pileup.popFront();
+                break;
+            case 810:
+                // last read is not yet fetched by pileup engine
+                assert(column.reads[column.coverage - 2].cigar_after.front.type == 'D');
+                pileup.popFront();
+                break;
+            case 817:
+                assert(column.reads[column.coverage - 2].cigar_before.back.type == 'I');
+                pileup.popFront();
+                break;
+            case 821:
+                assert(column.reads[column.coverage - 3].cigar_operation.type == 'D');
+                assert(equal(column.bases, "AAGG-AA"));
+                pileup.popFront();
+                break;
+            case 826:
+                assert(equal(column.bases, "CCCCCC"));
+                pileup.popFront();
+                break;
+            case 849:
+                assert(equal(column.bases, "TAT"));
+                pileup.popFront();
+                assert(pileup.empty);
+                break;
+            default:
+                pileup.popFront();
+                break;
+        }
+    }
+
+    // another set of reads, the same file, region 20:12360032-12360050
+    // test the case when reference has some places with zero coverage
+
+    reads = [BamRead("r1", "CCCACATAGAAAGCTTGCTGTTTCTCTGTGGGAAGTTTTAACTTAGGTCAGCTT",
+                       [CigarOperation(54, 'M')]),
+             BamRead("r2", "TAGAAAGCTTGCTGTTTCTCTGTGGGAAGTTTTAACTTAGGTTAGCTTCATCTA",
+                       [CigarOperation(54, 'M')]),
+             BamRead("r3", "TTTTTCTTTCTTTCTTTGAAGAAGGCAGATTCCTGGTCCTGCCACTCAAATTTT",
+                       [CigarOperation(54, 'M')]),
+             BamRead("r4", "TTTCTTTCTTTCTTTGAAGAAGGCAGATTCCTGGTCCTGCCACTCAAATTTTCA",
+                       [CigarOperation(54, 'M')])];
+
+    reads[0].position = 979;
+    reads[0]["MD"] = "54";
+    reads[0].ref_id = 0;
+
+    reads[1].position = 985;
+    reads[1]["MD"] = "42C7C3";
+    reads[1].ref_id = 0;
+
+    reads[2].position = 1046;
+    reads[2]["MD"] = "54";
+    reads[2].ref_id = 0;
+
+    reads[3].position = 1048;
+    reads[3]["MD"] = "54";
+    reads[3].ref_id = 0;
+
+    assert(equal(dna(reads),
+                 map!(c => c.reference_base)(makePileup(reads, true, 0, ulong.max, false))));
+}
+
+struct PileupChunkRange(C) {
+    private C _chunks;
+    private ElementType!C _prev_chunk;
+    private ElementType!C _current_chunk;
+    private bool _empty;
+    private ulong _beg = 0;
+    private bool _use_md_tag;
+    private ulong _start_from;
+    private ulong _end_at;
+
+    this(C chunks, bool use_md_tag, ulong start_from, ulong end_at) {
+        _chunks = chunks;
+        _use_md_tag = use_md_tag;
+        _start_from = start_from;
+        _end_at = end_at;
+        while (true) {
+            if (_chunks.empty) {
+                _empty = true;
+            } else {
+                _current_chunk = _chunks.front;
+                _chunks.popFront();
+
+                if (_current_chunk[0].ref_id < 0) continue;
+
+                _beg = _current_chunk[0].position;
+                if (_beg >= end_at) {
+                    _empty = true;
+                    break;
+                }
+
+                auto last_read = _current_chunk[$-1];
+                if (last_read.position + last_read.basesCovered() > start_from) {
+                    break;
+                }
+            }
+        }
+    }
+
+    bool empty() @property {
+        return _empty;
+    }
+
+    auto front() @property {
+        auto end_pos = _current_chunk[$-1].position;
+        if (_chunks.empty || _chunks.front[0].ref_id != _current_chunk[$-1].ref_id)
+            end_pos += _current_chunk[$-1].basesCovered();
+
+        return makePileup(chain(_prev_chunk, _current_chunk),
+                          _use_md_tag,
+                          max(_beg, _start_from), min(end_pos, _end_at));
+    }
+
+    void popFront() {
+        _prev_chunk = _current_chunk;
+
+        while (true) {
+            if (_chunks.empty) {
+                _empty = true;
+                return;
+            }
+            _current_chunk = _chunks.front;
+            _chunks.popFront();
+
+            if (_current_chunk[0].ref_id >= 0) break;
+        }
+
+        // if we changed reference, nullify prev_chunk
+        if (_prev_chunk.length > 0 &&
+            _prev_chunk[$ - 1].ref_id == _current_chunk[0].ref_id)
+        {
+            _beg = _prev_chunk[$-1].position;
+        } else {
+            _beg = _current_chunk[0].position;
+            _prev_chunk.length = 0;
+        }
+
+        // keep only those reads in _prev_chunk that have overlap with the last one
+
+        // 1) estimate read length
+        enum sampleSize = 15;
+        int[sampleSize] buf = void;
+        int read_length = void;
+        if (_prev_chunk.length <= sampleSize) {
+            for (size_t k = 0; k < _prev_chunk.length; ++k) {
+                buf[k] = _prev_chunk[k].sequence_length;
+            }
+            topN(buf[0.._prev_chunk.length], _prev_chunk.length / 2);
+            read_length = buf[_prev_chunk.length / 2];
+        } else {
+            size_t i = 0;
+            foreach (read; randomSample(_prev_chunk, sampleSize))
+                buf[i++] = read.sequence_length;
+            topN(buf[], sampleSize / 2);
+            read_length = buf[sampleSize / 2];
+            debug {
+                import std.stdio;
+                stderr.writeln("[pileupChunks] read_length=", read_length);
+            }
+        }
+
+        // 2) do binary search for those reads that start from (_beg - 2 * read_length)
+        //    (it's an experimental fact that almost none of reads consumes that much
+        //     on a reference sequence)
+        auto pos = _beg - 2 * read_length;
+        long i = 0;
+        long j = _prev_chunk.length - 1;
+        // positions of _prev_chunk[0 .. i] are less than pos,
+        // positions of _prev_chunk[j + 1 .. $] are more or equal to pos.
+
+        while (i <= j) {
+            auto m = cast(size_t)(i + j) / 2;
+            assert(m < _prev_chunk.length);
+            auto p = _prev_chunk[m].position;
+            if (p >= pos) {
+                j = m - 1;
+            } else {
+                i = m + 1;
+            }
+        }
+
+        _prev_chunk = _prev_chunk[cast(size_t)i .. $];
+    }
+}
+
+/// This function constructs range of non-overlapping consecutive pileups from a range of reads
+/// so that these pileups can be processed in parallel.
+///
+/// It's allowed to pass ranges of sorted reads with different ref. IDs,
+/// they won't get mixed in any chunk.
+///
+/// Params:
+///   use_md_tag =   recover reference bases from MD tag and CIGAR
+///
+///   block_size =   approximate amount of memory that each pileup will consume,
+///                  given in bytes. (Usually consumption will be a bit higher.)
+///
+///   start_from =   position of the first column of the first chunk
+///
+///   end_at     =   position after the last column of the last chunk
+///
+/// $(BR)
+/// WARNING:     block size should be big enough so that every block will share
+///              some reads only with adjacent blocks.
+///              $(BR)
+///              As such, it is not recommended to reduce the $(I block_size).
+///              But there might be a need to increase it in case of very high coverage.
+auto pileupChunks(R)(R reads, bool use_md_tag=false, size_t block_size=16_384_000,
+                     ulong start_from=0, ulong end_at=ulong.max) {
+    auto chunks = chunksConsumingLessThan(reads, block_size);
+    return PileupChunkRange!(typeof(chunks))(chunks, use_md_tag, start_from, end_at);
+}
diff --git a/bio/bam/randomaccessmanager.d b/bio/bam/randomaccessmanager.d
new file mode 100644
index 0000000..e5beb4b
--- /dev/null
+++ b/bio/bam/randomaccessmanager.d
@@ -0,0 +1,468 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/**
+  Module for random access operations on BAM file.
+ */
+module bio.bam.randomaccessmanager;
+
+import bio.bam.constants;
+import bio.bam.reader;
+import bio.bam.read;
+import bio.bam.readrange;
+import bio.bam.baifile;
+import bio.bam.region;
+import bio.core.utils.algo;
+
+import bio.core.bgzf.block;
+import bio.core.bgzf.virtualoffset;
+import bio.core.bgzf.inputstream;
+import bio.core.bgzf.constants;
+import bio.core.bgzf.chunk;
+import bio.core.utils.range;
+import bio.core.utils.stream;
+
+import std.system;
+import std.algorithm;
+import std.array;
+import std.range;
+import std.traits;
+import std.exception;
+import std.container;
+import std.parallelism;
+
+debug {
+    import std.stdio;
+}
+
+private {
+    auto nonOverlappingChunks(R)(R chunks) {
+        static ref auto chunkB(ref Chunk chunk) { return chunk.beg; }
+        static ref auto chunkE(ref Chunk chunk) { return chunk.end; }
+        return nonOverlapping!(chunkB, chunkE)(chunks);
+    }
+}
+
+/// Class which random access tasks are delegated to.
+class RandomAccessManager {
+
+    void setCache(BgzfBlockCache cache) {
+        _cache = cache;
+    }
+    
+    void setTaskPool(TaskPool task_pool) {
+        _task_pool = task_pool;
+    }
+
+    void setBufferSize(size_t buffer_size) {
+        _buffer_size = buffer_size;
+    }
+
+    /// Constructs new manager for BAM file
+    this(string filename) {
+        _filename = filename;
+    }
+
+    /// ditto
+    this(BamReader reader) {
+        _reader = reader;
+        _filename = reader.filename;
+    }
+
+    /// Constructs new manager with given index file.
+    /// This allows to do random-access interval queries.
+    ///
+    /// Params:
+    ///     filename =  location of BAM file
+    ///     bai  =  index file
+    this(string filename, ref BaiFile bai) {
+        _filename = filename;
+        _bai = bai;
+        _found_index_file = true;
+    }
+
+    /// ditto
+    this(BamReader reader, ref BaiFile bai) {
+        _reader = reader;
+        _filename = reader.filename;
+        _bai = bai;
+        _found_index_file = true;
+    }
+
+    /// If file ends with EOF block, returns virtual offset of the start of EOF block.
+    /// Otherwise, returns virtual offset of the physical end of file.
+    VirtualOffset eofVirtualOffset() const {
+        ulong file_offset = std.file.getSize(_filename);
+        if (hasEofBlock()) {
+            return VirtualOffset(file_offset - BAM_EOF.length, 0);
+        } else {
+            return VirtualOffset(file_offset, 0);
+        }
+    }
+
+    /// Returns true if the file ends with EOF block, and false otherwise.
+    bool hasEofBlock() const {
+        auto _stream = new bio.core.utils.stream.File(_filename);
+        if (_stream.size < BAM_EOF.length) {
+            return false;
+        }
+
+        ubyte[BAM_EOF.length] buf;
+        _stream.seekEnd(-cast(int)BAM_EOF.length);
+
+        _stream.readExact(&buf, BAM_EOF.length);
+        if (buf != BAM_EOF) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /// Get new BgzfInputStream starting from specified virtual offset.
+    BgzfInputStream createStreamStartingFrom(VirtualOffset offset)
+    {
+        auto _stream = new bio.core.utils.stream.File(_filename);
+        auto _compressed_stream = new EndianStream(_stream, Endian.littleEndian);
+        _compressed_stream.seekSet(cast(size_t)(offset.coffset));
+        auto supplier = new StreamSupplier(_compressed_stream, offset.uoffset);
+        auto bgzf_stream = new BgzfInputStream(supplier, _task_pool, _cache);
+        return bgzf_stream;
+    }
+
+    /// Get single read at a given virtual offset.
+    /// Every time new stream is used.
+    BamRead getReadAt(VirtualOffset offset) {
+        auto stream = createStreamStartingFrom(offset);
+        
+        bool old_mode = _reader._seqprocmode;
+        _reader._seqprocmode = true;
+        auto read = bamReadRange(stream, _reader).front.dup;
+        _reader._seqprocmode = old_mode;
+        return read;
+    }
+
+    /// Get BGZF block at a given offset.
+    BgzfBlock getBgzfBlockAt(ulong offset) {
+        auto fstream = new bio.core.utils.stream.File(_filename);
+        auto stream = new EndianStream(fstream, Endian.littleEndian);
+        stream.seekSet(offset);
+        BgzfBlock block = void;
+        ubyte[BGZF_MAX_BLOCK_SIZE] buf = void;
+        fillBgzfBufferFromStream(stream, true, &block, buf.ptr);
+        block._buffer = block._buffer.dup;
+        return block;
+    }
+
+    /// Get reads between two virtual offsets. First virtual offset must point
+    /// to a start of an alignment record.
+    auto getReadsBetween(VirtualOffset from, VirtualOffset to) {
+        auto stream = createStreamStartingFrom(from);
+
+        static bool offsetTooBig(BamReadBlock record, VirtualOffset vo) {
+            return record.end_virtual_offset > vo;
+        }
+
+        return until!offsetTooBig(bamReadRange!withOffsets(stream, _reader), to);
+    }
+
+    bool found_index_file() @property const {
+        return _found_index_file;
+    }
+    private bool _found_index_file = false; // overwritten in constructor if filename is provided
+
+    /// BAI file
+    ref const(BaiFile) getBai() const {
+        enforce(found_index_file, "BAM index file (.bai) must be provided");
+        return _bai;
+    }
+
+    private void checkIndexExistence() {
+        enforce(found_index_file, "BAM index file (.bai) must be provided");
+    }
+
+    private void checkRefId(uint ref_id) {
+        enforce(ref_id < _bai.indices.length, "Invalid reference sequence index");
+    }
+
+    private void appendChunks(ref Chunk[] chunks, Bin bin, VirtualOffset min_offset) {
+        foreach (chunk; bin.chunks) {
+            if (chunk.end > min_offset) {
+                chunks ~= chunk;
+
+                // optimization
+                if (chunks[$-1].beg < min_offset)
+                    chunks[$-1].beg = min_offset;
+            }
+        }
+    }
+
+    /// Get BAI chunks containing all alignment records overlapping the region
+    Chunk[] getChunks(BamRegion region) {
+        auto ref_id = region.ref_id;
+        auto beg = region.start;
+        auto end = region.end;
+        checkIndexExistence();
+        checkRefId(ref_id);
+
+        // Select all bins that overlap with [beg, end).
+        // Then from such bins select all chunks that end to the right of min_offset.
+        // Sort these chunks by leftmost coordinate and remove all overlaps.
+
+        auto min_offset = _bai.indices[ref_id].getMinimumOffset(beg);
+
+        Chunk[] bai_chunks;
+        foreach (b; _bai.indices[ref_id].bins) {
+            if (!b.canOverlapWith(beg, end))
+                continue;
+            appendChunks(bai_chunks, b, min_offset);
+        }
+
+        sort(bai_chunks);
+        return bai_chunks.nonOverlappingChunks().array();
+    }
+
+    // regions should be from the same reference sequence
+    private Chunk[] getGroupChunks(BamRegion[] regions) {
+        auto bitset = Array!bool();
+        enforce(regions.length > 0);
+        bitset.length = BAI_MAX_BIN_ID;
+        bitset[0] = true;
+        foreach (region; regions) {
+            auto beg = region.start;
+            auto end = region.end;
+            int i = 0, k;
+            enforce(beg < end);
+            --end;
+            for (k =    1 + (beg>>26); k <=    1 + (end>>26); ++k) bitset[k] = true;
+            for (k =    9 + (beg>>23); k <=    9 + (end>>23); ++k) bitset[k] = true;
+            for (k =   73 + (beg>>20); k <=   73 + (end>>20); ++k) bitset[k] = true;
+            for (k =  585 + (beg>>17); k <=  585 + (end>>17); ++k) bitset[k] = true;
+            for (k = 4681 + (beg>>14); k <= 4681 + (end>>14); ++k) bitset[k] = true;
+        }
+
+        auto ref_id = regions.front.ref_id;
+        checkIndexExistence();
+        checkRefId(ref_id);
+
+        // Select all bins that overlap with [beg, end).
+        // Then from such bins select all chunks that end to the right of min_offset.
+        // Sort these chunks by leftmost coordinate and remove all overlaps.
+
+        auto min_offset = _bai.indices[ref_id].getMinimumOffset(regions.front.start);
+
+        version(extraVerbose) {
+            import std.stdio;
+            stderr.writeln("min offset = ", min_offset);
+        }
+
+        Chunk[] bai_chunks;
+        auto bins = _bai.indices[ref_id].bins;
+        foreach (bin; bins)
+            if (bitset[bin.id])
+                appendChunks(bai_chunks, bin, min_offset);
+        sort(bai_chunks);
+
+        version(extraVerbose) {
+            stderr.writeln("[chunks before normalization]");
+            foreach(chunk; bai_chunks)
+                stderr.writeln(chunk.beg, " - ", chunk.end);
+        }
+
+        return bai_chunks.nonOverlappingChunks().array();
+    }
+
+    private auto filteredReads(alias IteratePolicy)(BamRegion[] regions) {
+        auto chunks = getGroupChunks(regions);
+        version(extraVerbose) {
+            import std.stdio;
+            stderr.writeln("[chunks]");
+            foreach (chunk; chunks)
+                stderr.writeln(chunk.beg, " - ", chunk.end);
+        }
+        auto reads = readsFromChunks!IteratePolicy(chunks);
+        return filterBamReads(reads, regions);
+    }
+    
+    /// Fetch alignments with given reference sequence id, overlapping [beg..end)
+    auto getReads(alias IteratePolicy=withOffsets)(BamRegion region)
+    {
+        auto chunks = getChunks(region);
+        auto reads = readsFromChunks!IteratePolicy(chunks);
+        return filterBamReads(reads, [region]);
+    }
+
+    auto getReads(alias IteratePolicy=withOffsets)(BamRegion[] regions) {
+        auto sorted_regions = regions.sort();
+        BamRegion[][] regions_by_ref;
+        // TODO: replace with groupBy once it's included into Phobos
+        uint last_ref_id = uint.max;
+        foreach (region; sorted_regions) {
+            if (region.ref_id == last_ref_id) {
+                regions_by_ref.back ~= region;
+            } else {
+                regions_by_ref ~= [region];
+                last_ref_id = region.ref_id;
+            }
+        }
+    
+        static ref auto regB(ref BamRegion region) { return region.start; }
+        static ref auto regE(ref BamRegion region) { return region.end; }
+        foreach (ref group; regions_by_ref)
+            group = nonOverlapping!(regB, regE)(group).array();
+
+        return regions_by_ref.zip(repeat(this))
+                             .map!(gt => gt[1].filteredReads!IteratePolicy(gt[0]))()
+                             .joiner();
+    }
+
+private:
+    auto readsFromChunks(alias IteratePolicy, R)(R chunks) {
+        auto fstream = new bio.core.utils.stream.File(_filename);
+        auto compressed_stream = new EndianStream(fstream, Endian.littleEndian);
+        auto supplier = new StreamChunksSupplier(compressed_stream, chunks);
+        auto stream = new BgzfInputStream(supplier, _task_pool, _cache);
+        return bamReadRange!IteratePolicy(stream, _reader);
+    }
+    
+    string _filename;
+    BaiFile _bai;
+    BamReader _reader;
+    TaskPool _task_pool;
+    size_t _buffer_size;
+
+    BgzfBlockCache _cache;
+
+    TaskPool task_pool() @property {
+        if (_task_pool is null)
+            _task_pool = taskPool;
+        return _task_pool;
+    }
+        
+public:
+
+    static struct BamReadFilter(R) {
+        this(R r, BamRegion[] regions) {
+            _range = r;
+            _regions = regions;
+            enforce(regions.length > 0);
+            _region = _regions.front;
+            _ref_id = _region.ref_id; // assumed to be constant
+            findNext();
+        }
+
+        bool empty() @property {
+            return _empty;
+        }
+
+        ElementType!R front() @property {
+            return _current_read;
+        }
+        
+        void popFront() {
+            _range.popFront();
+            findNext();
+        }
+
+    private: 
+        R _range;
+        uint _ref_id;
+        BamRegion _region;
+        BamRegion[] _regions; // non-overlapping and sorted
+        bool _empty;
+        ElementType!R _current_read;
+
+        void findNext() {
+            if (_regions.empty || _range.empty) {
+                _empty = true;
+                return;
+            }
+
+            while (!_range.empty) {
+                _current_read = _range.front;
+
+                // BamReads are sorted first by ref. ID.
+                auto current_ref_id = cast(uint)_current_read.ref_id;
+                // ref_id can't be -1 unless the index is fucked up
+                if (current_ref_id > _ref_id) {
+                    // no more records for this _ref_id
+                    _empty = true;
+                    return;
+                } else if (current_ref_id < _ref_id) {
+                    // skip reads referring to sequences
+                    // with ID less than ours
+                    _range.popFront();
+                    continue;
+                }
+
+                if (_current_read.position >= _region.end) {
+                    // As reads are sorted by leftmost coordinate,
+                    // all remaining alignments in _range 
+                    // will not overlap the current interval as well.
+                    // 
+                    //                  [-----)
+                    //                  . [-----------)
+                    //                  .  [---)
+                    //                  .    [-------)
+                    //                  .         [-)
+                    //    [beg .....  end)
+                    _regions.popFront();
+                    // TODO: potentially binary search may be faster,
+                    // but it needs to be checked
+                    if (_regions.empty) {
+                        _empty = true;
+                        return;
+                    } else {
+                        _region = _regions.front;
+                        continue;
+                    }
+                }
+
+                if (_current_read.position > _region.start) {
+                    return; // definitely overlaps
+                }
+
+                if (_current_read.position +
+                    _current_read.basesCovered() <= _region.start) 
+                    {
+                        /// ends before beginning of the region
+                        ///  [-----------)
+                        ///               [beg .......... end)
+                        _range.popFront();
+                        /// Zero-length reads are also considered non-overlapping,
+                        /// so for consistency the inequality 12 lines above is strict.
+                    } else {
+                    return; /// _current_read overlaps the region
+                }
+            }
+            _empty = true; 
+        }
+    }
+
+    // Get range of alignments sorted by leftmost coordinate,
+    // together with an interval [beg, end),
+    // and return another range of alignments which overlap the region.
+    static auto filterBamReads(R)(R r, BamRegion[] regions)
+    {
+        return BamReadFilter!R(r, regions);
+    }
+}
diff --git a/bio/bam/read.d b/bio/bam/read.d
new file mode 100644
index 0000000..3d15881
--- /dev/null
+++ b/bio/bam/read.d
@@ -0,0 +1,1796 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2016    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/// $(P $(D BamRead) type provides convenient interface for working with SAM/BAM records.)
+///
+/// $(P All flags, tags, and fields can be accessed and modified.)
+///
+/// Examples:
+/// ---------------------------
+/// import std.conv;
+/// ...
+/// assert(!read.is_unmapped);              // check flag
+/// assert(read.ref_id != -1);              // access field
+/// 
+/// int edit_distance = to!int(read["NM"]); // access tag
+/// read["NM"] = 0;                         // modify tag
+/// read["NM"] = null;                      // remove tag
+/// read["NM"] = null;                      // no-op
+///
+/// foreach (tag, value; read)              // iterate over tags
+///     writeln(tag, " ", value);           // and print their keys and values
+///
+/// read.sequence = "AGCAGACTACGTGTGCATAC"; // sets base qualities to 255
+/// assert(read.base_qualities[0] == 255);
+/// read.is_unmapped = true;                // set flag
+/// read.ref_id = -1;                       // set field
+/// ---------------------------
+module bio.bam.read;
+
+import bio.core.base;
+import bio.core.utils.format;
+
+import bio.bam.abstractreader;
+import bio.bam.writer;
+import bio.bam.tagvalue;
+import bio.bam.bai.bin;
+
+import bio.bam.md.core;
+
+import bio.bam.utils.array;
+import bio.bam.utils.value;
+import bio.core.utils.switchendianness;
+
+import bio.bam.thirdparty.msgpack : Packer, unpack;
+
+import std.algorithm;
+import std.range;
+import std.conv;
+import std.format;
+import std.exception;
+import std.system;
+import std.traits;
+import std.array;
+import std.c.stdlib;
+
+/**
+  Represents single CIGAR operation
+ */
+struct CigarOperation {
+    static assert(CigarOperation.sizeof == uint.sizeof);
+    /*
+        WARNING!
+
+      It is very essential that the size of 
+      this struct is EXACTLY equal to uint.sizeof!
+
+      The reason is to avoid copying of arrays during alignment parsing.
+
+      Namely, when some_pointer points to raw cigar data,
+      we can just do a cast. This allows to access those data
+      directly, not doing any memory allocations. 
+    */
+
+    private uint raw; // raw data from BAM
+
+    private static ubyte char2op(char c) {
+        switch(c) {
+            case 'M': return 0;
+            case 'I': return 1;
+            case 'D': return 2;
+            case 'N': return 3;
+            case 'S': return 4;
+            case 'H': return 5;
+            case 'P': return 6;
+            case '=': return 7;
+            case 'X': return 8;
+            default:  return 15; // 15 is used as invalid value
+        }
+    }
+
+    /// Length must be strictly less than 2^28.
+    /// $(BR)
+    /// Operation type must be one of M, I, D, N, S, H, P, =, X.
+    this(uint length, char operation_type) {
+        enforce(length < (1<<28), "Too big length of CIGAR operation");
+        raw = (length << 4) | char2op(operation_type);
+    }
+
+    /// Operation length
+    uint length() @property const nothrow {
+        return raw >> 4;
+    }
+  
+    /// CIGAR operation as one of MIDNSHP=X.
+    /// Absent or invalid operation is represented by '?'
+    char type() @property const nothrow {
+        return "MIDNSHP=X????????"[raw & 0xF];
+    }
+
+    // Each pair of bits has first bit set iff the operation is query consuming,
+    // and second bit set iff it is reference consuming.
+    //                                            X  =  P  H  S  N  D  I  M
+    private static immutable uint CIGAR_TYPE = 0b11_11_00_00_01_10_10_01_11;
+
+    /// True iff operation is one of M, =, X, I, S
+    bool is_query_consuming() @property const {
+        return ((CIGAR_TYPE >> ((raw & 0xF) * 2)) & 1) != 0;
+    }
+
+    /// True iff operation is one of M, =, X, D, N
+    bool is_reference_consuming() @property const {
+        return ((CIGAR_TYPE >> ((raw & 0xF) * 2)) & 2) != 0;
+    }
+
+    /// True iff operation is one of M, =, X
+    bool is_match_or_mismatch() @property const {
+        return ((CIGAR_TYPE >> ((raw & 0xF) * 2)) & 3) == 3;
+    }
+
+    /// True iff operation is one of 'S', 'H'
+    bool is_clipping() @property const {
+        return ((raw & 0xF) >> 1) == 2; // 4 or 5
+    }
+
+    private void toSam(Sink)(auto ref Sink sink) const 
+        if (isSomeSink!Sink)
+    {
+        sink.write(length);
+        sink.write(type);
+    }
+
+    void toString(scope void delegate(const(char)[]) sink) const {
+        toSam(sink);
+    }
+}
+
+/// Forward range of extended CIGAR operations, with =/X instead of M
+/// Useful for, e.g., detecting positions of mismatches.
+struct ExtendedCigarRange(CigarOpRange, MdOpRange) {
+    static assert(isInputRange!CigarOpRange && is(Unqual!(ElementType!CigarOpRange) == CigarOperation));
+    static assert(isInputRange!MdOpRange && is(Unqual!(ElementType!MdOpRange) == MdOperation));
+  
+    private {
+        CigarOpRange _cigar;
+        MdOpRange _md_ops;
+        CigarOperation _front_cigar_op;
+        MdOperation _front_md_op;
+        uint _n_mismatches;
+        bool _empty;
+    }
+
+    ///
+    this(CigarOpRange cigar, MdOpRange md_ops) {
+        _cigar = cigar;
+        _md_ops = md_ops;
+        fetchNextCigarOp();
+        fetchNextMdOp();
+    }
+
+    /// Forward range primitives
+    bool empty() @property const {
+        return _empty;
+    }
+
+    /// ditto
+    CigarOperation front() @property {
+        debug {
+            import std.stdio;
+            writeln(_front_cigar_op, " - ", _front_md_op);
+        }
+        
+        if (_front_cigar_op.type != 'M')
+            return _front_cigar_op;
+
+        if (_n_mismatches == 0) {
+            assert(_front_md_op.is_match);
+            uint len = min(_front_md_op.match, _front_cigar_op.length);
+            return CigarOperation(len, '=');
+        }
+    
+        assert(_front_md_op.is_mismatch);
+        return CigarOperation(min(_n_mismatches, _front_cigar_op.length), 'X');
+    }
+
+    /// ditto
+    ExtendedCigarRange save() @property {
+        typeof(return) r = void;
+        r._cigar = _cigar.save;
+        r._md_ops = _md_ops.save;
+        r._front_cigar_op = _front_cigar_op;
+        r._front_md_op = _front_md_op;
+        r._n_mismatches = _n_mismatches;
+        r._empty = _empty;
+        return r;
+    }
+
+    /// ditto
+    void popFront() {
+        if (!_front_cigar_op.is_match_or_mismatch) {
+            if (_front_cigar_op.is_reference_consuming)
+                fetchNextMdOp();
+            fetchNextCigarOp();
+            return;
+        }
+
+        auto len = _front_cigar_op.length;
+        if (_n_mismatches > 0) {
+            enforce(_front_md_op.is_mismatch);
+      
+            if (len > _n_mismatches) {
+                _front_cigar_op = CigarOperation(len - _n_mismatches, 'M');
+                _n_mismatches = 0;
+                fetchNextMdOp();
+            } else if (len < _n_mismatches) {
+                _n_mismatches -= len;
+                fetchNextCigarOp();
+            } else {
+                fetchNextCigarOp();
+                fetchNextMdOp();
+            }
+        } else {
+            enforce(_front_md_op.is_match);
+            auto n_matches = _front_md_op.match;
+      
+            if (len > n_matches) {
+                _front_cigar_op = CigarOperation(len - n_matches, 'M');
+                fetchNextMdOp();
+            } else if (len < n_matches) {
+                _front_md_op.match -= len;
+                fetchNextCigarOp();
+            } else {
+                fetchNextCigarOp();
+                fetchNextMdOp();
+            }
+        }
+    }
+  
+    private {
+        void fetchNextCigarOp() {
+            if (_cigar.empty) {
+                _empty = true;
+                return;
+            }
+        
+            _front_cigar_op = _cigar.front;
+            _cigar.popFront();
+        }
+
+        void fetchNextMdOp() {
+            if (_md_ops.empty)
+                return;
+
+            _n_mismatches = 0;
+      
+            _front_md_op = _md_ops.front;
+            _md_ops.popFront();
+
+            if (_front_md_op.is_mismatch) {
+                _n_mismatches = 1;
+                while (!_md_ops.empty && _md_ops.front.is_mismatch) {
+                    _md_ops.popFront();
+                    _n_mismatches += 1;
+                }
+            }
+        }
+    }
+}
+
+auto makeExtendedCigar(CigarOpRange, MdOpRange)(CigarOpRange cigar, MdOpRange md_ops) {
+    return ExtendedCigarRange!(CigarOpRange, MdOpRange)(cigar, md_ops);
+}
+
+/** 
+  BAM record representation.
+*/
+struct BamRead {
+
+    mixin TagStorage;
+
+    /// Reference index in BAM file header
+    @property    int ref_id()           const nothrow { return _refID; }
+    /// ditto
+    @property   void ref_id(int n)                    { _dup(); _refID = n; }
+
+    /// Reference sequence name ('*' for unmapped reads)
+    @property string ref_name()         const nothrow { return _ref_id_to_string(ref_id); }
+
+    /// 0-based leftmost coordinate of the first matching base
+    @property    int position()         const nothrow { return _pos; }
+    /// ditto
+    @property   void position(int n)                  { _dup(); _pos = n; _recalculate_bin(); }
+
+    /// Indexing bin which this read belongs to. Recalculated when position is changed.
+    @property    bio.bam.bai.bin.Bin bin()              const nothrow { return Bin(_bin); }
+
+    /// Mapping quality. Equals to 255 if not available, otherwise
+    /// equals to rounded -10 * log10(P {mapping position is wrong}).
+    @property  ubyte mapping_quality()  const nothrow { return _mapq; }
+    /// ditto
+    @property   void mapping_quality(ubyte n)         { _dup(); _mapq = n; }
+
+    /// Flag bits (should be used on very rare occasions, see flag getters/setters below)
+    @property ushort flag()             const nothrow { return _flag; }
+    /// ditto
+    @property   void flag(ushort n)                   { _dup(); _flag = n; }
+
+    /// Sequence length. In fact, sequence.length can be used instead, but that might be
+    /// slower if the compiler is not smart enough to optimize away unrelated stuff.
+    @property    int sequence_length()  const nothrow { return _l_seq; }
+
+    /// Mate reference ID
+    @property    int mate_ref_id()      const nothrow { return _next_refID; }
+    /// ditto
+    @property   void mate_ref_id(int n)               { _dup(); _next_refID = n; }
+
+    /// Mate reference sequence name ('*' for unmapped mates)
+    @property string mate_ref_name()    const nothrow { return _ref_id_to_string(_next_refID); }
+
+    /// Mate position
+    @property    int mate_position()    const nothrow { return _next_pos; }
+    /// ditto
+    @property   void mate_position(int n)             { _dup(); _next_pos = n; }
+
+    /// Template length
+    @property    int template_length()  const nothrow { return _tlen; }
+    /// ditto
+    @property   void template_length(int n)           { _dup(); _tlen = n; }
+
+    // ------------------------ FLAG GETTERS/SETTERS -------------------------------------- //
+
+    /// Template having multiple segments in sequencing
+    @property bool is_paired()                const nothrow { return cast(bool)(flag & 0x1); }
+    /// ditto
+    @property void is_paired(bool b)                { _setFlag( 0, b); }
+
+    /// Each segment properly aligned according to the aligner
+    @property bool proper_pair()              const nothrow { return cast(bool)(flag & 0x2); }
+    /// ditto
+    @property void proper_pair(bool b)              { _setFlag( 1, b); }
+
+    /// Segment unmapped
+    @property bool is_unmapped()              const nothrow { return cast(bool)(flag & 0x4); }
+    /// ditto
+    @property void is_unmapped(bool b)              { _setFlag( 2, b); }
+
+    /// Next segment in the template unmapped
+    @property bool mate_is_unmapped()         const nothrow { return cast(bool)(flag & 0x8); }
+    /// ditto
+    @property void mate_is_unmapped(bool b)         { _setFlag( 3, b); } 
+
+    /// Sequence being reverse complemented
+    @property bool is_reverse_strand()        const nothrow { return cast(bool)(flag & 0x10); }
+    /// ditto
+    @property void is_reverse_strand(bool b)        { _setFlag( 4, b); } 
+
+    /// Sequence of the next segment in the template being reversed
+    @property bool mate_is_reverse_strand()   const nothrow { return cast(bool)(flag & 0x20); }
+    /// ditto
+    @property void mate_is_reverse_strand(bool b)   { _setFlag( 5, b); } 
+
+    /// The first segment in the template
+    @property bool is_first_of_pair()         const nothrow { return cast(bool)(flag & 0x40); }
+    /// ditto
+    @property void is_first_of_pair(bool b)         { _setFlag( 6, b); } 
+
+    /// The last segment in the template
+    @property bool is_second_of_pair()        const nothrow { return cast(bool)(flag & 0x80); }
+    /// ditto
+    @property void is_second_of_pair(bool b)        { _setFlag( 7, b); } 
+
+    /// Secondary alignment
+    @property bool is_secondary_alignment()   const nothrow { return cast(bool)(flag & 0x100); }
+    /// ditto
+    @property void is_secondary_alignment(bool b)   { _setFlag( 8, b); } 
+
+    /// Not passing quality controls
+    @property bool failed_quality_control()   const nothrow { return cast(bool)(flag & 0x200); }
+    /// ditto
+    @property void failed_quality_control(bool b)   { _setFlag( 9, b); } 
+
+    /// PCR or optical duplicate
+    @property bool is_duplicate()             const nothrow { return cast(bool)(flag & 0x400); }
+    /// ditto
+    @property void is_duplicate(bool b)             { _setFlag(10, b); } 
+
+    /// Supplementary alignment
+    @property bool is_supplementary()         const nothrow { return cast(bool)(flag & 0x800); }
+    /// ditto
+    @property void is_supplementary(bool b)         { _setFlag(11, b); }
+
+    /// Convenience function, returns '+' or '-' indicating the strand.
+    @property char strand() const nothrow {
+        return is_reverse_strand ? '-' : '+';
+    }
+
+    /// ditto
+    @property void strand(char c) {
+        enforce(c == '-' || c == '+', "Strand must be '-' or '+'");
+        is_reverse_strand = c == '-';
+    }
+
+    /// Read name, length must be in 1..255 interval.
+    @property string name() const nothrow {
+        // notice -1: the string is zero-terminated, so we should strip that '\0'
+        return cast(string)(_chunk[_read_name_offset .. _read_name_offset + _l_read_name - 1]);
+    }
+
+    /// ditto
+    @property void name(string new_name) {
+        enforce(new_name.length >= 1 && new_name.length <= 255, 
+                "name length must be in 1-255 range");
+        _dup();
+        bio.bam.utils.array.replaceSlice(_chunk, 
+                 _chunk[_read_name_offset .. _read_name_offset + _l_read_name - 1],
+                 cast(ubyte[])new_name);
+        _l_read_name = cast(ubyte)(new_name.length + 1);
+    }
+
+    /// List of CIGAR operations
+    @property const(CigarOperation)[] cigar() const nothrow {
+        return cast(const(CigarOperation)[])(_chunk[_cigar_offset .. _cigar_offset + 
+                                             _n_cigar_op * CigarOperation.sizeof]);
+    }
+
+    /// ditto
+    @property void cigar(const(CigarOperation)[] c) {
+        enforce(c.length < 65536, "Too many CIGAR operations, must be <= 65535");
+        _dup();
+        bio.bam.utils.array.replaceSlice(_chunk,
+             _chunk[_cigar_offset .. _cigar_offset + _n_cigar_op * CigarOperation.sizeof],
+             cast(ubyte[])c);
+
+        _n_cigar_op = cast(ushort)(c.length);
+
+        _recalculate_bin();
+    }
+
+    /// Extended CIGAR where M operators are replaced with =/X based
+    /// on information from MD tag. Throws if the read doesn't have MD
+    /// tag.
+    auto extended_cigar() @property const {
+        Value md = this["MD"];
+        enforce(md.is_string);
+        return makeExtendedCigar(cigar, mdOperations(*cast(string*)(&md)));
+    }
+
+    /// The number of reference bases covered by this read.
+    /// $(BR)
+    /// Returns 0 if the read is unmapped.
+    int basesCovered() const {
+
+        if (this.is_unmapped) {
+            return 0; // actually, valid alignments should have empty cigar string
+        }
+
+        return reduce!"a + b.length"(0, filter!"a.is_reference_consuming"(cigar));
+    }
+
+    /// Human-readable representation of CIGAR string (same as in SAM format)
+    string cigarString() const {
+        char[] str;
+
+        // guess size of resulting string
+        str.reserve(_n_cigar_op * 3);
+
+        foreach (cigar_op; cigar) {
+            str ~= to!string(cigar_op.length);
+            str ~= cigar_op.type;
+        }
+        return cast(string)str;
+    }
+
+    private @property inout(ubyte)[] raw_sequence_data() inout nothrow {
+        return _chunk[_seq_offset .. _seq_offset + (_l_seq + 1) / 2];
+    }
+
+    /// Read-only random-access range for access to sequence data.
+    static struct SequenceResult {
+
+        private size_t _index;
+        private ubyte[] _data = void;
+        private size_t _len = void;
+        private bool _use_first_4_bits = void;
+
+        this(const(ubyte[]) data, size_t len, bool use_first_4_bits=true) {
+            _data = cast(ubyte[])data;
+            _len = len;
+            _use_first_4_bits = use_first_4_bits;
+        }
+
+        ///
+        @property bool empty() const {
+            return _index >= _len;
+        }
+
+        ///
+        @property bio.core.base.Base front() const {
+            return opIndex(0);
+        }
+
+        ///
+        @property bio.core.base.Base back() const {
+            return opIndex(_len - 1);
+        }
+
+        /* 
+        I have no fucking idea why this tiny piece of code
+        does NOT get inlined by stupid DMD compiler.
+
+        Therefore I use string mixin instead. 
+        (hell yeah! Back to the 90s! C macros rulez!)
+
+        private size_t _getActualPosition(size_t index) const
+        {
+            if (_use_first_4_bits) {
+                // [0 1] [2 3] [4 5] [6 7] ...
+                //            |               
+                //            V               
+                //   0     1     2     3      
+                return index >> 1;
+            } else {
+                // [. 0] [1 2] [3 4] [5 6] ...
+                //            |               
+                //            V               
+                //   0     1     2     3      
+                return (index >> 1) + (index & 1);
+            }
+        }*/ 
+
+        private static string _getActualPosition(string index) {
+            return "((" ~ index ~") >> 1) + " ~ 
+                   "(_use_first_4_bits ? 0 : ((" ~ index ~ ") & 1))";
+        }
+
+        private bool _useFirst4Bits(size_t index) const
+        {
+            auto res = index % 2 == 0;
+            if (!_use_first_4_bits) {
+                res = !res;
+            }
+            return res;
+        }
+
+        ///
+        @property SequenceResult save() const {
+            return SequenceResult(_data[mixin(_getActualPosition("_index")) .. $], 
+                                  _len - _index, 
+                                  _useFirst4Bits(_index));
+        }
+
+        ///
+        SequenceResult opSlice(size_t i, size_t j) const {
+            return SequenceResult(_data[mixin(_getActualPosition("_index + i")) .. $], 
+                                  j - i, 
+                                  _useFirst4Bits(_index + i));
+        }
+
+        ///
+        @property bio.core.base.Base opIndex(size_t i) const {
+            auto pos = _index + i;
+
+            if (_use_first_4_bits)
+            {
+                if (pos & 1)
+                    return Base.fromInternalCode(_data[pos >> 1] & 0xF);
+                else
+                    return Base.fromInternalCode(_data[pos >> 1] >> 4);
+            }
+            else
+            {
+                if (pos & 1)
+                    return Base.fromInternalCode(_data[(pos >> 1) + 1] >> 4);
+                else
+                    return Base.fromInternalCode(_data[pos >> 1] & 0xF);
+            }
+
+            assert(false);
+        }
+
+        /// ditto
+        @property void opIndexAssign(bio.core.base.Base base, size_t i) {
+            auto pos = _index + i;
+
+            if (_use_first_4_bits)
+            {
+                if (pos & 1)
+                    _data[pos >> 1] &= 0xF0, _data[pos >> 1] |= base.internal_code;
+                else
+                    _data[pos >> 1] &= 0x0F, _data[pos >> 1] |= base.internal_code << 4;
+            }
+            else
+            {
+                if (pos & 1)
+                    _data[(pos >> 1) + 1] &= 0x0F, _data[(pos >> 1) + 1] |= base.internal_code << 4;
+                else
+                    _data[pos >> 1] &= 0xF0, _data[pos >> 1] |= base.internal_code;
+            }
+        }
+
+
+        ///
+        void popFront() {
+            ++_index;
+        }
+
+        ///
+        void popBack() {
+            --_len;
+        }
+
+        ///
+        @property size_t length() const {
+            return _len - _index;
+        }
+
+        alias length opDollar;
+
+        void toString(scope void delegate(const(char)[]) dg) const {
+            char[256] buf = void;
+            size_t total = this.length;
+            size_t written = 0;
+            while (written < total) {
+                size_t n = min(buf.length, total - written);
+                foreach (j; 0 .. n)
+                    buf[j] = opIndex(written + j).asCharacter;
+                dg(buf[0 .. n]);
+                written += n;
+            }
+        }
+    }
+
+    /// Random-access range of characters
+    @property SequenceResult sequence() const {
+        return SequenceResult(raw_sequence_data, sequence_length);
+    }
+
+    static assert(isRandomAccessRange!(ReturnType!sequence));
+
+    /// Sets query sequence. Sets all base qualities to 255 (i.e. unknown).
+    @property void sequence(string seq) 
+    {
+        _dup();
+
+        auto raw_length = (seq.length + 1) / 2;
+        // set sequence
+        auto replacement = uninitializedArray!(ubyte[])(raw_length + seq.length);
+        replacement[raw_length .. $] = 0xFF;
+        for (size_t i = 0; i < raw_length; ++i) {
+            replacement[i] = cast(ubyte)(Base(seq[2 * i]).internal_code << 4);
+
+            if (seq.length > 2 * i + 1)
+                replacement[i] |= cast(ubyte)(Base(seq[2 * i + 1]).internal_code);
+        }
+
+        bio.bam.utils.array.replaceSlice(_chunk, 
+                     _chunk[_seq_offset .. _tags_offset], 
+                     replacement);
+
+        _l_seq = cast(int)seq.length;
+    }
+
+    /// Quality data (phred-based scores)
+    @property inout(ubyte)[] base_qualities() inout nothrow {
+        return _chunk[_qual_offset .. _qual_offset + _l_seq * char.sizeof];
+    }
+
+    /// Set quality data - array length must be of the same length as the sequence.
+    @property void base_qualities(const(ubyte)[] quality) {
+        enforce(quality.length == _l_seq, "Quality data must be of the same length as sequence");
+        _dup();
+        _chunk[_qual_offset .. _qual_offset + _l_seq] = quality;
+    }
+
+    /*
+      Constructs the struct from memory chunk
+      */
+    this(ubyte[] chunk) {
+
+        // Switching endianness lazily is not a good idea:
+        //
+        // 1) switching byte order is pretty fast
+        // 2) lazy switching for arrays can kill the performance,
+        //    it has to be done once
+        // 3) the code will be too complicated, whereas there're
+        //    not so many users of big-endian systems
+        //
+        // In summa, BAM is little-endian format, so big-endian 
+        // users will suffer anyway, it's unavoidable.
+
+        _chunk = chunk;
+        this._is_slice = true;
+
+        if (std.system.endian != Endian.littleEndian) {
+            switchChunkEndianness();
+
+            // Dealing with tags is the responsibility of TagStorage.
+            fixTagStorageByteOrder();
+        }
+    } 
+
+    // Doesn't touch tags, only fields. 
+    // @@@TODO: NEEDS TESTING@@@
+    private void switchChunkEndianness() {
+        // First 8 fields are 32-bit integers:                 
+        //                                                     
+        // 0) refID                int                         
+        // 1) pos                  int                         
+        // 2) bin_mq_nl           uint                         
+        // 3) flag_nc             uint                         
+        // 4) l_seq                int                         
+        // 5) next_refID           int                         
+        // 6) next_pos             int                         
+        // 7) tlen                 int                         
+        // ----------------------------------------------------
+        // (after them name follows which is string)      
+        //                                                     
+        switchEndianness(_chunk.ptr, 8 * uint.sizeof);
+
+        // Then we need to switch endianness of CIGAR data:
+        switchEndianness(_chunk.ptr + _cigar_offset, 
+                         _n_cigar_op * uint.sizeof);
+    }
+ 
+    private size_t calculateChunkSize(string read_name, 
+                                      string sequence, 
+                                      in CigarOperation[] cigar)
+    {
+        return 8 * int.sizeof
+                 + (read_name.length + 1) // tailing '\0'
+                 + uint.sizeof * cigar.length
+                 + ubyte.sizeof * ((sequence.length + 1) / 2)
+                 + ubyte.sizeof * sequence.length;
+    }
+
+    /// Construct alignment from basic information about it.
+    ///
+    /// Other fields can be set afterwards.
+    this(string read_name,                          // info for developers:
+         string sequence,                           // these 3 fields are needed
+         in CigarOperation[] cigar)                 // to calculate size of _chunk
+    {
+        enforce(read_name.length < 256, "Too long read name, length must be <= 255");
+        enforce(cigar.length < 65536, "Too many CIGAR operations, must be <= 65535");
+
+        if (this._chunk is null) {
+            this._chunk = new ubyte[calculateChunkSize(read_name, sequence, cigar)];
+        }
+        
+        this._refID      =  -1;         // set default values
+        this._pos        =  -1;         // according to SAM/BAM
+        this._mapq       = 255;         // specification
+        this._next_refID =  -1;
+        this._next_pos   =  -1;
+        this._tlen       =   0;
+
+        this._l_read_name = cast(ubyte)(read_name.length + 1); // tailing '\0'
+        this._n_cigar_op  = cast(ushort)(cigar.length);
+        this._l_seq       = cast(int)(sequence.length);
+
+        // now all offsets can be calculated through corresponding properties
+
+        // set default quality
+        _chunk[_qual_offset .. _qual_offset + sequence.length] = 0xFF;
+
+        // set CIGAR data
+        auto _len = cigar.length * CigarOperation.sizeof;
+        _chunk[_cigar_offset .. _cigar_offset + _len] = cast(ubyte[])(cigar);
+
+        // set read_name
+        auto _offset = _read_name_offset;
+        _chunk[_offset .. _offset + read_name.length] = cast(ubyte[])read_name;
+        _chunk[_offset + read_name.length] = cast(ubyte)'\0';
+
+        this._is_slice = false;
+
+        this.sequence = sequence;
+    }
+
+    /// Deep copy of the record.
+    BamRead dup() @property const {
+        BamRead result;
+        result._chunk = this._chunk.dup;
+        result._is_slice = false;
+        result._modify_in_place = false;
+        result._reader = cast()_reader;
+        return result;
+    }
+
+    /// Compare two alignments, including tags 
+    /// (the tags must follow in the same order for equality).
+    bool opEquals(BamRead other) const pure nothrow {
+        // don't forget about _is_slice trick
+        auto m = _cigar_offset;
+        return _chunk[0 .. m - 1] == other._chunk[0 .. m - 1] &&
+               _chunk[m .. $] == other._chunk[m .. $];
+    }
+
+    bool opEquals(const(BamRead) other) const pure nothrow {
+        return opEquals(cast()other);
+    }
+
+    /// Size of the alignment record when output to stream in BAM format.
+    /// Includes block_size as well (see SAM/BAM specification)
+    @property size_t size_in_bytes() const {
+        return int.sizeof + _chunk.length;
+    }
+   
+    package void write(BamWriter writer) {
+        writer.writeInteger(cast(int)(_chunk.length));
+
+        ubyte old_byte = _chunk[_cigar_offset - 1];
+        _chunk[_cigar_offset - 1] = 0;
+
+        if (std.system.endian != Endian.littleEndian) {
+            switchChunkEndianness();
+            writer.writeByteArray(_chunk[0 .. _tags_offset]);
+            switchChunkEndianness();
+        } else {
+            writer.writeByteArray(_chunk[0 .. _tags_offset]);
+        }
+
+        _chunk[_cigar_offset - 1] = old_byte;
+
+        writeTags(writer);
+    }
+
+    /// Packs message in the following format:
+    /// $(BR)
+    /// MsgPack array with elements
+    ///   $(OL 
+    ///     $(LI name - string)
+    ///     $(LI flag - ushort)
+    ///     $(LI reference sequence id - int)
+    ///     $(LI leftmost mapping position (1-based) - int)
+    ///     $(LI mapping quality - ubyte)
+    ///     $(LI array of CIGAR operation lengths - int[])
+    ///     $(LI array of CIGAR operation types - ubyte[])
+    ///     $(LI mate reference sequence id - int)
+    ///     $(LI mate position (1-based) - int)
+    ///     $(LI template length - int)
+    ///     $(LI segment sequence - string)
+    ///     $(LI phred-base quality - ubyte[])
+    ///     $(LI tags - map: string -> value))
+    void toMsgpack(Packer)(ref Packer packer) const {
+        packer.beginArray(13);
+        packer.pack(cast(ubyte[])name);
+        packer.pack(flag);
+        packer.pack(ref_id);
+        packer.pack(position + 1);
+        packer.pack(mapping_quality);
+        packer.pack(array(map!"a.length"(cigar)));
+        packer.pack(array(map!"a.type"(cigar)));
+        packer.pack(mate_ref_id);
+        packer.pack(mate_position);
+        packer.pack(template_length);
+        packer.pack(to!string(sequence));
+        packer.pack(base_qualities);
+
+        packer.beginMap(tagCount());
+        foreach (key, value; this) {
+            packer.pack(key);
+            packer.pack(value);
+        }
+    }
+
+    /// String representation.
+    /// $(BR)
+    /// Possible formats are SAM ("%s") and JSON ("%j")
+    void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) const {
+        if (size_in_bytes < 10000 && fmt.spec == 's') {
+            auto p = cast(char*)alloca(size_in_bytes * 5);
+            char* end = p;
+            toSam(end);
+            sink(p[0 .. end - p]);
+        } else if (size_in_bytes < 5000 && fmt.spec == 'j') {
+            auto p = cast(char*)alloca(size_in_bytes * 10 + 1000);
+            char* end = p;
+            toJson(end);
+            sink(p[0 .. end - p]);
+        } else if (fmt.spec == 's') {
+            toSam(sink);
+        } else if (fmt.spec == 'j') {
+            toJson(sink);
+        } else {
+            throw new FormatException("unknown format specifier");
+        }
+    }
+    
+    /// ditto
+    void toSam(Sink)(auto ref Sink sink) const 
+        if (isSomeSink!Sink)
+    {
+        sink.write(name);
+        sink.write('\t');
+        sink.write(flag);
+        sink.write('\t');
+        if (ref_id == -1 || _reader is null)
+            sink.write('*');
+        else
+            sink.write(_reader.reference_sequences[ref_id].name);
+
+        sink.write('\t');
+        sink.write(position + 1);
+        sink.write('\t');
+        sink.write(mapping_quality);
+        sink.write('\t');
+
+        if (cigar.length == 0)
+            sink.write('*');
+        else
+            foreach (op; cigar)
+                op.toSam(sink);
+
+        sink.write('\t');
+
+        if (mate_ref_id == ref_id) {
+            if (mate_ref_id == -1)
+                sink.write("*\t");
+            else
+                sink.write("=\t");
+        } else {
+            if (mate_ref_id == -1 || _reader is null) {
+                sink.write("*\t");
+            } else {
+                auto mate_name = _reader.reference_sequences[mate_ref_id].name;
+                sink.write(mate_name);
+                sink.write("\t");
+            }
+        }
+
+        sink.write(mate_position + 1);
+        sink.write('\t');
+        sink.write(template_length);
+        sink.write('\t');
+
+        if (sequence_length == 0)
+            sink.write('*');
+        else
+            foreach (char c; sequence)
+                sink.write(c);
+        sink.write('\t');
+
+        if (base_qualities.length == 0 || base_qualities[0] == 0xFF)
+            sink.write('*');
+        else
+            foreach (qual; base_qualities)
+                sink.write(cast(char)(qual + 33));
+
+        foreach (k, v; this) {
+            sink.write('\t');
+            sink.write(k);
+            sink.write(':');
+            v.toSam(sink);
+        }
+    }
+
+    /// ditto
+    string toSam()() const {
+        return to!string(this);
+    }
+
+    /// JSON representation
+    void toJson(Sink)(auto ref Sink sink) const
+        if (isSomeSink!Sink)
+    {
+        sink.write(`{"qname":`); sink.writeJson(name);
+        sink.write(`,"flag":`); sink.write(flag);
+
+        sink.write(`,"rname":`);
+        if (ref_id == -1 || _reader is null)
+            sink.write(`"*"`);
+        else
+            sink.writeJson(_reader.reference_sequences[ref_id].name);
+
+        sink.write(`,"pos":`); sink.write(position + 1);
+        sink.write(`,"mapq":`); sink.write(mapping_quality);
+
+        sink.write(`,"cigar":"`);
+        if (cigar.empty)
+            sink.write('*');
+        else
+            foreach (op; cigar)
+                op.toSam(sink);
+        sink.write('"');
+
+        sink.write(`,"rnext":`);
+        if (mate_ref_id == ref_id) {
+            if (mate_ref_id == -1)
+                sink.write(`"*"`);
+            else
+                sink.write(`"="`);
+        } else if (mate_ref_id == -1 || _reader is null) {
+            sink.write(`"*"`);
+        } else {
+            sink.writeJson(_reader.reference_sequences[mate_ref_id].name);
+        }
+        
+        sink.write(`,"pnext":`); sink.write(mate_position + 1);
+        sink.write(`,"tlen":`); sink.write(template_length);
+     
+        sink.write(`,"seq":"`);
+        if (sequence_length == 0)
+            sink.write('*');
+        else
+            foreach (char c; sequence)
+                sink.write(c);
+        sink.write('"');
+
+        sink.write(`,"qual":`);
+        sink.writeJson(base_qualities);
+
+        sink.write(`,"tags":{`);
+   
+        bool not_first = false;
+        foreach (k, v; this) {
+            if (not_first)
+                sink.write(',');
+            sink.writeJson(k);
+            sink.write(':');
+            v.toJson(sink);
+            not_first = true;
+        }
+
+        sink.write("}}");
+    }
+
+    /// ditto
+    string toJson()() const {
+        auto w = appender!(char[])();
+        toJson((const(char)[] s) { w.put(s); });
+        return cast(string)w.data;
+    }
+
+    /// Associates read with BAM reader. This is done automatically
+    /// if this read is obtained through BamReader/Reference methods.
+    void associateWithReader(bio.bam.abstractreader.IBamSamReader reader) {
+        _reader = reader;
+    }
+
+    /// Associated BAM/SAM reader.
+    inout(bio.bam.abstractreader.IBamSamReader) reader() @property inout {
+        return _reader;
+    }
+
+    ///
+    bool is_slice_backed() @property const {
+        return _is_slice;
+    }
+
+    /// Raw representation of the read. Occasionally useful for dirty hacks!
+    inout(ubyte)[] raw_data() @property inout {
+        return _chunk;
+    }
+
+    /// ditto
+    void raw_data(ubyte[] data) @property {
+        _chunk = data;
+    }
+    
+    package ubyte[] _chunk; // holds all the data, 
+                    // the access is organized via properties
+                    // (see below)
+
+private:
+
+    // by specs, name ends with '\0'
+    // let's use this byte for something useful!
+    //
+    // (Of course this places some restrictions on usage,
+    //  but allows to reduce size of record.)
+    bool _is_slice() @property const {
+        return cast(bool)(_chunk[_cigar_offset - 1] & 1);
+    }
+
+    void _is_slice(bool is_slice) @property {
+        _chunk[_cigar_offset - 1] &= 0b11111110;
+        _chunk[_cigar_offset - 1] |= (is_slice ? 1 : 0);
+    }
+
+    // don't call _dup() if the record is modified
+    bool _modify_in_place() @property const {
+        return cast(bool)(_chunk[_cigar_offset - 1] & 2);
+    }
+
+    void _modify_in_place(bool in_place) @property {
+        _chunk[_cigar_offset - 1] &= 0b11111101;
+        _chunk[_cigar_offset - 1] |= (in_place ? 2 : 0);
+    }
+
+    IBamSamReader _reader;
+
+    string _ref_id_to_string(int ref_id) const nothrow {
+        if (_reader is null)
+            return "?";
+        if (ref_id < 0)
+            return "*";
+        return _reader.reference_sequences[ref_id].name;
+    }
+
+    // Official field names from SAM/BAM specification.
+    // For internal use only
+    @property  int _refID()      const nothrow { 
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 0)); 
+    }
+
+    @property  int _pos()        const nothrow { 
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 1)); 
+    }
+
+    @property uint _bin_mq_nl()  const nothrow pure @system { 
+        return *(cast(uint*)(_chunk.ptr + int.sizeof * 2)); 
+    }
+
+    @property uint _flag_nc()    const nothrow { 
+        return *(cast(uint*)(_chunk.ptr + int.sizeof * 3)); 
+    }
+
+    @property  int _l_seq()      const nothrow { 
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 4)); 
+    }
+
+    @property  int _next_refID() const nothrow {
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 5)); 
+    }
+
+    @property  int _next_pos()   const nothrow { 
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 6)); 
+    }
+
+    @property  int _tlen()       const nothrow {
+        return *(cast( int*)(_chunk.ptr + int.sizeof * 7)); 
+    }
+
+    // Setters, also only for internal use
+    @property void _refID(int n)       { *(cast( int*)(_chunk.ptr + int.sizeof * 0)) = n; }
+    @property void _pos(int n)         { *(cast( int*)(_chunk.ptr + int.sizeof * 1)) = n; }
+    @property void _bin_mq_nl(uint n)  { *(cast(uint*)(_chunk.ptr + int.sizeof * 2)) = n; }
+    @property void _flag_nc(uint n)    { *(cast(uint*)(_chunk.ptr + int.sizeof * 3)) = n; }
+    @property void _l_seq(int n)       { *(cast( int*)(_chunk.ptr + int.sizeof * 4)) = n; }
+    @property void _next_refID(int n)  { *(cast( int*)(_chunk.ptr + int.sizeof * 5)) = n; }
+    @property void _next_pos(int n)    { *(cast( int*)(_chunk.ptr + int.sizeof * 6)) = n; }
+    @property void _tlen(int n)        { *(cast( int*)(_chunk.ptr + int.sizeof * 7)) = n; }
+
+    // Additional useful properties, also from SAM/BAM specification
+    //
+    //             The layout of bin_mq_nl and flag_nc is as follows
+    //                     (upper bits -------> lower bits):
+    // 
+    // bin_mq_nl [ { bin (16b) }  { mapping quality (8b) } { read name length (8b) } ]
+    //
+    // flag_nc   [ { flag (16b) } { n_cigar_op (16b) } ]
+    //
+    @property ushort _bin()         const nothrow { 
+        return _bin_mq_nl >> 16; 
+    }
+    @property  ubyte _mapq()        const nothrow { 
+        return (_bin_mq_nl >> 8) & 0xFF; 
+    }
+    @property  ubyte _l_read_name() const nothrow pure { 
+        return _bin_mq_nl & 0xFF; 
+    }
+    @property ushort _flag()        const nothrow { 
+        return _flag_nc >> 16; 
+    }
+    @property ushort _n_cigar_op()  const nothrow { 
+        return _flag_nc & 0xFFFF; 
+    }
+  
+    // Setters for those properties
+    @property void _bin(ushort n)         { _bin_mq_nl = (_bin_mq_nl &  0xFFFF) | (n << 16); } 
+    @property void _mapq(ubyte n)         { _bin_mq_nl = (_bin_mq_nl & ~0xFF00) | (n << 8); }
+    @property void _l_read_name(ubyte n)  { _bin_mq_nl = (_bin_mq_nl & ~0xFF  ) | n; }
+    @property void _flag(ushort n)        { _flag_nc   = (_flag_nc   &  0xFFFF) | (n << 16); }
+    @property void _n_cigar_op(ushort n)  { _flag_nc   = (_flag_nc   & ~0xFFFF) | n; }
+
+    // Offsets of various arrays in bytes.
+    // Currently, are computed each time, so if speed will be an issue,
+    // they can be made fields instead of properties.
+    @property size_t _read_name_offset() const nothrow pure { 
+        return 8 * int.sizeof; 
+    }
+
+    @property size_t _cigar_offset()     const nothrow pure { 
+        return _read_name_offset + _l_read_name * char.sizeof; 
+    }
+
+    @property size_t _seq_offset()       const nothrow { 
+        return _cigar_offset + _n_cigar_op * uint.sizeof; 
+    }
+
+    @property size_t _qual_offset()      const nothrow { 
+        return _seq_offset + (_l_seq + 1) / 2;
+    }
+
+    // Offset of auxiliary data
+    @property size_t _tags_offset()      const nothrow { 
+        return _qual_offset + _l_seq;
+    }
+
+    // Sets n-th flag bit to boolean value b.
+    void _setFlag(int n, bool b) {
+        assert(n < 16);
+        // http://graphics.stanford.edu/~seander/bithacks.html#ConditionalSetOrClearBitsWithoutBranching
+        ushort mask = cast(ushort)(1 << n);
+        _flag = (_flag & ~mask) | ((-cast(int)b) & mask);
+    }
+
+    // If _chunk is still a slice, not an array, duplicate it.
+    // Used when some part of alignment record is modified by user.
+    //
+    // Basically, it's sort of copy-on-write: a lot of read-only alignments
+    // may point to the same location, but every modified one allocates its
+    // own chunk of memory.
+    void _dup() {
+        if (_is_slice && !_modify_in_place) {
+            _chunk = _chunk.dup;
+            _is_slice = false;
+        }
+    }
+
+public:
+    // Calculates bin number.
+    void _recalculate_bin() {
+        _bin = reg2bin(position, position + basesCovered());
+    }
+}
+
+
+/// Lazy tag storage. 
+///
+///   Provides hash-like access and opportunity to iterate
+///   storage like an associative array.
+mixin template TagStorage() {
+
+    // Provides access to chunk of memory which contains tags.
+    // This way, every time _tags_offset gets updated
+    // (due to update of cigar string/read name/sequence and memory move),
+    // the change is reflected automatically in tag storage.
+    private @property const(ubyte)[] _tags_chunk() const  {
+        return _chunk[_tags_offset .. $];
+    }
+
+    /// Hash-like access to tags. Time complexity is $(BIGOH number of tags).
+    /// $(BR)
+    /// If tag with such $(I key) is not found, returned value 'is nothing'.
+    /// $(BR)
+    /// If key length is different from 2, exception is thrown.
+    /// $(BR)
+    /// Special case when $(I value) represents nothing is used for removing tag
+    /// (assuming that no more than one with this key is presented in the record).
+    ///
+    /// Examples:
+    /// ----------------------------
+    /// auto v = read["NM"];
+    /// assert(v.is_integer);
+    ///
+    /// auto v = read["MN"];
+    /// assert(v.is_nothing); // no such tag
+    ///
+    /// read["NM"] = 3; // converted to bio.bam.tagvalue.Value implicitly
+    ///
+    /// read["NM"] = null; // removes tag
+    /// assert(read["NM"].is_nothing);
+    /// ----------------------------
+    bio.bam.tagvalue.Value opIndex(string key) const {
+        enforce(key.length == 2, "Key length must be 2");
+        auto __tags_chunk = _tags_chunk; // _tags_chunk is evaluated lazily
+        if (__tags_chunk.length < 4)
+            return Value(null);
+        
+       size_t offset = 0;
+       while (offset + 1 < __tags_chunk.length) {
+           if (__tags_chunk[offset .. offset + 2] == key) {
+               offset += 2;
+               return readValue(offset, __tags_chunk);
+           } else {
+               offset += 2;
+               skipValue(offset, __tags_chunk);
+           }
+       }
+       return Value(null);
+    }
+
+    /// ditto
+    void opIndexAssign(T)(T value, string key) 
+        if (is(T == Value) || __traits(compiles, GetTypeId!T)) 
+    {
+        static if(is(T == Value)) {
+            enforce(key.length == 2, "Key length must be 2");
+            auto __tags_chunk = _tags_chunk;
+
+            _dup();
+
+            size_t offset = 0;
+            while (offset + 1 < __tags_chunk.length) {
+                if (__tags_chunk[offset .. offset + 2] == key) {
+                    if (value.is_nothing) {
+                        // special case - remove tag
+                        removeValueAt(offset);
+                    } else {
+                        replaceValueAt(offset + 2, value);
+                    }
+                    return;
+                } else {
+                    offset += 2;
+                    skipValue(offset, __tags_chunk);
+                }
+            }
+
+            if (!value.is_nothing)
+                appendTag(key, value);
+        } else {
+            opIndexAssign(Value(value), key);
+        }
+    }
+
+    /// Append new tag to the end, skipping check if it already exists. $(BIGOH 1)
+    void appendTag(string key, Value value) {
+        auto oldlen = _chunk.length;
+        _chunk.length = _chunk.length + sizeInBytes(value) + 2 * char.sizeof;
+        _chunk[oldlen .. oldlen + 2] = cast(ubyte[])key;
+        emplaceValue(_chunk.ptr + oldlen + 2, value);
+    }
+
+    /// Remove all tags
+    void clearAllTags() {
+        _chunk.length = _tags_offset;
+    }
+
+    /// Number of tags. $(BIGOH number of tags)
+    size_t tagCount() {
+        size_t result = 0;
+        size_t offset = 0;
+        auto __tags_chunk = _tags_chunk;
+        while (offset + 1 < __tags_chunk.length) {
+            offset += 2;
+            skipValue(offset, __tags_chunk);
+            result += 1;
+        }
+        return result;
+    }
+
+    // replace existing tag
+    private void replaceValueAt(size_t offset, Value value) {
+        // offset points to the beginning of the value
+        auto begin = offset;
+        auto __tags_chunk = _tags_chunk;
+        skipValue(offset, __tags_chunk); // now offset is updated and points to the end
+        auto end = offset;
+        
+        prepareSlice(_chunk, __tags_chunk[begin .. end], sizeInBytes(value));
+
+        emplaceValue(_chunk.ptr + _tags_offset + begin, value);
+    }
+
+    // remove existing tag
+    private void removeValueAt(size_t begin) {
+        // offset points to the beginning of the value
+        auto offset = begin + 2;
+        auto __tags_chunk = _tags_chunk;
+        skipValue(offset, __tags_chunk);
+        auto end = offset;
+        // this does the job (see prepareSlice code)
+        prepareSlice(_chunk, __tags_chunk[begin .. end], 0);
+    }
+
+    ///  Provides opportunity to iterate over tags.
+    int opApply(scope int delegate(const ref string k, const ref Value v) dg) const {
+        size_t offset = 0;
+        auto __tags_chunk = _tags_chunk;
+        while (offset + 1 < __tags_chunk.length) {
+            auto key = cast(string)__tags_chunk[offset .. offset + 2];
+            offset += 2;
+            auto val = readValue(offset, __tags_chunk);
+            auto res = dg(key, val);
+            if (res != 0) {
+                return res;
+            }
+        }
+        return 0;
+    }
+
+    /// Returns the number of tags. Time complexity is $(BIGOH number of tags)
+    size_t tagCount() const {
+        size_t res = 0;
+        size_t offset = 0;
+        auto __tags_chunk = _tags_chunk;
+        while (offset + 1 < __tags_chunk.length) {
+            offset += 2;
+            skipValue(offset, __tags_chunk);
+            res += 1;
+        }
+        return res;
+    }
+
+    private void writeTags(BamWriter writer) {
+        if (std.system.endian == Endian.littleEndian) {
+            writer.writeByteArray(_tags_chunk[]);
+        } else {
+            fixTagStorageByteOrder();                                
+            writer.writeByteArray(_tags_chunk[]);
+            fixTagStorageByteOrder();                                
+        }
+    }
+
+    // Reads value which starts from (_tags_chunk.ptr + offset) address,
+    // and updates offset to the end of value. O(1)
+    private Value readValue(ref size_t offset, const(ubyte)[] tags_chunk) const {
+        char type = cast(char)tags_chunk[offset++];
+        return readValueFromArray(type, tags_chunk, offset);
+    }
+
+    // Increases offset so that it points to the next value. O(1).
+    private void skipValue(ref size_t offset, const(ubyte)[] tags_chunk) const {
+        char type = cast(char)tags_chunk[offset++];
+        if (type == 'Z' || type == 'H') {
+            while (tags_chunk[offset++] != 0) {}
+        } else if (type == 'B') {
+            char elem_type = cast(char)tags_chunk[offset++];
+            auto length = *(cast(uint*)(tags_chunk.ptr + offset));
+            offset += uint.sizeof + charToSizeof(elem_type) * length;
+        } else {
+            offset += charToSizeof(type);
+        }
+    }
+
+    /*
+      Intended to be used in constructor for initial endianness fixing
+      in case the library is used on big-endian system.
+
+      NOT TESTED AT ALL!!!
+    */
+    private void fixTagStorageByteOrder() {
+        /* TODO: TEST ON BIG-ENDIAN SYSTEM!!! */
+        const(ubyte)* p = _tags_chunk.ptr;
+        const(ubyte)* end = p + _chunk.length;
+        while (p < end) {
+            p += 2; // skip tag name
+            char type = *(cast(char*)p);
+            ++p; // skip type
+            if (type == 'Z' || type == 'H') {
+                while (*p != 0) { // zero-terminated
+                    ++p;          // string
+                }
+                ++p; // skip '\0'
+            } else if (type == 'B') { // array
+                char elem_type = *(cast(char*)p);
+                uint size = charToSizeof(elem_type);
+                switchEndianness(p, uint.sizeof);
+                uint length = *(cast(uint*)p);
+                p += uint.sizeof; // skip length
+                if (size != 1) {
+                    for (auto j = 0; j < length; j++) {
+                        switchEndianness(p, size);
+                        p += size;
+                    }
+                } else {
+                    // skip 
+                    p += length;
+                }
+            } else {
+                uint size = charToSizeof(type);
+                if (size != 1) {
+                    switchEndianness(p, size);
+                    p += size;
+                } else {
+                    ++p;
+                }
+            }
+        }
+    }
+}
+
+unittest {
+
+    import std.algorithm;
+    import std.stdio;
+    import std.math;
+
+    writeln("Testing BamRead behaviour...");
+    auto read = BamRead("readname", 
+                        "AGCTGACTACGTAATAGCCCTA", 
+                        [CigarOperation(22, 'M')]);
+    assert(read.sequence_length == 22);
+    assert(read.cigar.length == 1);
+    assert(read.cigarString() == "22M");
+    assert(read.name == "readname");
+    assert(equal(read.sequence(), "AGCTGACTACGTAATAGCCCTA"));
+
+    read.name = "anothername";
+    assert(read.name == "anothername");
+    assert(read.cigarString() == "22M");
+
+    read.base_qualities = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
+                           13, 14, 15, 16, 17, 18, 19, 20, 21, 22];
+    assert(reduce!"a+b"(0, read.base_qualities) == 253);
+
+    read["RG"] = 15;
+    assert(read["RG"] == 15);
+
+    read["X1"] = [1, 2, 3, 4, 5];
+    assert(read["X1"] == [1, 2, 3, 4, 5]);
+
+    read.cigar = [CigarOperation(20, 'M'), CigarOperation(2, 'X')];
+    assert(read.cigarString() == "20M2X");
+
+    read["RG"] = cast(float)5.6;
+    assert(approxEqual(to!float(read["RG"]), 5.6));
+
+    read.sequence = "AGCTGGCTACGTAATAGCCCT";
+    assert(read.sequence_length == 21);
+    assert(read.base_qualities.length == 21);
+    assert(read.base_qualities[20] == 255);
+    assert(equal(read.sequence(), "AGCTGGCTACGTAATAGCCCT"));
+    assert(retro(read.sequence)[2] == 'C');
+    assert(retro(read.sequence)[0] == 'T');
+    assert(read.sequence[4] == 'G');
+    assert(read.sequence[0] == 'A');
+    assert(equal(read.sequence[0..8], "AGCTGGCT"));
+    assert(equal(read.sequence[3..5], "TG"));
+    assert(equal(read.sequence[3..9][1..4], "GGC"));
+
+    read["X1"] = 42;
+    assert(read["X1"] == 42);
+
+    assert(read.tagCount() == 2);
+
+    read["X1"] = null;
+    assert(read["X1"].is_nothing);
+    assert(read.tagCount() == 1);
+    read.sequence = "GTAAGCTGGCACTAGCAGCCT";
+    read.cigar = [CigarOperation(read.sequence_length, 'M')];
+    read["RG"] = null;
+    read["RG"] = "readgroup1";
+    assert(read.tagCount() == 1);
+    read["RG"] = null;
+    assert(read.tagCount() == 0);
+
+    read.sequence[5] = Base('N');
+    read.sequence[6] = Base('A');
+    read.sequence[7] = Base('C');
+    read.sequence[8] = Base('G');
+    read.base_qualities[5] = 42;
+    assert(read.sequence[5 .. 9].equal("NACG"));
+    assert(read.base_qualities[5] == 42);
+
+    // Test MsgPack serialization/deserialization
+
+    {
+    import std.typecons;
+    auto packer = bio.bam.thirdparty.msgpack.packer(Appender!(ubyte[])());
+    read.toMsgpack(packer);
+    auto data = packer.stream.data;
+    auto rec = unpack(data).via.array;
+    assert(rec[0].as!(ubyte[]) == "anothername");
+    assert(rec[5].as!(int[]) == [21]);
+    assert(rec[6].as!(ubyte[]) == ['M']);
+    assert(rec[10].as!(ubyte[]) == to!string(read.sequence));
+    }
+
+    read.clearAllTags();
+    assert(read.tagCount() == 0);
+}
+
+/// $(P BamRead wrapper which precomputes $(D end_position) = $(D position) + $(D basesCovered()).)
+///
+/// $(P Computation of basesCovered() takes quite a few cycles. Therefore in places where this
+/// property is frequently accessed, it makes sense to precompute it for later use.)
+///
+/// $(P The idea is that this should be a drop-in replacement for BamRead in algorithms,
+/// as the struct uses 'alias this' construction for the wrapped read.)
+struct EagerBamRead(R=BamRead) {
+    /// 
+    this(R read) {
+        this.read = read;
+        this.end_position = read.position + read.basesCovered();
+    }
+
+    ///
+    R read;
+    ///
+    alias read this;
+ 
+    /// End position on the reference, computed as position + basesCovered().
+    int end_position;
+
+    ///
+    EagerBamRead dup() @property const {
+        return EagerBamRead(read.dup);
+    }
+}
+
+static assert(is(EagerBamRead!BamRead : BamRead));
+
+/// Checks if $(D T) behaves like $(D BamRead)
+template isBamRead(T)
+{
+    static if (is(Unqual!T : BamRead))
+        enum isBamRead = true;
+    else 
+        enum isBamRead = __traits(compiles, 
+        {
+            T t; bool p;
+            p = t.ref_id == 1;          p = t.position == 2;          p = t.bin.id == 3;  
+            p = t.mapping_quality == 4; p = t.flag == 5;              p = t.sequence_length == 6;
+            p = t.mate_ref_id == 7;     p = t.mate_position == 8;     p = t.template_length == 9;
+            p = t.is_paired;            p = t.proper_pair;            p = t.is_unmapped;
+            p = t.mate_is_unmapped;     p = t.mate_is_reverse_strand; p = t.is_first_of_pair;
+            p = t.is_second_of_pair;    p = t.is_secondary_alignment; p = t.failed_quality_control;
+            p = t.is_duplicate;         p = t.strand == '+';          p = t.name == "";
+            p = t.cigar[0].type == 'M'; p = t.basesCovered() > 42;    p = t.cigarString() == "";
+            p = t.sequence[0] == 'A';   p = t.base_qualities[0] == 0;
+        });
+}
+
+/// $(P Comparison function for 'queryname' sorting order
+/// (return whether first read is 'less' than second))
+///
+/// $(P This function can be called on:
+///   $(UL 
+///     $(LI two reads)
+///     $(LI read and string in any order)))
+bool compareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2) 
+    if (isBamRead!R1 && isBamRead!R2)
+{
+    return a1.name < a2.name;
+}
+
+bool compareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2) 
+    if (isBamRead!R1 && isSomeString!R2)
+{
+    return a1.name < a2;
+}
+
+bool compareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2) 
+    if (isSomeString!R1 && isBamRead!R2)
+{
+    return a1 < a2.name;
+}
+
+int mixedStrCompare(string a, string b) {
+  import std.ascii : isDigit;
+  while (!a.empty && !b.empty) {
+    if (a.front.isDigit && b.front.isDigit) {
+      // skip zeros
+      int za, zb;
+      while (!a.empty && a.front == '0') { ++za; a.popFront(); }
+      while (!b.empty && b.front == '0') { ++zb; b.popFront(); }
+
+      // skip equal digits
+      while (!a.empty && !b.empty && a.front.isDigit && a.front == b.front) {
+        a.popFront();
+        b.popFront();
+      }
+
+      if (!a.empty && !b.empty && a.front.isDigit && b.front.isDigit) {
+        // the number of leading digits in each string is non-zero
+        size_t i = 0, maxi = min(a.length, b.length);
+        while (i < maxi && a[i].isDigit && b[i].isDigit) ++i;
+        if (i < a.length && a[i].isDigit) return 1; // a contains more digits
+        if (i < b.length && b[i].isDigit) return -1; // b contains more digits
+        // the counts are equal, compare first digits
+        return cast(byte)a.front - cast(byte)b.front;
+      } else if (!a.empty && a.front.isDigit) return 1;
+        else if (!b.empty && b.front.isDigit) return -1;
+        else if (za != zb) return za - zb;  // order by the number of leading zeros
+    } else {
+      // lexicographical comparison for non-digits
+      if (a.front != b.front) return cast(byte)a.front - cast(byte)b.front;
+      a.popFront(); b.popFront();
+    }
+  }
+  return (!a.empty) ? 1 : (!b.empty) ? -1 : 0;
+}
+
+/// $(P Comparison function for 'queryname' sorting order as in Samtools
+/// (returns whether first read is 'less' than second in a 'mixed' order,
+///  i.e. numbers inside the strings are compared by their integer value))
+///
+/// $(P This function can be called on:
+///   $(UL
+///     $(LI two reads)
+///     $(LI read and string in any order)))
+bool mixedCompareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isBamRead!R1 && isBamRead!R2)
+{
+    return mixedStrCompare(a1.name, a2.name) < 0;
+}
+
+bool mixedCompareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isBamRead!R1 && isSomeString!R2)
+{
+    return mixedStrCompare(a1.name, a2) < 0;
+}
+
+bool mixedCompareReadNames(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isSomeString!R1 && isBamRead!R2)
+{
+    return mixedStrCompare(a1, a2.name) < 0;
+}
+
+unittest {
+  assert(mixedStrCompare("BC0123", "BC01234") < 0);
+  assert(mixedStrCompare("BC0123", "BC0123Z") < 0);
+  assert(mixedStrCompare("BC01234", "BC01234") == 0);
+  assert(mixedStrCompare("BC0123DEF45", "BC01234DEF45") < 0);
+  assert(mixedStrCompare("BC01236DEF45", "BC01234DEF45") > 0);
+  assert(mixedStrCompare("BC012", "BC0012") < 0);
+  assert(mixedStrCompare("BC0012DE0034", "BC0012DE34") > 0);
+  assert(mixedStrCompare("BC12DE0034", "BC012DE34") < 0);
+  assert(mixedStrCompare("1235", "1234") > 0);
+}
+
+/// $(P Comparison function for 'coordinate' sorting order
+/// (returns whether first read is 'less' than second))
+///
+/// $(P This function can be called on:
+///   $(UL 
+///     $(LI two reads (in this case, reference IDs are also taken into account))
+///     $(LI read and integer in any order)))
+bool compareCoordinates(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isBamRead!R1 && isBamRead!R2)
+{
+    if (a1.ref_id == -1) return false; // unmapped reads should be last
+    if (a2.ref_id == -1) return true;
+    if (a1.ref_id < a2.ref_id) return true;
+    if (a1.ref_id > a2.ref_id) return false;
+    if (a1.position < a2.position) return true;
+    if (a1.position > a2.position) return false;
+    return !a1.is_reverse_strand && a2.is_reverse_strand;
+}
+
+bool compareCoordinates(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isBamRead!R1 && isIntegral!R2)
+{
+    return a1.position < a2;
+}
+
+bool compareCoordinates(R1, R2)(const auto ref R1 a1, const auto ref R2 a2)
+    if (isIntegral!R1 && isBamRead!R2)
+{
+    return a1 < a2.position;
+}
+
+static assert(isTwoWayCompatible!(compareReadNames, BamRead, string));
+static assert(isTwoWayCompatible!(compareCoordinates, BamRead, int));
+
+/// Allows modification of the read in-place even if it's slice-backed.
+struct UniqueRead(R) {
+    R read;
+    alias read this;
+
+    this(R read) {
+        this.read = read;
+        this.read._modify_in_place = true;
+    }
+
+    ~this() {
+        this.read._modify_in_place = false;
+    }
+}
+
+/// ditto
+auto assumeUnique(R)(auto ref R read) if (isBamRead!R) {
+    return UniqueRead!R(read);
+}
diff --git a/bio/bam/reader.d b/bio/bam/reader.d
new file mode 100644
index 0000000..fae864f
--- /dev/null
+++ b/bio/bam/reader.d
@@ -0,0 +1,594 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/// Writing a script/tool for processing BAM data often starts this way:
+/// 
+/// ------------------------
+/// import bio.bam.reader;
+///
+/// void main(string[] args) {
+///     auto bam = new BamReader(args[1]); // open BAM file
+///     foreach (read; bam.reads) {        // iterate through its reads
+///         if (read.is_unmapped)
+///             continue;                  // maybe skip unmapped ones
+///         ...
+///     }
+/// }
+/// ------------------------
+/// 
+/// Or, if a specific interval on the reference sequence is to be explored:
+/// ------------------------
+/// import bio.bam.pileup;
+/// ...
+/// auto reads = bam["chr7"][50_000 .. 60_000]; // BAI index is required
+/// foreach (column; makePileup(reads)) { ... } // see $(PMODULE pileup) docs
+/// ------------------------
+module bio.bam.reader;
+
+import bio.bam.abstractreader;
+public import bio.sam.header;
+public import bio.bam.reference;
+public import bio.bam.region;
+public import bio.bam.read;
+public import bio.bam.tagvalue;
+public import bio.bam.readrange;
+import bio.bam.randomaccessmanager;
+import bio.bam.baifile;
+import bio.bam.bai.indexing;
+import bio.core.utils.range;
+import bio.core.utils.stream;
+import bio.core.bgzf.inputstream;
+public import bio.core.bgzf.virtualoffset;
+
+import std.system;
+import std.stdio;
+import std.algorithm;
+import std.range;
+import std.conv;
+import std.exception;
+import std.parallelism;
+import std.array;
+import core.stdc.stdio;
+import std.string;
+
+/**
+  BAM file reader, featuring parallel decompression of BGZF blocks.
+ */
+class BamReader : IBamSamReader {
+
+    /**
+      Creates reader associated with file or stream.
+      (If stream constructor is used, no random access is possible.)
+      $(BR)
+      Optionally, task pool can be specified. 
+      It will be used to unpack BGZF blocks in parallel.
+
+      Example:
+      -------------------------------------------
+      import std.parallelism, bio.bam.reader;
+      void main() {
+        auto pool = new TaskPool(4); // use 4 threads
+        scope (exit) pool.finish();  // don't forget!
+        auto bam = new BamReader("file.bam", pool);
+        ...
+      }
+      -------------------------------------------
+     */
+    this(std.stream.Stream stream, 
+         std.parallelism.TaskPool task_pool = std.parallelism.taskPool) {
+        _source_stream = new EndianStream(stream, Endian.littleEndian);
+        _task_pool = task_pool;
+
+        if (stream.seekable) {
+            _stream_is_seekable = true;
+        }
+
+        initializeStreams();
+
+        auto magic = _bam.readString(4);
+        
+        enforce(magic == "BAM\1", "Invalid file format: expected BAM\\1");
+
+        readSamHeader();
+        readReferenceSequencesInfo();
+
+        // right after construction, we are at the beginning
+        //                           of the list of reads
+
+        if (_stream_is_seekable) {
+            _reads_start_voffset = _decompressed_stream.virtualTell();
+        }
+    }
+
+    /// ditto
+    this(string filename, std.parallelism.TaskPool task_pool) {
+
+        _filename = filename;
+        _source_stream = getNativeEndianSourceStream();
+        this(_source_stream, task_pool);
+    }
+
+    /// ditto
+    this(string filename) {
+        this(filename, std.parallelism.taskPool);
+    }
+ 
+    /**
+      True if BAI file was found for this BAM file.
+      This is necessary for any random-access operations.
+      $(BR)
+      Looks for files in the same directory which filename
+      is either the file name of BAM file with '.bai' appended,
+      or with the last extension replaced with '.bai'
+      (that is, for $(I file.bam) paths $(I file.bai) and 
+      $(I file.bam.bai) will be checked)
+     */
+    bool has_index() @property {
+        return _random_access_manager.found_index_file;
+    }
+
+    /**
+      Creates BAI file. If $(I overwrite) is false, it won't touch
+      existing index if it is already found.
+     */
+    void createIndex(bool overwrite = false) {
+        if (has_index && !overwrite)
+            return;
+        Stream stream = new BufferedFile(filename ~ ".bai", FileMode.OutNew);
+        scope(exit) stream.close();
+        bio.bam.bai.indexing.createIndex(this, stream);
+        _bai_status = BaiStatus.notInitialized;
+        _rndaccssmgr = null;
+    }
+
+    /** Filename, if the object was created via file name constructor,
+        $(D null) otherwise.
+     */
+    string filename() @property const {
+        return _filename;
+    }
+
+    /// If file ends with EOF block, returns virtual offset of the start of EOF block.
+    /// Otherwise, returns virtual offset of the physical end of file.
+    bio.core.bgzf.virtualoffset.VirtualOffset eofVirtualOffset() {
+        return _random_access_manager.eofVirtualOffset();
+    }
+
+    /// Get BGZF block at a given file offset.
+    bio.core.bgzf.block.BgzfBlock getBgzfBlockAt(ulong offset) {
+        return _random_access_manager.getBgzfBlockAt(offset);
+    }
+
+    /**
+      Returns: SAM header of the BAM file
+     */
+    bio.sam.header.SamHeader header() @property {
+        if (_header is null) {
+            synchronized {
+                if (_header is null) {
+                    _header = new SamHeader(_headertext);
+                    _headertext = null;
+                }
+            }
+        }
+        return _header;
+    }
+
+    /**
+        Returns: information about reference sequences
+     */
+    const(bio.bam.referenceinfo.ReferenceSequenceInfo)[] reference_sequences() @property const nothrow {
+        return _reference_sequences;
+    }
+
+    /**
+        Range of all alignment records in the file.
+        $(BR)
+        Element type of the returned range depends on the policy. 
+        Default one is $(DPREF2 bam, readrange, withoutOffsets),
+        in this case range element type is $(DPREF2 bam, read, BamRead).
+        $(BR)
+        The other option is $(DPREF2 bam, readrange, withOffsets),
+        which allows to track read virtual offsets in the file.
+        In this case range element type is $(DPREF2 bam, readrange, BamReadBlock).
+
+        Example:
+        ----------------------------------
+        import bio.bam.readrange;
+        ...
+        auto bam = new BamReader("file.bam");
+        auto reads = bam.reads!withOffsets();
+        writeln(reads.front.start_virtual_offset);
+        ----------------------------------
+     */
+    auto reads(alias IteratePolicy=bio.bam.readrange.withoutOffsets)() @property {
+        auto _decompressed_stream = getDecompressedBamReadStream();
+        return bamReadRange!IteratePolicy(_decompressed_stream, this);
+    }
+
+    static struct ReadsWithProgressResult(alias IteratePolicy, R, S) {
+        this(R range, S stream,
+             void delegate(lazy float p) progressBarFunc,
+             void delegate() finishFunc)
+        {
+            _range = range;
+            _stream = stream;
+            _progress_bar_func = progressBarFunc;
+            _finish_func = finishFunc;
+        }
+
+        static if (__traits(identifier, IteratePolicy) == "withOffsets") {
+            auto front() @property {
+                return _range.front;
+            } 
+        } else static if (__traits(identifier, IteratePolicy) == "withoutOffsets") {
+            auto front() @property {
+                return _range.front.read;
+            }
+        } else static assert(0, __traits(identifier, IteratePolicy));
+
+        bool empty() @property {
+            auto result = _range.empty;
+            if (_finish_func !is null && !_called_finish_func && result) {
+                _called_finish_func = true;
+                _finish_func();
+            }
+            return result;
+        }
+
+        void popFront() {
+            _bytes_read += _range.front.read.size_in_bytes;
+            _range.popFront();
+            if (_progress_bar_func !is null) {
+                _progress_bar_func(min(1.0, 
+                    cast(float)_bytes_read / (_stream.total_compressed_size * 
+                                              _stream.average_compression_ratio)));
+            }
+        }
+
+        private R _range;
+        private S _stream;
+        private size_t _bytes_read;
+        private void delegate(lazy float p) _progress_bar_func;
+        private void delegate() _finish_func;
+        private bool _called_finish_func = false;
+    }
+
+    /**
+        Returns: range of all reads in the file, calling $(I progressBarFunc)
+                 for each read. 
+        $(BR)
+        $(I progressBarFunc) will be called
+        each time next alignment is read, with the argument being a number from [0.0, 1.0],
+        which is estimated progress percentage.
+        $(BR)
+        Notice that $(I progressBarFunc) takes $(D lazy) argument, 
+        so that the number of relatively expensive float division operations
+        can be controlled by user.
+
+        Once the iteration is finished (call to $(D empty) returned true),
+        $(I finishFunc) will be called if provided.
+
+        Example:
+        ------------------------------------
+        import std.functional, std.stdio, bio.bam.reader;
+        void progress(lazy float p) {
+            static uint n;
+            if (++n % 63 == 0) writeln(p); // prints progress after every 63 records
+        }
+        ...
+        foreach (read; bam.readsWithProgress(toDelegate(&progress))) {
+            ...
+        }
+        ------------------------------------
+    */
+    auto readsWithProgress(alias IteratePolicy=bio.bam.readrange.withoutOffsets)
+        (void delegate(lazy float p) progressBarFunc,
+         void delegate() finishFunc=null) 
+    {
+        auto _decompressed_stream = getDecompressedBamReadStream();
+        auto reads_with_offsets = bamReadRange!withOffsets(_decompressed_stream, this);
+       
+        alias ReadsWithProgressResult!(IteratePolicy, 
+                       typeof(reads_with_offsets), BgzfInputStream) Result;
+        
+        return Result(reads_with_offsets, _decompressed_stream,
+                      progressBarFunc, finishFunc);
+    }
+
+    ///
+    void assumeSequentialProcessing() {
+        _seqprocmode = true;
+    }
+
+    /// Part of IBamSamReader interface
+    std.range.InputRange!(bio.bam.read.BamRead) allReads() @property {
+        return inputRangeObject(reads!withoutOffsets());
+    }
+
+    /**
+      Returns: the read which starts at a given virtual offset.
+     */
+    bio.bam.read.BamRead getReadAt(bio.core.bgzf.virtualoffset.VirtualOffset offset) {
+        enforce(_random_access_manager !is null);
+        return _random_access_manager.getReadAt(offset);
+    }
+
+    /**
+      Returns: all reads located between two virtual offsets in the BAM file.
+
+      $(BR)
+      First offset must point to the start of an alignment record,
+      and be strictly less than the second one.
+      $(BR)
+      For decompression, the task pool specified at the construction is used.
+     */ 
+    auto getReadsBetween(bio.core.bgzf.virtualoffset.VirtualOffset from, 
+                         bio.core.bgzf.virtualoffset.VirtualOffset to) {
+        enforce(from <= to, "First offset must be less than second");
+        enforce(_stream_is_seekable, "Stream is not seekable");
+        
+        return _random_access_manager.getReadsBetween(from, to);
+    }
+
+    /**
+      Returns: all reads overlapping any region from a set.
+    */
+    auto getReadsOverlapping(BamRegion[] regions) {
+	return _random_access_manager.getReads(regions);
+    }
+
+    /**
+      Unmapped reads, i.e. reads at the end of file whose reference id is -1.
+      The file must be coordinate-sorted and indexed.
+     */
+    auto unmappedReads() {
+        enforce(_random_access_manager !is null);
+        auto bai = _random_access_manager.getBai();
+
+        VirtualOffset start;
+        start = eofVirtualOffset();
+
+        auto all_reads = this.reads();
+        if (!all_reads.empty && all_reads.front.ref_id == -1)
+            start = _reads_start_voffset;
+
+        auto ioffsets = bai.indices[0 .. reference_sequences.length].retro()
+                           .map!(index => index.ioffsets.retro()).joiner();
+        if (!ioffsets.empty)
+            start = ioffsets.front;
+
+        auto stream = _random_access_manager.createStreamStartingFrom(start);
+        auto r = bamReadRange!withOffsets(stream, this);
+        while (!r.empty && r.front.ref_id != -1)
+            r.popFront();
+        return r;
+    }
+
+    /**
+      Get BAI chunks containing all reads that overlap specified region.
+      For $(I ref_id) = -1, use $(D unmappedReads) method.
+     */
+    bio.core.bgzf.chunk.Chunk[] getChunks(uint ref_id, int beg, int end) {
+        enforce(_random_access_manager !is null);
+        enforce(beg < end);
+
+        return _random_access_manager.getChunks(BamRegion(ref_id, beg, end));
+    }
+
+    /**
+      Returns reference sequence with id $(I ref_id).
+     */
+    bio.bam.reference.ReferenceSequence reference(int ref_id) {
+        enforce(ref_id < _reference_sequences.length, "Invalid reference index");
+        return ReferenceSequence(_random_access_manager, 
+                                 ref_id,
+                                 _reference_sequences[ref_id]);
+    }
+
+    /**
+      Returns reference sequence named $(I ref_name).
+
+      Example:
+      ---------------------------
+      import std.stdio, bio.bam.reader;
+      ...
+      auto bam = new BamReader("file.bam");
+      writeln(bam["chr2"].length);
+      ---------------------------
+     */
+    bio.bam.reference.ReferenceSequence opIndex(string ref_name) {
+        enforce(hasReference(ref_name), "Reference with name " ~ ref_name ~ " does not exist");
+        auto ref_id = _reference_sequence_dict[ref_name];
+        return reference(ref_id);
+    }
+
+    /**
+      Check if reference named $(I ref_name) is presented in BAM header.
+     */
+    bool hasReference(string ref_name) {
+        return null != (ref_name in _reference_sequence_dict);
+    }
+
+    /**
+      Set buffer size for I/O operations. Values less than 4096 are disallowed.
+      $(BR)
+      This can help in multithreaded applications when several files are read 
+      simultaneously (e.g. merging).
+     */
+    void setBufferSize(size_t buffer_size) {
+        enforce(buffer_size >= 4096, "Buffer size must be >= 4096 bytes");
+        _buffer_size = buffer_size;
+        _random_access_manager.setBufferSize(buffer_size);
+    }
+
+    package bool _seqprocmode; // available for bio.bam.readrange;
+
+private:
+    
+    string _filename;                       // filename (if available)
+    Stream _source_stream;                  // compressed
+    BgzfInputStream _decompressed_stream;   // decompressed
+    Stream _bam;                            // decompressed + endian conversion
+    bool _stream_is_seekable;
+
+    // Virtual offset at which alignment records start.
+    VirtualOffset _reads_start_voffset;
+
+    BaiFile _dont_access_me_directly_use_bai_file_for_that;
+    enum BaiStatus {
+        notInitialized,
+        initialized,
+        fileNotFound
+    }
+    BaiStatus _bai_status = BaiStatus.notInitialized;
+
+    void initBai() {
+        if (_bai_status == BaiStatus.notInitialized) {
+            synchronized {
+                try {
+                    _dont_access_me_directly_use_bai_file_for_that = BaiFile(_filename);
+                    _bai_status = BaiStatus.initialized;
+                } catch (Exception e) {
+                    _bai_status = BaiStatus.fileNotFound;
+                }
+            }
+        }
+    }
+
+    // provides access to index file
+    @property ref BaiFile _bai_file() { // initialized lazily
+        initBai();
+        return _dont_access_me_directly_use_bai_file_for_that;
+    }; 
+
+    RandomAccessManager _rndaccssmgr; // unreadable for a purpose
+    @property RandomAccessManager _random_access_manager() {
+        if (_rndaccssmgr is null) {
+            synchronized {
+                initBai();
+
+                if (_bai_status == BaiStatus.initialized) {
+                    _rndaccssmgr = new RandomAccessManager(this, _bai_file);
+                } else {
+                    _rndaccssmgr = new RandomAccessManager(this);
+                }
+
+                _rndaccssmgr.setTaskPool(_task_pool);
+                _rndaccssmgr.setBufferSize(_buffer_size);
+            }
+        }
+        return _rndaccssmgr;
+    }
+
+    SamHeader _header;
+    string _headertext; // for lazy SAM header parsing
+    ReferenceSequenceInfo[] _reference_sequences;
+    int[string] _reference_sequence_dict; /// name -> index mapping
+
+    TaskPool _task_pool;
+    size_t _buffer_size = 4096; // buffer size to be used for I/O
+
+    Stream getNativeEndianSourceStream() {
+        assert(_filename !is null);
+        Stream file = new bio.core.utils.stream.File(_filename);
+        return new BufferedStream(file, _buffer_size);
+    }
+
+    Stream getSeekableCompressedStream() {
+        if (_stream_is_seekable) {
+            if (_filename !is null) {
+                auto file = getNativeEndianSourceStream();
+                version(development)
+                {
+                    std.stdio.stderr.writeln("[info] file size: ", file.size);
+                }
+                return new EndianStream(file, Endian.littleEndian);
+            } else {
+                _source_stream.seekSet(0);
+                return _source_stream;
+            } 
+        } else {
+            return null;
+        }
+    }
+
+    // get decompressed stream out of compressed BAM file
+    BgzfInputStream getDecompressedStream() {
+        auto compressed_stream = getSeekableCompressedStream();
+
+        auto block_supplier = new StreamSupplier(compressed_stream is null ?
+                                                 _source_stream :
+                                                 compressed_stream);
+
+        return new BgzfInputStream(block_supplier, _task_pool,
+                                   null, _buffer_size);
+    }
+
+    // get decompressed stream starting from the first alignment record
+    BgzfInputStream getDecompressedBamReadStream() {
+        auto compressed_stream = getSeekableCompressedStream();
+
+        if (compressed_stream !is null) {
+            enforce(_reads_start_voffset != 0UL);
+
+            compressed_stream.seekCur(_reads_start_voffset.coffset);
+            auto block_supplier = new StreamSupplier(compressed_stream);
+            auto stream = new BgzfInputStream(block_supplier, _task_pool, 
+                                              null, _buffer_size);
+            stream.readString(_reads_start_voffset.uoffset);
+            return stream;
+        } else {
+            // must be initialized in initializeStreams()
+            return _decompressed_stream;
+        }
+    }
+
+    // sets up the streams and ranges
+    void initializeStreams() {
+        
+        _decompressed_stream = getDecompressedStream();
+        _bam = new EndianStream(_decompressed_stream, Endian.littleEndian); 
+    }
+
+    // initializes _header
+    void readSamHeader() {
+        int l_text;
+        _bam.read(l_text);
+
+        _headertext = cast(string)(_bam.readString(l_text));
+    }
+
+    // initialize _reference_sequences
+    void readReferenceSequencesInfo() {
+        int n_ref;
+        _bam.read(n_ref);
+        _reference_sequences = new ReferenceSequenceInfo[n_ref];
+        foreach (i; 0..n_ref) {
+            _reference_sequences[i] = ReferenceSequenceInfo(_bam);
+
+            // provide mapping Name -> Index
+            _reference_sequence_dict[_reference_sequences[i].name] = i;
+        }
+    }
+}
diff --git a/bio/bam/readrange.d b/bio/bam/readrange.d
new file mode 100644
index 0000000..1a2ec87
--- /dev/null
+++ b/bio/bam/readrange.d
@@ -0,0 +1,199 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.readrange;
+
+import bio.bam.read;
+import bio.bam.abstractreader;
+import bio.bam.reader;
+import bio.core.bgzf.inputstream;
+import bio.core.bgzf.virtualoffset;
+import bio.core.utils.switchendianness;
+
+import std.stream;
+import std.algorithm;
+import std.system;
+
+/// Read + its start/end virtual offsets
+struct BamReadBlock {
+    VirtualOffset start_virtual_offset; ///
+    VirtualOffset end_virtual_offset; ///
+    BamRead read; ///
+    alias read this; ///
+
+    ///
+    BamReadBlock dup() @property const {
+        return BamReadBlock(start_virtual_offset, end_virtual_offset, read.dup);
+    }
+}
+
+///
+mixin template withOffsets() {
+    /**
+        Returns: virtual offsets of beginning and end of the current read
+                 plus the current read itself.
+     */
+    BamReadBlock front() @property {
+        return BamReadBlock(_start_voffset, 
+                            _stream.virtualTell(),
+                            _current_record);
+    }
+
+    private VirtualOffset _start_voffset;
+
+    private void beforeNextBamReadLoad() {
+        _start_voffset = _stream.virtualTell();
+    }
+}
+
+///
+mixin template withoutOffsets() {
+    /**
+        Returns: current read
+     */
+    ref BamRead front() @property {
+        return _current_record;
+    }
+
+    private void beforeNextBamReadLoad() {}
+}
+
+/// $(D front) return type is determined by $(I IteratePolicy)
+struct BamReadRange(alias IteratePolicy) 
+{ 
+    /// Create new range from BgzfInputStream.
+    this(BgzfInputStream stream, BamReader reader=null) {
+        _stream = stream;
+        _reader = reader;
+        _endian_stream = new EndianStream(_stream, Endian.littleEndian);
+        readNext();
+    }
+
+    ///
+    bool empty() @property const {
+        return _empty;
+    }
+
+    mixin IteratePolicy;
+   
+    ///
+    void popFront() {
+        readNext();
+    }
+
+private:
+    BgzfInputStream _stream;
+    EndianStream _endian_stream;
+
+    BamReader _reader;
+
+    BamRead _current_record;
+    bool _empty = false;
+
+    ubyte[] _buffer;
+
+    /*
+      Reads next bamRead block from stream.
+     */
+    void readNext() {
+
+        // In fact, on BAM files containing a special EOF BGZF block
+        // this condition will be always false!
+        //
+        // The reason is that we don't want to unpack next block just
+        // in order to see if it's an EOF one or not.
+        if (_stream.eof()) {
+            _empty = true;
+            return;
+        }
+     
+        // In order to get the right virtual offset, we need to do it here.
+        version(extraVerbose) {
+            // import std.stdio; stderr.writeln("record v.o. = ", _stream.virtualTell());
+        }
+        beforeNextBamReadLoad();
+
+        // (FIXME: that won't work on Big Endian systems!)
+        
+        // Here's where _empty is really set!
+        int block_size = void;
+        ubyte* ptr = cast(ubyte*)(&block_size);
+        auto _read = 0;
+        while (_read < int.sizeof) {
+            auto _actually_read = _endian_stream.readBlock(ptr, int.sizeof - _read);
+            if (_actually_read == 0) {
+                version(development) {
+                    import std.stdio;
+                    stderr.writeln("[info][bamRead range] empty, read ", _read, " bytes, expected ", int.sizeof);
+                }
+                _empty = true;
+                return;
+            }
+            _read += _actually_read;
+            ptr += _actually_read;
+        } 
+
+        version(extraVerbose) {
+            import std.stdio;
+            stderr.writeln("[uncompressed] record size: ", block_size);
+        }
+
+        if (std.system.endian != Endian.littleEndian) {
+            switchEndianness(&block_size, int.sizeof);
+        }
+
+        ubyte[] data = void;
+        if (_reader !is null && _reader._seqprocmode) {
+            if (block_size > _buffer.length)
+                _buffer.length = block_size;
+
+            data = _buffer[0 .. block_size];
+        } else {
+            data = allocate(block_size);
+        }
+
+        _stream.readExact(data.ptr, block_size);
+
+        _current_record = BamRead(data);
+        _current_record.associateWithReader(_reader);
+    }
+
+    private {
+        ubyte[] allocate(size_t size) {
+            if (_alloc_buffer_used + size > _alloc_buffer.length) {
+                _alloc_buffer = uninitializedArray!(ubyte[])(max(size, 65536));
+                _alloc_buffer_used = 0;
+            }
+            auto result = _alloc_buffer[_alloc_buffer_used .. $][0 .. size];
+            _alloc_buffer_used += size;
+            return result;
+        }
+        ubyte[] _alloc_buffer;
+        size_t _alloc_buffer_used;
+    }
+}
+
+/// Returns: lazy range of BamRead/BamReadBlock structs constructed from a given stream.
+auto bamReadRange(alias IteratePolicy=withoutOffsets)(BgzfInputStream stream, BamReader reader) {
+    return BamReadRange!IteratePolicy(stream, reader);
+}
diff --git a/bio/bam/reference.d b/bio/bam/reference.d
new file mode 100644
index 0000000..997e6b4
--- /dev/null
+++ b/bio/bam/reference.d
@@ -0,0 +1,221 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/// $(P Each BAM file contains reads aligned to different reference sequences.)
+/// $(P These sequences have unique identifiers in BAM file, starting from 0.
+/// Unmapped reads are associated with id = -1.)
+/// $(P If BAI file is available, fast region queries are available, that is,
+/// getting all reads that overlap given region. This is achieved via $(D opSlice) method.)
+///
+/// Example:
+/// -----------------------------
+/// import bio.bam.reader, std.stdio;
+/// ...
+/// auto bam = new BamReader("file.bam");
+/// auto refseq = bam["chr17"];
+/// writeln(refseq.name, " - length ", refseq.length);
+/// foreach (read; refseq[1234 .. 5678])
+///     if (read.cigar.length > 1)
+///         writeln(read.name, " ", read.cigarString());
+/// -----------------------------
+module bio.bam.reference;
+
+public import bio.bam.referenceinfo;
+
+import bio.bam.readrange;
+import bio.bam.region;
+import bio.bam.randomaccessmanager;
+import bio.core.bgzf.virtualoffset;
+
+import std.stream;
+import std.exception;
+import std.array;
+
+///
+struct ReferenceSequence {
+    private int _ref_id;
+   
+    /// Name
+    string name() @property const {
+        return _info.name;
+    }
+
+    /// Length in base pairs
+    int length() @property const {
+        return _info.length;
+    }
+
+    /// Reference ID
+    int id() @property const {
+        return _ref_id;
+    }
+
+    /// Get alignments overlapping [start, end) region.
+    /// $(BR)
+    /// Coordinates are 0-based.
+    auto opSlice(uint start, uint end) {
+        enforce(start < end, "start must be less than end");
+        enforce(_manager !is null, "random access is not available");
+        enforce(_ref_id >= 0, "invalid reference id");
+        return _manager.getReads(BamRegion(cast(uint)_ref_id, start, end));
+    }
+
+    /// Get all alignments for this reference
+    auto opSlice() {
+        return opSlice(0, length);
+    }
+
+    private alias typeof(opSlice().front) Read;
+    private Read _first_read() @property {
+        return opSlice().front.dup;
+    }
+
+    /// Virtual offset at which reads, aligned to this reference, start in BAM file.
+    /// If there are no reads aligned to this reference, returns virtual
+    /// offset of the EOF block if it's presented, or the end of file.
+    bio.core.bgzf.virtualoffset.VirtualOffset startVirtualOffset() {
+        auto reads = opSlice();
+        if (reads.empty) {
+            return _manager.eofVirtualOffset();
+        }
+        return reads.front.start_virtual_offset;
+    }
+
+    /// Virtual offset before which reads, aligned to this reference, stop.
+    /// If there are no reads aligned to this reference, returns virtual
+    /// offset of the EOF block if it's presented, or the end of file.
+    bio.core.bgzf.virtualoffset.VirtualOffset endVirtualOffset() {
+
+        if (opSlice().empty) {
+            return _manager.eofVirtualOffset();
+        }
+
+        auto ioffsets = _manager.getBai().indices[_ref_id].ioffsets[];
+        assert(ioffsets.length > 0);
+
+        // Try to get startVirtualOffset of the next reference presented in the file.
+        for (uint r = _ref_id + 1; r < _manager.getBai().indices.length; ++r) {
+            auto reads = _manager.getReads(BamRegion(r, 0, uint.max));
+            if (reads.empty) {
+                continue;
+            } else {
+                return reads.front.start_virtual_offset;
+            }
+        }
+
+        // However, this approach fails if there are unmapped reads coming after
+        // this reference. We cannot just return _manager.eofVirtualOffset.
+
+        auto last_offset = ioffsets[$ - 1];
+        auto stream = _manager.createStreamStartingFrom(last_offset);
+        auto last_few_reads = bamReadRange!withOffsets(stream, null);
+
+        VirtualOffset result;
+        assert(!last_few_reads.empty);
+        foreach (read; last_few_reads) {
+            if (read.ref_id == -1) break;
+            result = read.end_virtual_offset;
+        }
+
+        return result;
+    }
+ 
+    /// First position on the reference overlapped by reads (0-based)
+    /// $(BR)
+    /// Returns -1 if set of reads is empty.
+    int firstPosition() {
+        auto reads = opSlice();
+        if (reads.empty) {
+            return -1;
+        }
+        return reads.front.position;
+    }
+   
+    /// Last position on the reference overlapped by reads (0-based)
+    /// $(BR)
+    /// Returns -1 if set of reads is empty.
+    int lastPosition() {
+        // The key idea is
+        //  1) use last offset from linear index
+        //  2) loop through all remaining reads starting from there
+
+        auto ioffsets = _manager.getBai().indices[_ref_id].ioffsets[];
+
+        long index = ioffsets.length - 1;
+
+        debug {
+            int reads_processed = 0;
+        }
+
+        while (index >= 0) {
+            auto offset = ioffsets[cast(size_t)index];
+
+            auto stream = _manager.createStreamStartingFrom(offset);
+            auto reads = bamReadRange(stream, null);
+
+            int last_position = int.min;
+
+            foreach (read; reads) {
+
+                 debug {
+                     reads_processed += 1;
+                 }
+
+                 if (read.ref_id != _ref_id) {
+                     break;
+                 }
+                
+                 if (read.position == -1) {
+                     continue;
+                 }
+
+                 auto end_pos = read.position + read.basesCovered();
+                 if (end_pos > last_position)
+                     last_position = end_pos;
+            }
+
+            if (last_position != int.min) {
+                debug {
+                    import std.stdio;
+                    stderr.writeln("[debug] ReferenceSequence.lastPosition() processed ",
+                                   reads_processed, " reads");
+                }
+                return last_position - 1;
+            }
+
+            --index;
+        }
+
+        return firstPosition();
+    }
+
+    this(RandomAccessManager manager, int ref_id, ReferenceSequenceInfo info) {
+        _manager = manager;
+        _ref_id = ref_id;
+        _info = info;
+    }
+
+private:
+    RandomAccessManager _manager;
+    ReferenceSequenceInfo _info;
+}
diff --git a/bio/bam/referenceinfo.d b/bio/bam/referenceinfo.d
new file mode 100644
index 0000000..3824fe8
--- /dev/null
+++ b/bio/bam/referenceinfo.d
@@ -0,0 +1,63 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.referenceinfo;
+
+import std.stream;
+import std.exception;
+import std.array;
+
+/**
+  Stores basic information about reference sequence.
+ */
+struct ReferenceSequenceInfo {
+    private {
+        string _name;
+        int _length;
+    }
+
+    /// Reference sequence name
+    /// (null byte is guaranteed to follow the returned slice)
+    string name() @property const nothrow {
+        return _name[0 .. $ - 1];
+    }
+   
+    /// Reference sequence length
+    int length() @property const {
+        return _length;
+    }
+
+    ///
+    this(string name, int length) {
+        _name = name ~ '\0';
+        _length = length;
+    }
+
+    /// Constructs the structure from input stream
+    this(ref Stream stream) {
+        int l_name; // length of the reference name plus one
+        stream.read(l_name);
+        _name = cast(string)stream.readString(l_name); // keep '\0' at the end
+        stream.read(_length);
+    }
+}
diff --git a/bio/bam/region.d b/bio/bam/region.d
new file mode 100644
index 0000000..68b4819
--- /dev/null
+++ b/bio/bam/region.d
@@ -0,0 +1,65 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+
+module bio.bam.region;
+
+///
+struct BamRegion {
+    uint ref_id; /// Reference ID in the BAM file
+    uint start;  /// 0-based leftmost coordinate (included)
+    uint end;    /// 0-based rightmost coordinate (excluded)
+
+    int opCmp(const ref BamRegion other) const nothrow {
+        if (this.ref_id > other.ref_id) { return  1; }
+        if (this.ref_id < other.ref_id) { return  -1; }
+	
+        if (this.start > other.start) { return  1; }
+        if (this.start < other.start) { return  -1; }
+
+	if (this.end > other.end) { return  1; }
+        if (this.end < other.end) { return  -1; }
+
+        return 0;
+    }
+
+    bool overlaps(uint ref_id, uint position) const {
+        return this.ref_id == ref_id && start <= position && position < end;
+    }
+
+    bool fullyLeftOf(uint ref_id, uint position) {
+        if (this.ref_id < ref_id)
+            return true;
+        if (this.ref_id == ref_id && end <= position)
+            return true;
+        return false;
+    }
+
+    bool fullyRightOf(uint ref_id, uint position) {
+        if (this.ref_id > ref_id)
+            return true;
+        if (this.ref_id == ref_id && start > position)
+            return true;
+        return false;
+    }
+}
diff --git a/bio/bam/snpcallers/maq.d b/bio/bam/snpcallers/maq.d
new file mode 100644
index 0000000..2cb8a4b
--- /dev/null
+++ b/bio/bam/snpcallers/maq.d
@@ -0,0 +1,541 @@
+module bio.bam.snpcallers.maq;
+
+/*
+ * The code below is based on errmod.c from Samtools.
+ */
+
+import core.stdc.math;
+import std.math : LN2, LN10, isnan;
+import std.traits;
+import std.range;
+import std.algorithm;
+import std.random;
+import std.typecons;
+
+import bio.bam.md.reconstruct;
+import bio.bam.pileup;
+
+import bio.core.base;
+import bio.core.genotype;
+import bio.core.call;
+import bio.core.tinymap;
+
+struct BaseWithStrand {
+    immutable ValueSetSize = Base.ValueSetSize * 2;
+    private ubyte _code;
+    ubyte internal_code() @property const {
+        return _code;
+    }
+
+    static BaseWithStrand fromInternalCode(ubyte code) {
+        BaseWithStrand bws = void;
+        bws._code = code;
+        return bws;
+    }
+
+    this(Base b, bool is_reverse) {
+        _code = cast(ubyte)(b.internal_code * 2 + (is_reverse ? 1 : 0));
+    }
+
+    Base base() @property const {
+        return Base.fromInternalCode(_code / 2);
+    }
+
+    bool is_reverse_strand() @property const {
+        return (_code & 1) == 1;
+    }
+}
+
+struct ReadBase {
+    BaseWithStrand base_with_strand;
+    alias base_with_strand this;
+    private ubyte _quality;
+
+    this(Base b, ubyte quality, bool is_reverse) {
+        base_with_strand = BaseWithStrand(b, is_reverse);
+        _quality = quality;
+    }
+
+    ubyte quality() @property const {
+        return _quality;
+    }
+}
+
+struct ErrorModelCoefficients {
+    private {
+
+        // _fk[n] = (1 - depcorr)^n * (1 - eta) + eta
+        double[] _fk;
+
+        // _beta[q << 16 | n << 8 | k ] = see MAQ paper for meaning of \beta
+        double[] _beta;
+
+        // _lhet[n << 8 | k] = log(1/2^n * choose(n, k))
+        double[] _lhet;
+        
+        immutable Base[4] nucleotides = [Base('A'), Base('C'), Base('G'), Base('T')];
+    }
+
+    this(double depcorr, double eta) {
+        _fk.length = 256;
+        _beta.length = 256 * 256 * 64;
+        _lhet.length = 256 * 256;
+
+        foreach (n, ref v; _fk) {
+            v = core.stdc.math.pow(1.0 - depcorr, cast(double)n) * (1.0 - eta) + eta;
+        }
+
+        // lC[n][k] = log(choose(n, k))
+        double[256][256] lC;
+
+        // lG[n] = logGamma(n + 1)
+        double[256] lG;
+
+        for (size_t n = 0; n <= 255; ++n) {
+            lG[n] = core.stdc.math.lgamma(cast(double)(n + 1));
+            for (size_t k = 0; k <= n / 2; ++k) {
+                lC[n][n-k] = lC[n][k] = lG[n] - lG[k] - lG[n-k];
+
+                // fill _lhet simultaneously
+                _lhet[n << 8 | (n-k)] = _lhet[n << 8 | k] = lC[n][k] - n * cast(double)LN2;
+            }
+        }
+
+        for (size_t q = 1; q < 64; ++q) {
+            real e = 10.0 ^^ (-(cast(real)q) / 10.0);
+            real le = core.stdc.math.logl(e);
+            real le1 = core.stdc.math.logl(1.0 - e);
+
+            for (int n = 1; n <= 255; ++n) {
+                real sum, sum1;
+                sum = sum1 = 0.0;
+                for (int k = n; k >= 0; --k) {
+                    sum = sum1 + core.stdc.math.expl(lC[n][k] + k * le + (n-k) * le1);
+                    _beta[q << 16 | n << 8 | k] = -10.0 / LN10 * core.stdc.math.logl(sum1 / sum);
+                    sum1 = sum;
+                }
+            }
+        }
+    }
+
+    double fk(size_t n) const {
+        return _fk[n];
+    }
+
+    double beta(uint quality, size_t n, size_t k) const {
+        return _beta[quality << 16 | n << 8 | k];
+    }
+
+    double lhet(size_t n, size_t k) const {
+        return _lhet[n << 8 | k];
+    }
+
+    alias TinyMap!(DiploidGenotype!Base5, float, useDefaultValue) Dict;
+
+    private immutable C = 10.0 / LN10;
+
+    Dict computeLikelihoods(R)(R read_bases, bool symmetric=false) const
+        if (is(ElementType!R == ReadBase) && hasLength!R) 
+    {
+        // if there're more than 255 reads, subsample them
+        ReadBase[255] buf = void;
+        if (read_bases.length > buf.length) {
+            copy(randomSample(read_bases, buf.length), buf[]);
+        } else {
+            copy(read_bases, buf[]);
+        }
+        auto bases = buf[0 .. min(read_bases.length, $)];
+
+        sort!"a.quality < b.quality"(bases);
+
+        auto w = TinyMap!(BaseWithStrand, uint, fillNoRemove)(0);
+        auto c = TinyMap!(Base, uint, fillNoRemove)(0);
+        auto fsum = TinyMap!(Base, double, fillNoRemove)(0.0);
+        auto bsum = TinyMap!(Base, double, fillNoRemove)(0.0);
+
+        foreach_reverse (ref read_base; bases) {
+            auto quality = read_base.quality;
+            if (quality < 4) quality = 4;
+            if (quality > 63) quality = 63;
+           
+            auto bws = read_base.base_with_strand;
+            auto b = bws.base;
+
+            fsum[b] += fk(w[bws]);
+            bsum[b] += fk(w[bws]) * beta(quality, bases.length, c[b]);
+            c[b] += 1;
+            w[bws] += 1;
+        }
+
+        alias diploidGenotype dG;
+
+        auto q = Dict(float.min);
+
+        foreach (i, b1; nucleotides) {
+            float tmp1 = 0.0;
+            int tmp2;
+            float tmp3 = 0.0;
+
+            // homozygous
+            foreach (k, b2; nucleotides) {
+                if (k != i) {
+                    tmp1 += bsum[b2];
+                    tmp2 += c[b2];
+                    tmp3 += fsum[b2];
+                }
+            }
+
+            auto b1_5 = cast(Base5)b1;
+            if (tmp2 > 0) {
+                q[dG(b1_5)] = tmp1;
+            } else {
+                q[dG(b1_5)] = 0.0;
+            }
+
+            // heterozygous
+            for (size_t j = i + 1; j < nucleotides.length; ++j) {
+                auto b2 = nucleotides[j];
+                int cij = c[b1] + c[b2];
+                tmp1 = tmp3 = 0.0;
+                tmp2 = 0;
+                foreach (k, b3; nucleotides) {
+                    if (k != i && k != j) {
+                        tmp1 += bsum[b3];
+                        tmp2 += c[b3];
+                        tmp3 += fsum[b3];
+                    }
+                }
+
+                auto b2_5 = cast(Base5)b2;
+                if (tmp2 > 0) {
+                    q[dG(b2_5, b1_5)] = tmp1 - C * lhet(cij, c[b2]);
+                } else {
+                    q[dG(b2_5, b1_5)] = -C * lhet(cij, c[b2]);
+                }
+
+                if (symmetric) {
+                    q[dG(b1_5, b2_5)] = q[dG(b2_5, b1_5)];
+                }
+            }
+
+            foreach (k, b2; nucleotides) {
+                auto g = dG(b1_5, cast(Base5)b2);
+                if (g in q) {
+                    if (q[g] < 0.0) q[g] = 0.0;
+                }
+            }
+        }
+
+        return q;
+    }
+}
+
+// Encapsulates information about genotype likelihoods at a site.
+struct GenotypeLikelihoodInfo {
+
+    alias ErrorModelCoefficients.Dict ScoreDict;
+
+    alias DiploidGenotype!Base5 Gt;
+
+    this(ScoreDict dict) {
+
+        _dict = dict;
+        size_t k = 0;
+
+        // copy all data into a buffer, combining that with insertion sort
+        foreach (gt, score; _dict) {
+            if (k == 0) {
+                gt_buf[k++] = gt;
+            } else {
+                size_t j = k;
+                while (j > 0 && _dict[gt_buf[j-1]] > score) {
+                    gt_buf[j] = gt_buf[j-1];
+                    --j;
+                }
+                gt_buf[j] = gt;
+                ++k;
+            }
+        }
+
+        assert(k >= 2);
+
+        _count = cast(ubyte)k;
+    }
+
+    size_t count() @property const {
+        return _count;
+    }
+
+    static struct GtInfo {
+        private {
+            Gt _gt;
+            float _prob;
+        } 
+
+        Gt genotype() @property const {
+            return _gt;
+        }
+
+        float score() @property const {
+            return _prob;
+        }
+    }
+
+    GtInfo opIndex(size_t index) {
+        assert(index < count);
+        auto gt = gt_buf[index];
+        return GtInfo(gt, _dict[gt]);
+    }
+
+    private Gt[25] gt_buf;
+    private ubyte _count;
+    private ScoreDict _dict;
+}
+
+class ErrorModel {
+    
+    private {
+        float _depcorr;
+        float _eta;
+        ErrorModelCoefficients _coef;
+    }
+
+    this(float depcorr, float eta=0.03) {
+        _depcorr = depcorr;
+        _eta = eta;
+        _coef = ErrorModelCoefficients(_depcorr, _eta);
+    }
+
+    const(ErrorModelCoefficients) coefficients() @property const {
+        return _coef;
+    }
+
+    alias coefficients this;
+}
+
+/// Class for calling SNPs using MAQ model.
+///
+/// Typical usage:
+///     auto caller = new MaqSnpCaller();
+///     caller.minimum_call_quality = 20.0f;
+///     caller.minimum_base_quality = 13;
+///     foreach (snp; caller.findSNPs(reads)) { ... }
+///
+final class MaqSnpCaller {
+    
+    private float _depcorr = 0.17;
+    private float _eta = 0.03;
+    private float _minimum_call_quality = 6.0;
+    private ubyte _minimum_base_quality = 13;
+    private bool _need_to_recompute_errmod = true;
+
+    ///
+    float depcorr() @property const {
+        return _depcorr;
+    }
+
+    /// ditto
+    void depcorr(float f) @property {
+        _depcorr = f;
+        _need_to_recompute_errmod = true;
+    }
+
+    ///
+    float eta() @property const {
+        return _eta;
+    }
+
+    ///
+    void eta(float f) @property {
+        _eta = f;
+        _need_to_recompute_errmod = true;
+    }
+    
+    /// Minimum call quality
+    float minimum_call_quality() @property const {
+        return _minimum_call_quality;
+    }
+
+    /// ditto
+    void minimum_call_quality(float f) @property {
+        _minimum_call_quality = f;
+    }
+
+    /// Discard reads with base quality less than this at a site
+    ubyte minimum_base_quality() @property const {
+        return _minimum_base_quality;
+    }
+
+    void minimum_base_quality(ubyte q) @property {
+        _minimum_base_quality = q;
+    }
+
+    ErrorModel errmod() @property {
+        if (_need_to_recompute_errmod) {
+            synchronized {
+                if (_need_to_recompute_errmod) {
+                    _errmod = new ErrorModel(_depcorr, _eta);
+                    _need_to_recompute_errmod = false;
+                }
+            }
+        }
+        return _errmod;
+    }
+
+    private ErrorModel _errmod;
+
+    /// Get genotype likelihoods
+    final GenotypeLikelihoodInfo genotypeLikelihoodInfo(C)(C column) {
+
+        version(MaqCaller8192) {
+            ReadBase[8192] buf = void;
+        }
+
+        size_t num_of_valid_bases = 0;
+
+        foreach (read; column.reads) {
+
+            version(MaqCaller8192) {
+                if (num_of_valid_bases == 8192) break;
+            }
+
+            if (read.current_base_quality < minimum_base_quality)
+                continue;
+            if (read.current_base == '-')
+                continue;
+
+            version(MaqCaller8192) {
+                buf[num_of_valid_bases] = ReadBase(Base(read.current_base),
+                                                   min(read.current_base_quality, read.mapping_quality),
+                                                   read.is_reverse_strand);
+            }
+
+            num_of_valid_bases++;
+        }
+
+        static struct ReadBaseRange(R) {
+            private R _reads = void;
+            private ubyte minimum_base_quality = void;
+                                              
+            this(R reads, ubyte minbq) { 
+                _reads = reads; minimum_base_quality = minbq; _findNextValid();
+            }
+
+            ReadBase front() @property { 
+                auto read = _reads.front;
+                return ReadBase(Base(read.current_base), 
+                                min(read.current_base_quality, read.mapping_quality),
+                                read.is_reverse_strand);
+            }
+            bool empty() @property { return _reads.empty; }
+            void popFront() { _reads.popFront(); _findNextValid(); }
+            ReadBaseRange save() @property { return ReadBaseRange!R(_reads, minimum_base_quality); }
+
+            private void _findNextValid() {
+                while (!_reads.empty && 
+                        (_reads.front.current_base_quality < minimum_base_quality ||
+                         _reads.front.current_base == '-')) 
+                {
+                    _reads.popFront();
+                }
+            }
+        }
+
+        if (num_of_valid_bases == 0) {
+            GenotypeLikelihoodInfo result;
+            return result;
+        }
+
+        version(MaqCaller8192) {
+            ReadBase[] rbs = buf[0 .. num_of_valid_bases];
+            auto likelihood_dict = errmod.computeLikelihoods(rbs);
+        } else {
+            auto rbs = ReadBaseRange!(typeof(column.reads))(column.reads, minimum_base_quality);
+            auto likelihood_dict = errmod.computeLikelihoods(takeExactly(rbs, num_of_valid_bases));
+        }
+        return GenotypeLikelihoodInfo(likelihood_dict);
+    }
+
+    /// Make call on a pileup column
+    final Nullable!DiploidCall5 makeCall(C)(C column, string reference="", string sample="") {
+
+        auto gts = genotypeLikelihoodInfo(column);
+
+        Nullable!DiploidCall5 result;
+
+        if (gts.count < 2) return result;
+
+        static if (__traits(compiles, column.reference_base)) {
+            auto refbase = Base5(column.reference_base);
+        } else {
+            auto refbase = Base5('N');
+        }
+        
+        if (sample == "") {
+            auto rg = column.reads.front["RG"];
+            if (!rg.is_nothing) {
+                sample = cast(string)rg;
+            }
+        }
+
+        result = DiploidCall5(sample, reference, column.position,
+                              refbase, gts[0].genotype,
+                              gts[1].score - gts[0].score);
+                
+        return result;
+    }
+
+    /// main method of this class
+    auto findSNPs(P)(P pileup_columns, string reference="", string sample="") {
+        static assert(__traits(compiles, {pileup_columns.front.reference_base;}));
+
+        static struct Result {
+            private MaqSnpCaller _caller;
+            private P _pileup;
+            private DiploidCall5 _front;
+            private bool _empty;
+            private string _reference;
+            private string _sample;
+
+            this(MaqSnpCaller caller, P pileup, string reference, string sample) {
+                _caller = caller;
+                _pileup = pileup;
+                _reference = reference;
+                _sample = sample;
+                _fetchNextSNP();
+            }
+
+            DiploidCall5 front() @property {
+                return _front;
+            }
+           
+            bool empty() @property {
+                return _empty;
+            }
+
+            void popFront() {
+                _pileup.popFront();
+                _fetchNextSNP();
+            }
+
+            private void _fetchNextSNP() {
+                while (true) {
+                    if (_pileup.empty) {
+                        _empty = true;
+                        break;
+                    }
+
+                    auto call = _caller.makeCall(_pileup.front, _reference, _sample);
+                    if (!call.isNull && call.is_variant && call.quality > _caller.minimum_call_quality) {
+                        _front = call.get;
+                        break;
+                    } else {
+                        _pileup.popFront();
+                    }
+                }
+            }
+        }
+
+        return Result(this, pileup_columns, reference, sample);
+    }
+}
diff --git a/bio/bam/snpcallers/simple.d b/bio/bam/snpcallers/simple.d
new file mode 100644
index 0000000..8cc4015
--- /dev/null
+++ b/bio/bam/snpcallers/simple.d
@@ -0,0 +1,47 @@
+module bio.bam.snpcallers.simple;
+
+import bio.bam.pileup;
+import bio.core.utils.algo;
+
+import std.algorithm;
+
+struct SimpleCallerSettings {
+    int minimum_coverage = 5;
+    int minimum_witnesses = 2;
+}
+
+SimpleCallerSettings defaultSettings;
+
+bool isSNP(C)(C column, ref SimpleCallerSettings settings)
+{
+    if (column.coverage < settings.minimum_coverage) {
+        return false;
+    }
+
+    int[char] bases_count;
+
+    foreach (read; column.reads) {
+        if (read.current_base != '-') {
+            bases_count[read.current_base] += 1;
+        }
+    }
+
+    if (bases_count.length == 0) {
+        // e.g. all overlapping reads have deletions at this location
+        return false;
+    }
+
+    auto consensus = argmax!(base => bases_count[base])(bases_count.byKey());
+
+    if (bases_count[consensus] < settings.minimum_witnesses) {
+        return false;
+    }
+
+    return consensus != column.reference_base;
+}
+
+auto findSNPs(R)(R reads, ref SimpleCallerSettings settings=defaultSettings) {
+    auto columns = pileupWithReferenceBases(reads);
+
+    return filter!(column => isSNP(column, settings))(filter!"a.coverage > 0"(columns));
+}
diff --git a/bio/bam/splitter.d b/bio/bam/splitter.d
new file mode 100644
index 0000000..7de00cc
--- /dev/null
+++ b/bio/bam/splitter.d
@@ -0,0 +1,106 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.splitter;
+
+import bio.bam.read;
+
+import std.array;
+import std.functional;
+import std.range;
+import std.traits;
+
+/// Constructs range of chunks where sum { fn(read) | read in chunk }
+/// does not exceed given number.
+struct ReadRangeSplitter(R, alias fn) 
+{
+    this(R range, size_t threshold, bool split_by_ref) {
+        _range = range;
+        _size = threshold;
+        _split_by_ref = split_by_ref;
+        _appender = appender!(ElementType!R[])();
+        getNextChunk();
+    }
+
+    private {
+        R _range;
+        bool _empty;
+        bool _split_by_ref;
+        size_t _size;
+        Appender!(ElementType!R[]) _appender;
+    }
+
+    bool empty() @property {
+        return _empty;
+    }
+
+    ElementType!R[] front() @property {
+        return _appender.data.dup;
+    }
+
+    void popFront() {
+        _appender.clear();
+        getNextChunk(); 
+    }
+
+    private void getNextChunk() {
+        if (_range.empty) {
+            _empty = true;
+            return;
+        } 
+
+        auto first_read = _range.front;
+        _range.popFront();
+
+        size_t total_size = first_read.size_in_bytes;
+        auto average_size_estimate = unaryFun!fn(first_read);
+
+        _appender.reserve(_size / average_size_estimate);
+        _appender.put(first_read);
+
+        while (total_size <= _size && !_range.empty) {
+            auto read = _range.front;
+            if (_split_by_ref && (read.ref_id != first_read.ref_id)) {
+                break;
+            }
+            total_size += unaryFun!fn(read);
+            _appender.put(read);
+            _range.popFront();
+        }
+    }
+}
+
+/// Split range in chunks where total amount of memory consumed by all reads 
+/// in the chunk is roughly chunk_size bytes.
+///
+/// Parameter $(D split_by_ref) specifies that each chunk should contain reads
+/// aligned to the same reference. In most cases, this simplifies post-processing,
+/// but in some cases this is not required, therefore it is optional.
+auto chunksConsumingLessThan(R)(R reads, size_t size_in_bytes, bool split_by_ref=true) {
+    return ReadRangeSplitter!(R, "a.size_in_bytes")(reads, size_in_bytes, split_by_ref);
+}
+
+/// Split range in chunks each containing no more than N reads
+auto chunksOfSize(R)(R reads, size_t N, bool split_by_ref=true) {
+    return ReadRangeSplitter!(R, "1")(reads, N, split_by_ref);
+}
diff --git a/bio/bam/tagvalue.d b/bio/bam/tagvalue.d
new file mode 100644
index 0000000..dbd9aad
--- /dev/null
+++ b/bio/bam/tagvalue.d
@@ -0,0 +1,588 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/// BAM records may carry arbitrary information in tags.
+/// $(BR)
+/// $(D Value) type provides convenient way to work with this information.
+///
+/// Example:
+/// --------------------------------
+/// import bio.bam.reader, bio.bam.tagvalue;
+/// ...
+/// auto bam = new BamReader("file.bam");
+/// Value v = bam.reads.front["MD"];
+/// assert(v.is_string);
+/// v = 5;
+/// assert(v.is_signed);     // because 5 is of type int which is signed
+/// assert(v == "5");        // converted to string and then compared
+/// v = "abc";
+/// assert(v.is_string);
+/// v = [1, 2, 3];           // integer and float arrays are supported
+/// assert(v.is_numeric_array);
+/// v = [1.5f, 2.3f, 17.0f]; // double[] arrays must be converted to float[]
+/// assert(v.is_numeric_array);
+/// v = 5.6;
+/// assert(v.is_float);
+/// v = -17;
+/// assert(v.is_signed);
+/// ----------------------------------
+module bio.bam.tagvalue;
+
+public import std.conv;
+import std.typetuple;
+import std.exception;
+import std.format;
+import std.array;
+import bio.core.utils.format;
+
+import bio.bam.thirdparty.msgpack;
+
+struct CharToType(char c, T) {
+    /** symbol */
+    enum ch = c;
+
+    /** type which corresponds to the symbol
+        according to SAM/BAM specification 
+    */
+    alias T ValueType;    
+}
+
+/**
+  Thrown in case of unrecognized tag type
+ */
+class UnknownTagTypeException : Exception {
+    this(string msg) { super(msg); }
+}
+
+
+alias TypeTuple!(CharToType!('A', char),
+                 CharToType!('c', byte),  
+                 CharToType!('C', ubyte),
+                 CharToType!('s', short), 
+                 CharToType!('S', ushort),
+                 CharToType!('i', int),   
+                 CharToType!('I', uint),
+                 CharToType!('f', float))       PrimitiveTagValueTypes;
+
+alias TypeTuple!(CharToType!('Z', string), 
+                 CharToType!('H', string))      StringTagValueTypes;
+
+alias TypeTuple!(CharToType!('c', byte),  
+                 CharToType!('C', ubyte),
+                 CharToType!('s', short), 
+                 CharToType!('S', ushort),
+                 CharToType!('i', int),   
+                 CharToType!('I', uint),
+                 CharToType!('f', float))       ArrayElementTagValueTypes;
+
+/*
+  Useful in TagStorage implementations, for skipping elements
+
+  Params:
+    c =         primitive type identifier
+
+  Returns: size of corresponding type in bytes
+*/
+uint charToSizeof(char c) {
+    string charToSizeofHelper() {
+        char[] cases;
+        foreach (c2t; PrimitiveTagValueTypes) {
+            cases ~= "case '"~c2t.ch~"':"~
+                     "  return "~to!string(c2t.ValueType.sizeof)~";".dup;
+        }
+        return "switch (c) { " ~ cases.idup ~
+               "  default: " ~
+               "    throw new UnknownTagTypeException(to!string(c));"~ 
+               "}";
+    }
+    mixin(charToSizeofHelper());
+}
+
+/*
+  Pair of type and its ubyte identifier. 
+
+  (Currently, ubyte is enough, but that might change in the future.)
+*/
+struct TypeId(T, ubyte id) {
+    enum Id = id;
+    alias T Type;
+}
+
+/*
+  Structure of type identifier:
+
+                              0                                   1   
+
+                             primitive                          array/string
+                 something         null/nothing             numeric         string
+            numeric      char           0                   0              Z       H   
+    integer        float                0              [see left           0       0 
+unsigned   signed       0               0               branch]            0       0
+ [ size in bytes]  [size in bytes]      0            [element size]        1       1
+
+     (TypeId >> 5) == elementType.sizeof
+
+*/
+alias TypeTuple!(TypeId!(char,     0b001_00_1_00),
+        
+                 TypeId!(ubyte,    0b001_0_0000), 
+                 TypeId!(ushort,   0b010_0_0000), 
+                 TypeId!(uint,     0b100_0__0__0__0__0), 
+/* Let's take                         4  u  i  n  s  p                  
+   uint as an                            n  n  u  o  r                  
+   example                            b  s  t  m  m  i                  
+                                      y  i  e  e  e  m
+                                      t  g  g  r  t  i
+                                      e  n  e  i  h  t
+                                      s  e  r  c  i  i
+                                         d        n  v
+                                                  g  e
+*/   
+ 
+
+                 TypeId!(byte,     0b001_1_0000),
+                 TypeId!(short,    0b010_1_0000), 
+                 TypeId!(int,      0b100_1_0000), 
+
+                 TypeId!(float,    0b100_01_000),
+
+                 TypeId!(ubyte[],  0b001_000_01),
+                 TypeId!(ushort[], 0b010_000_01),
+                 TypeId!(uint[],   0b100_000_01),
+
+                 TypeId!(byte[],   0b001_100_01),
+                 TypeId!(short[],  0b010_100_01),
+                 TypeId!(int[],    0b100_100_01),
+
+                 TypeId!(float[],  0b100_01_001),
+
+                 TypeId!(string,   0b001_00_101),
+                 TypeId!(string,   0b001_01_101),
+                 TypeId!(typeof(null), 0b0000_0010))
+    TypeIdMap;
+
+private immutable hexStringTag = 0b001_01_101;
+
+private template GetType(U) {
+    alias U.Type GetType;
+}
+
+/// Get tag for type T.
+///
+/// Useful for comparison with tag field of Value struct.
+/// 
+/// Example:
+/// -----------------------------------
+/// Value v = "zzz";
+/// assert(v.tag == GetTypeId!string);
+/// -----------------------------------
+template GetTypeId(T) {
+    ///
+    enum GetTypeId = TypeIdMap[staticIndexOf!(T, staticMap!(GetType, TypeIdMap))].Id;
+}
+
+string generateUnion() {
+    char[] u = "union U {".dup;
+    foreach (t; PrimitiveTagValueTypes) {
+        u ~= t.ValueType.stringof ~ " " ~ t.ch ~ ";".dup;
+    }
+    foreach (t; StringTagValueTypes) {
+        u ~= t.ValueType.stringof ~ " " ~ t.ch ~ ";".dup;
+    }
+    foreach (t; ArrayElementTagValueTypes) {
+        u ~= t.ValueType.stringof ~ "[] " ~ 'B' ~ t.ch ~ ";".dup;
+    }
+    u ~= "}; U u;".dup;
+    return u.idup;
+}
+
+template ArrayOf(T) {
+    alias T[] ArrayOf;
+}
+
+string injectOpAssign() {
+    char[] cs;
+
+    foreach (t; PrimitiveTagValueTypes) {
+        cs ~= "final void opAssign(" ~ t.ValueType.stringof ~ " value) {" ~
+              "  this.u." ~ t.ch ~ " = value;" ~
+              "  this._tag = " ~ to!string(GetTypeId!(t.ValueType)) ~ ";" ~
+              "  this.bam_typeid = '" ~ t.ch ~ "';" ~
+              "}";
+    }
+
+    cs ~= "final void opAssign(string value) {" ~
+          "  this.u.Z = value;" ~
+          "  this._tag = " ~ to!string(GetTypeId!string) ~ ";" ~
+          "  this.bam_typeid = 'Z';" ~
+          "}";
+
+    foreach (t; ArrayElementTagValueTypes) {
+        cs ~= "final void opAssign(" ~ t.ValueType.stringof ~ "[] value) {" ~
+              "  this.u.B" ~ t.ch ~ " = value;" ~
+              "  this._tag = " ~ to!string(GetTypeId!(ArrayOf!(t.ValueType))) ~ ";" ~
+              "  this.bam_typeid = '" ~ t.ch ~ "';" ~
+              "}";
+    }
+
+    return cs.idup;
+}
+
+string injectOpCast() {
+    char[] cs = "static if".dup;
+
+    string injectSwitchPrimitive(string requested_type) 
+    {
+        char[] cs = `switch (_tag) {`.dup;
+              
+        foreach (t2; PrimitiveTagValueTypes) {
+            cs ~= `case GetTypeId!`~t2.ValueType.stringof~`: `~
+                  `    return to!T(u.`~t2.ch~`);`.dup;
+        }
+
+        cs ~= `    default: throw new ConvException("Cannot convert Value to `~
+                                                     requested_type~`");`~
+              `}`;
+        return cs.idup;
+    }
+
+    string injectSwitchArrayElement(string requested_type) 
+    {
+        char[] cs = `switch (_tag) {`.dup;
+              
+        foreach (t2; ArrayElementTagValueTypes) {
+            cs ~= `case GetTypeId!(`~t2.ValueType.stringof~`[]): `~
+                  `    return to!T(u.B`~t2.ch~`);`.dup;
+        }
+
+        cs ~= `    default: throw new ConvException("Cannot convert Value to `~
+                                                     requested_type~`");`~
+              `}`;
+        return cs.idup;
+    }
+
+    foreach (t; TypeTuple!(byte, ubyte, short, ushort, int, uint,
+                           char, float, double, real, long, ulong))
+    {
+        cs ~= `(is(T == `~t.stringof~`)) {`~
+              injectSwitchPrimitive(t.stringof)~
+              `} else static if`.dup;
+    }
+
+    foreach (t; ArrayElementTagValueTypes) {
+        cs ~= `(is(T == ` ~ t.ValueType.stringof ~ `[])) {` ~
+              injectSwitchArrayElement(t.ValueType.stringof ~ "[]")~
+              `} else static if `;
+    }
+
+    cs ~= `(is(T == string)) {` ~
+          `  if (is_string) {`
+          `    return bam_typeid == 'Z' ? u.Z : u.H;`~
+          `  } else if (is_integer || is_float || is_character) {`~
+          `    `~injectSwitchPrimitive("string")~
+          `  } else {`~
+                 injectSwitchArrayElement("string")~
+          `  }`~
+          `}`.dup;
+
+    return "final T opCast(T)() const {" ~ cs.idup ~ "}";
+}
+
+/**
+  Struct for representing tag values. 
+
+  Tagged union, allows to store 
+  8/16/32-bit integers, floats, chars, strings, 
+  and arrays of integers/floats.
+*/
+struct Value {
+
+    /*
+      Notice that having union first allows to do simple casts,
+      without using opCast(). That's a bit hackish but
+      allows for better speed.
+     */
+    private mixin(generateUnion());
+
+    /**
+      If this is an array, one of [cCsSiIf].
+      Otherwise, one of [AcCsSiIfZH]
+
+      See SAM/BAM specification for details.
+    */
+    public char bam_typeid;
+
+    /*
+                                    WARNING:
+
+    Currently, type identifier for (u)int requires 8 bits.
+    Fortunately, SAM/BAM specification doesn't use bigger integer types.
+    However, in case of need to extend the hierarchy, the type
+    should be changed from ubyte to something bigger. 
+    */
+    ubyte _tag;
+
+    /// Designates the type of currently stored value.
+    ///
+    /// Supposed to be used externally for checking type with GetTypeId.
+    ubyte tag() @property const {
+        return _tag;
+    }
+
+    mixin(injectOpAssign());
+    mixin(injectOpCast());
+
+    ///
+    final void opAssign(Value v) {
+        bam_typeid = v.bam_typeid;
+        _tag = v._tag;
+        u = v.u;
+    }
+
+    /// ditto
+    final void opAssign(typeof(null) n) {
+        _tag = GetTypeId!(typeof(null));
+    }
+
+    ///
+    final bool opEquals(T)(const T val) {
+        try {
+            return to!T(this) == val;
+        } catch (ConvException e) {
+            return false;
+        }
+    }
+
+    ///
+    string toString() const {
+        return opCast!string();
+    }
+
+    ///
+    this(T)(T value) {
+        opAssign(value);
+    }
+ 
+    /// sets 'H' tag instead of default 'Z'. Is not expected to be used much.
+    void setHexadecimalFlag() {
+
+        enforce(this.is_string);
+      
+        bam_typeid = 'H';
+        _tag = hexStringTag;
+
+        if (_tag != 0b111) { 
+            u.H = u.Z;
+        }
+    }
+
+    /// Holds $(D null). Represents non-existing tag. Such values are used to remove tags.
+    bool is_nothing() @property const { return _tag == GetTypeId!(typeof(null)); }
+
+    /// char
+    bool is_character() @property const { return _tag == GetTypeId!char; }
+
+    /// float
+    bool is_float() @property const { return _tag == GetTypeId!float; }
+
+    /// ubyte[]/byte[]/ushort[]/short[]/uint[]/int[]/float[]
+    bool is_numeric_array() @property const { return (_tag & 0b111) == 0b001; }
+
+    /// ubyte[]/byte[]/ushort[]/short[]/uint[]/int[]
+    bool is_array_of_integers() @property const { return (_tag & 0b1111) == 0b0001; }
+
+    /// float[]
+    bool is_array_of_floats() @property const { return (_tag & 0b1111) == 0b1001; }
+
+    /// ubyte/byte/ushort/short/uint/int
+    bool is_integer() @property const { return (_tag & 0b1111) == 0; }
+
+    /// ubyte/ushort/uint
+    bool is_unsigned() @property const { return (_tag & 0b11111) == 0; }
+
+    /// byte/short/int
+    bool is_signed() @property const { return (_tag & 0b11111) == 0b10000; }
+
+    /// 'Z' or 'H' tag
+    bool is_string() @property const { return (_tag & 0b111) == 0b101; }
+
+    /// 'H' tag
+    bool is_hexadecimal_string() @property const { return (_tag & 0b1101) == 0b1101; }
+
+    /// Serializes value in MessagePack format
+    public void toMsgpack(Packer)(ref Packer packer) const {
+        switch (_tag) {
+            case GetTypeId!byte: packer.pack(*cast(byte*)(&u)); break;
+            case GetTypeId!ubyte: packer.pack(*cast(ubyte*)(&u)); break;
+            case GetTypeId!short: packer.pack(*cast(short*)(&u)); break;
+            case GetTypeId!ushort: packer.pack(*cast(ushort*)(&u)); break;
+            case GetTypeId!int: packer.pack(*cast(int*)(&u)); break;
+            case GetTypeId!uint: packer.pack(*cast(uint*)(&u)); break;
+
+            case GetTypeId!float: packer.pack(*cast(float*)(&u)); break;
+            case GetTypeId!string: packer.pack(*cast(char[]*)(&u)); break;
+            case hexStringTag: packer.pack(*cast(char[]*)(&u)); break;
+            case GetTypeId!char: packer.pack(*cast(ubyte*)(&u)); break;
+
+            case GetTypeId!(byte[]): packer.pack(*cast(byte[]*)(&u)); break;
+            case GetTypeId!(ubyte[]): packer.pack(*cast(ubyte[]*)(&u)); break;
+            case GetTypeId!(short[]): packer.pack(*cast(short[]*)(&u)); break;
+            case GetTypeId!(ushort[]): packer.pack(*cast(ushort[]*)(&u)); break;
+            case GetTypeId!(int[]): packer.pack(*cast(int[]*)(&u)); break;
+            case GetTypeId!(uint[]): packer.pack(*cast(uint[]*)(&u)); break;
+            case GetTypeId!(float[]): packer.pack(*cast(float[]*)(&u)); break;
+
+            case GetTypeId!(typeof(null)): packer.pack(null); break;
+            default: break;
+        }
+    }
+
+    /// SAM representation
+    string toSam()() const {
+        auto w = appender!(char[])();
+        toSam((const(char)[] s) { w.put(s); });
+        return cast(string)w.data;
+    }
+
+    /// ditto
+    void toSam(Sink)(auto ref Sink sink) const 
+        if (isSomeSink!Sink)
+    {
+        if (is_integer) {
+            sink.write("i:");
+            switch (_tag) {
+                case GetTypeId!byte: sink.write(*cast(byte*)(&u)); break;
+                case GetTypeId!ubyte: sink.write(*cast(ubyte*)(&u)); break;
+                case GetTypeId!short: sink.write(*cast(short*)(&u)); break;
+                case GetTypeId!ushort: sink.write(*cast(ushort*)(&u)); break;
+                case GetTypeId!int: sink.write(*cast(int*)(&u)); break;
+                case GetTypeId!uint: sink.write(*cast(uint*)(&u)); break;
+                default: break;
+            }
+        } else if (is_numeric_array) {
+            sink.write("B:");
+            sink.write(bam_typeid);
+            sink.write(',');
+            switch (_tag) {
+                case GetTypeId!(byte[]): sink.writeArray(*cast(byte[]*)(&u), ','); break;
+                case GetTypeId!(ubyte[]): sink.writeArray(*cast(ubyte[]*)(&u), ','); break;
+                case GetTypeId!(short[]): sink.writeArray(*cast(short[]*)(&u), ','); break;
+                case GetTypeId!(ushort[]): sink.writeArray(*cast(ushort[]*)(&u), ','); break;
+                case GetTypeId!(int[]): sink.writeArray(*cast(int[]*)(&u), ','); break;
+                case GetTypeId!(uint[]): sink.writeArray(*cast(uint[]*)(&u), ','); break;
+                case GetTypeId!(float[]): sink.writeArray(*cast(float[]*)(&u), ','); break;
+                default: break;
+            }
+        } else {
+            switch (_tag) {
+                case GetTypeId!float: sink.write("f:"); sink.write(*cast(float*)(&u)); break;
+                case GetTypeId!string: sink.write("Z:"); sink.write(*cast(const(char)[]*)(&u)); break;
+                case hexStringTag: sink.write("H:"); sink.write(*cast(const(char)[]*)(&u)); break;
+                case GetTypeId!char: sink.write("A:"); sink.write(*cast(char*)(&u)); break;
+                default: break;
+            }
+        }
+    }
+
+    /// JSON representation
+    string toJson()() const {
+        auto w = appender!(char[])();
+        toJson((const(char)[] s) { w.put(s); });
+        return cast(string)w.data;
+    }
+
+    /// ditto
+    void toJson(Sink)(auto ref Sink sink) const 
+        if (isSomeSink!Sink)
+    {
+        switch (_tag) {
+            case GetTypeId!byte: sink.writeJson(*cast(byte*)(&u)); break;
+            case GetTypeId!ubyte: sink.writeJson(*cast(ubyte*)(&u)); break;
+            case GetTypeId!short: sink.writeJson(*cast(short*)(&u)); break;
+            case GetTypeId!ushort: sink.writeJson(*cast(ushort*)(&u)); break;
+            case GetTypeId!int: sink.writeJson(*cast(int*)(&u)); break;
+            case GetTypeId!uint: sink.writeJson(*cast(uint*)(&u)); break;
+            case GetTypeId!(byte[]): sink.writeJson(*cast(byte[]*)(&u)); break;
+            case GetTypeId!(ubyte[]): sink.writeJson(*cast(ubyte[]*)(&u)); break;
+            case GetTypeId!(short[]): sink.writeJson(*cast(short[]*)(&u)); break;
+            case GetTypeId!(ushort[]): sink.writeJson(*cast(ushort[]*)(&u)); break;
+            case GetTypeId!(int[]): sink.writeJson(*cast(int[]*)(&u)); break;
+            case GetTypeId!(uint[]): sink.writeJson(*cast(uint[]*)(&u)); break;
+            case GetTypeId!(float[]): sink.writeJson(*cast(float[]*)(&u)); break;
+            case GetTypeId!float: sink.writeJson(*cast(float*)(&u)); break;
+            case GetTypeId!string: sink.writeJson(*cast(string*)(&u)); break;
+            case hexStringTag: sink.writeJson(*cast(string*)(&u)); break;
+            case GetTypeId!char: sink.writeJson(*cast(char*)(&u)); break;
+            default: break;
+        }
+    }
+}
+
+Value readValueFromArray(char type, const(ubyte)[] bytes, ref size_t offset) {
+    string readValueArrayTypeHelper() {
+        char[] cases;
+        foreach (c2t; ArrayElementTagValueTypes) {
+            cases ~=
+            "case '"~c2t.ch~"':".dup~
+            "  auto begin = offset;"~
+            "  auto end = offset + length * "~c2t.ValueType.stringof~".sizeof;"~
+            "  offset = end;"~
+            "  return Value(cast("~c2t.ValueType.stringof~"[])(bytes[begin .. end]));";
+        }
+        return to!string("switch (elem_type) {" ~ cases ~
+               "  default: throw new UnknownTagTypeException(to!string(elem_type));"~
+               "}");
+    }
+
+    string readValuePrimitiveTypeHelper() {
+        char[] cases;
+        foreach (c2t; PrimitiveTagValueTypes) {
+            cases ~= "case '"~c2t.ch~"':"~
+                     "  auto p = bytes.ptr + offset;"~
+                     "  auto value = *(cast("~c2t.ValueType.stringof~"*)p);"~
+                     "  offset += value.sizeof;"~
+                     "  return Value(value);".dup;
+        }
+        return to!string("switch (type) {" ~ cases ~
+               "  default: throw new UnknownTagTypeException(to!string(type));"~
+               "}");
+    }
+
+    if (type == 'Z' || type == 'H') {
+        auto begin = offset;
+        while (bytes[offset++] != 0) {}
+        // return string with stripped '\0'
+        auto v = Value(cast(string)bytes[begin .. offset - 1]);
+        if (type == 'H') {
+            v.setHexadecimalFlag();
+        }
+        return v;
+    } else if (type == 'B') {
+        char elem_type = cast(char)bytes[offset++];
+        uint length = *(cast(uint*)(bytes.ptr + offset));
+        offset += uint.sizeof;
+        mixin(readValueArrayTypeHelper());
+    } else {
+        mixin(readValuePrimitiveTypeHelper());
+    }
+}
diff --git a/bio/bam/thirdparty/msgpack.d b/bio/bam/thirdparty/msgpack.d
new file mode 100644
index 0000000..bf5ca5b
--- /dev/null
+++ b/bio/bam/thirdparty/msgpack.d
@@ -0,0 +1,5173 @@
+// Written in the D programming language.
+
+/**
+ * MessagePack serializer and deserializer implementation.
+ *
+ * MessagePack is a binary-based serialization specification.
+ *
+ * Example:
+ * -----
+ * auto data = tuple("MessagePack!", [1, 2], true);
+ *
+ * auto serialized = pack(data);
+ *
+ * // ...
+ *
+ * typeof(data) deserialized;
+ *
+ * unpack(serialized, deserialized);
+ *
+ * assert(data == deserialized);
+ * -----
+ *
+ * See_Also:
+ *  $(LINK2 http://msgpack.org/, The MessagePack Project)$(BR)
+ *  $(LINK2 http://wiki.msgpack.org/display/MSGPACK/Design+of+Serialization, MessagePack Design concept)$(BR)
+ *  $(LINK2 http://wiki.msgpack.org/display/MSGPACK/Format+specification, MessagePack data format)
+ *
+ * Copyright: Copyright Masahiro Nakagawa 2010-.
+ * License:   <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
+ * Authors:   Masahiro Nakagawa
+ */
+module bio.bam.thirdparty.msgpack;
+
+import std.array;
+import std.exception;
+import std.range;
+import std.stdio;
+import std.traits;
+import std.typecons;
+import std.typetuple;
+
+// for RefBuffer
+version(Posix)
+{
+    import core.sys.posix.sys.uio : iovec;
+}
+else
+{
+    /**
+     * from core.sys.posix.sys.uio.iovec for compatibility with posix.
+     */
+    struct iovec
+    {
+        void*  iov_base;
+        size_t iov_len;
+    }
+}
+
+// for Converting Endian using ntohs and ntohl;
+version(Windows)
+{
+    import std.c.windows.winsock;
+}
+else
+{
+    import core.sys.posix.arpa.inet;
+}
+
+version(EnableReal)
+{
+    enum EnableReal = true;
+}
+else
+{
+    enum EnableReal = false;
+}
+
+static if (real.sizeof == double.sizeof) {
+    // for 80bit real inter-operation on non-x86 CPU
+    version = NonX86;
+
+    import std.numeric;
+}
+
+version(unittest) import std.file, std.c.string;
+
+
+ at trusted:
+
+
+public:
+
+
+// Convenient functions
+
+
+/**
+ * Serializes $(D_PARAM args).
+ *
+ * Assumes single object if the length of $(D_PARAM args) == 1,
+ * otherwise array object.
+ *
+ * Params:
+ *  args = the contents to serialize.
+ *
+ * Returns:
+ *  a serialized data.
+ */
+ubyte[] pack(bool withFieldName = false, Args...)(in Args args)
+{
+    auto packer = Packer(withFieldName);
+
+    static if (Args.length == 1)
+        packer.pack(args[0]);
+    else
+        packer.packArray(args);
+
+    return packer.stream.data;
+}
+
+
+unittest
+{
+    auto serialized = pack(false);
+
+    assert(serialized[0] == Format.FALSE);
+
+    auto deserialized = unpack(pack(1, true, "Foo"));
+
+    assert(deserialized.type == Value.Type.array);
+    assert(deserialized.via.array[0].type == Value.Type.unsigned);
+    assert(deserialized.via.array[1].type == Value.Type.boolean);
+    assert(deserialized.via.array[2].type == Value.Type.raw);
+}
+
+
+/**
+ * Deserializes $(D_PARAM buffer) using stream deserializer.
+ *
+ * Params:
+ *  buffer = the buffer to deserialize.
+ *
+ * Returns:
+ *  a $(D Unpacked) contains deserialized object.
+ *
+ * Throws:
+ *  UnpackException if deserialization doesn't succeed.
+ */
+Unpacked unpack(in ubyte[] buffer)
+{
+    auto unpacker = StreamingUnpacker(buffer);
+
+    if (!unpacker.execute())
+        throw new UnpackException("Deserialization failure");
+
+    return unpacker.unpacked;
+}
+
+
+/**
+ * Deserializes $(D_PARAM buffer) using direct-conversion deserializer.
+ *
+ * Assumes single object if the length of $(D_PARAM args) == 1,
+ * otherwise array object.
+ *
+ * Params:
+ *  buffer = the buffer to deserialize.
+ *  args   = the references of values to assign.
+ */
+void unpack(bool withFieldName = false, Args...)(in ubyte[] buffer, ref Args args)
+{
+    auto unpacker = Unpacker(buffer, buffer.length, withFieldName);
+
+    static if (Args.length == 1)
+        unpacker.unpack(args[0]);
+    else
+        unpacker.unpackArray(args);
+}
+
+
+/**
+ * Return value version
+ */
+Type unpack(Type, bool withFieldName = false)(in ubyte[] buffer)
+{
+    auto unpacker = Unpacker(buffer, buffer.length, withFieldName);
+
+    Type result;
+    unpacker.unpack(result);
+    return result;
+}
+
+
+unittest
+{
+    { // stream
+        auto result = unpack(pack(false));
+
+        assert(result.via.boolean == false);
+    }
+    { // direct conversion
+        Tuple!(uint, string) result;
+        Tuple!(uint, string) test = tuple(1, "Hi!");
+
+        unpack(pack(test), result);
+        assert(result == test);
+
+        test.field[0] = 2;
+        test.field[1] = "Hey!";
+        unpack(pack(test.field[0], test.field[1]), result.field[0], result.field[1]);
+        assert(result == test);
+    }
+    { // return value direct conversion
+        Tuple!(uint, string) test = tuple(1, "Hi!");
+
+        auto data = pack(test);
+        assert(data.unpack!(Tuple!(uint, string)) == test);
+    }
+    { // serialize object as a Map
+        static class C
+        {
+            int num;
+
+            this(int num) { this.num = num; }
+        }
+
+        auto test = new C(10);
+        auto result = new C(100);
+
+        unpack!(true)(pack!(true)(test), result);
+        assert(result.num == 10, "Unpacking with field names failed");
+    }
+}
+
+
+unittest
+{
+    // unittest for https://github.com/msgpack/msgpack-d/issues/8
+    foreach (Type; TypeTuple!(byte, short, int, long)) {
+        foreach (i; [-33, -20, -1, 0, 1, 20, 33]) {
+            Type a = cast(Type)i;
+            Type b;
+            unpack(pack(a), b);
+            assert(a == b);
+        }
+    }
+}
+
+
+/**
+ * $(D MessagePackException) is a root Exception for MessagePack related operation.
+ */
+class MessagePackException : Exception
+{
+    pure this(string message)
+    {
+        super(message);
+    }
+}
+
+
+/**
+ * Attribute for specifying non pack/unpack field.
+ * This is an alternative approach of MessagePackable mixin.
+ *
+ * Example:
+ * -----
+ * struct S
+ * {
+ *     int num;
+ *     // Packer/Unpacker ignores this field;
+ *     @nonPacked string str;
+ * }
+ * -----
+ */
+struct nonPacked {}
+
+template isPackedField(alias field)
+{
+    enum isPackedField = (staticIndexOf!(nonPacked, __traits(getAttributes, field)) == -1) && (!isSomeFunction!(typeof(field)));
+}
+
+
+// Serializing routines
+
+
+/**
+ * $(D Packer) is a $(D MessagePack) serializer
+ *
+ * Example:
+ * -----
+ * auto packer = packer(Appender!(ubyte[])());
+ *
+ * packer.packArray(false, 100, 1e-10, null);
+ *
+ * stdout.rawWrite(packer.buffer.data);
+ * -----
+ *
+ * NOTE:
+ *  Current implementation can't deal with a circular reference.
+ *  If you try to serialize a object that has circular reference, runtime raises 'Stack Overflow'.
+ */
+struct PackerImpl(Stream) if (isOutputRange!(Stream, ubyte) && isOutputRange!(Stream, ubyte[]))
+{
+  private:
+    static @system
+    {
+        alias void delegate(ref PackerImpl, void*) PackHandler;
+        PackHandler[TypeInfo] packHandlers;
+
+        public void registerHandler(T, alias Handler)()
+        {
+            packHandlers[typeid(T)] = delegate(ref PackerImpl packer, void* obj) {
+                Handler(packer, *cast(T*)obj);
+            };
+        }
+    }
+
+    enum size_t Offset = 1;  // type-information offset
+
+    Stream                   stream_;  // the stream to write
+    ubyte[Offset + RealSize] store_;   // stores serialized value
+    bool                     withFieldName_;
+
+
+  public:
+    /**
+     * Constructs a packer with $(D_PARAM stream).
+     *
+     * Params:
+     *  stream        = the stream to write.
+     *  withFieldName = serialize class / struct with field name
+     */
+    this(Stream stream, bool withFieldName = false)
+    {
+        stream_        = stream;
+        withFieldName_ = withFieldName;
+    }
+
+
+    /**
+     * Constructs a packer with $(D_PARAM withFieldName).
+     *
+     * Params:
+     *  withFieldName = serialize class / struct with field name
+     */
+    this(bool withFieldName = false)
+    {
+        withFieldName_ = withFieldName;
+    }
+
+
+    /**
+     * Forwards to stream.
+     *
+     * Returns:
+     *  the stream.
+     */
+    @property @safe
+    nothrow ref Stream stream()
+    {
+        return stream_;
+    }
+
+
+    /**
+     * Serializes argument and writes to stream.
+     *
+     * If the argument is the pointer type, dereferences the pointer and serializes pointed value.
+     * -----
+     * int  a = 10;
+     * int* b = &b;
+     *
+     * packer.pack(b);  // serializes 10, not address of a
+     * -----
+     * Serializes nil if the argument of nullable type is null.
+     *
+     * NOTE:
+     *  MessagePack doesn't define $(D_KEYWORD real) type format.
+     *  Don't serialize $(D_KEYWORD real) if you communicate with other languages.
+     *  Transfer $(D_KEYWORD double) serialization if $(D_KEYWORD real) on your environment equals $(D_KEYWORD double).
+     *
+     * Params:
+     *  value = the content to serialize.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref PackerImpl pack(T)(in T value) if (is(Unqual!T == bool))
+    {
+        if (value)
+            stream_.put(Format.TRUE);
+        else
+            stream_.put(Format.FALSE);
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T value) if (isUnsigned!T && !is(Unqual!T == enum))
+    {
+        // ulong < ulong is slower than uint < uint
+        static if (!is(Unqual!T  == ulong)) {
+            enum Bits = T.sizeof * 8;
+
+            if (value < (1 << 8)) {
+                if (value < (1 << 7)) {
+                    // fixnum
+                    stream_.put(take8from!Bits(value));
+                } else {
+                    // uint 8
+                    store_[0] = Format.UINT8;
+                    store_[1] = take8from!Bits(value);
+                    stream_.put(store_[0..Offset + ubyte.sizeof]);
+                }
+            } else {
+                if (value < (1 << 16)) {
+                    // uint 16
+                    const temp = convertEndianTo!16(value);
+
+                    store_[0] = Format.UINT16;
+                    *cast(ushort*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + ushort.sizeof]);
+                } else {
+                    // uint 32
+                    const temp = convertEndianTo!32(value);
+
+                    store_[0] = Format.UINT32;
+                    *cast(uint*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + uint.sizeof]);
+                }
+            }
+        } else {
+            if (value < (1UL << 8)) {
+                if (value < (1UL << 7)) {
+                    // fixnum
+                    stream_.put(take8from!64(value));
+                } else {
+                    // uint 8
+                    store_[0] = Format.UINT8;
+                    store_[1] = take8from!64(value);
+                    stream_.put(store_[0..Offset + ubyte.sizeof]);
+                }
+            } else {
+                if (value < (1UL << 16)) {
+                    // uint 16
+                    const temp = convertEndianTo!16(value);
+
+                    store_[0] = Format.UINT16;
+                    *cast(ushort*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + ushort.sizeof]);
+                } else if (value < (1UL << 32)){
+                    // uint 32
+                    const temp = convertEndianTo!32(value);
+
+                    store_[0] = Format.UINT32;
+                    *cast(uint*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + uint.sizeof]);
+                } else {
+                    // uint 64
+                    const temp = convertEndianTo!64(value);
+
+                    store_[0] = Format.UINT64;
+                    *cast(ulong*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + ulong.sizeof]);
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T value) if (isSigned!T && isIntegral!T && !is(Unqual!T == enum))
+    {
+        // long < long is slower than int < int
+        static if (!is(Unqual!T == long)) {
+            enum Bits = T.sizeof * 8;
+
+            if (value < -(1 << 5)) {
+                if (value < -(1 << 15)) {
+                    // int 32
+                    const temp = convertEndianTo!32(value);
+
+                    store_[0] = Format.INT32;
+                    *cast(int*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + int.sizeof]);
+                } else if (value < -(1 << 7)) {
+                    // int 16
+                    const temp = convertEndianTo!16(value);
+
+                    store_[0] = Format.INT16;
+                    *cast(short*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + short.sizeof]);
+                } else {
+                    // int 8
+                    store_[0] = Format.INT8;
+                    store_[1] = take8from!Bits(value);
+                    stream_.put(store_[0..Offset + byte.sizeof]);
+                }
+            } else if (value < (1 << 7)) {
+                // fixnum
+                stream_.put(take8from!Bits(value));
+            } else {
+                if (value < (1 << 8)) {
+                    // uint 8
+                    store_[0] = Format.UINT8;
+                    store_[1] = take8from!Bits(value);
+                    stream_.put(store_[0..Offset + ubyte.sizeof]);
+                } else if (value < (1 << 16)) {
+                    // uint 16
+                    const temp = convertEndianTo!16(value);
+
+                    store_[0] = Format.UINT16;
+                    *cast(ushort*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + ushort.sizeof]);
+                } else {
+                    // uint 32
+                    const temp = convertEndianTo!32(value);
+
+                    store_[0] = Format.UINT32;
+                    *cast(uint*)&store_[Offset] = temp;
+                    stream_.put(store_[0..Offset + uint.sizeof]);
+                }
+            }
+        } else {
+            if (value < -(1L << 5)) {
+                if (value < -(1L << 15)) {
+                    if (value < -(1L << 31)) {
+                        // int 64
+                        const temp = convertEndianTo!64(value);
+
+                        store_[0] = Format.INT64;
+                        *cast(long*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + long.sizeof]);
+                    } else {
+                        // int 32
+                        const temp = convertEndianTo!32(value);
+
+                        store_[0] = Format.INT32;
+                        *cast(int*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + int.sizeof]);
+                    }
+                } else {
+                    if (value < -(1L << 7)) {
+                        // int 16
+                        const temp = convertEndianTo!16(value);
+
+                        store_[0] = Format.INT16;
+                        *cast(short*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + short.sizeof]);
+                    } else {
+                        // int 8
+                        store_[0] = Format.INT8;
+                        store_[1] = take8from!64(value);
+                        stream_.put(store_[0..Offset + byte.sizeof]);
+                    }
+                }
+            } else if (value < (1L << 7)) {
+                // fixnum
+                stream_.put(take8from!64(value));
+            } else {
+                if (value < (1L << 16)) {
+                    if (value < (1L << 8)) {
+                        // uint 8
+                        store_[0] = Format.UINT8;
+                        store_[1] = take8from!64(value);
+                        stream_.put(store_[0..Offset + ubyte.sizeof]);
+                    } else {
+                        // uint 16
+                        const temp = convertEndianTo!16(value);
+
+                        store_[0] = Format.UINT16;
+                        *cast(ushort*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + ushort.sizeof]);
+                    }
+                } else {
+                    if (value < (1L << 32)) {
+                        // uint 32
+                        const temp = convertEndianTo!32(value);
+
+                        store_[0] = Format.UINT32;
+                        *cast(uint*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + uint.sizeof]);
+                    } else {
+                        // uint 64
+                        const temp = convertEndianTo!64(value);
+
+                        store_[0] = Format.UINT64;
+                        *cast(ulong*)&store_[Offset] = temp;
+                        stream_.put(store_[0..Offset + ulong.sizeof]);
+                    }
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T value) if (isFloatingPoint!T && !is(Unqual!T == enum))
+    {
+        static if (is(Unqual!T == float)) {
+            const temp = convertEndianTo!32(_f(value).i);
+
+            store_[0] = Format.FLOAT;
+            *cast(uint*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + uint.sizeof]);
+        } else static if (is(Unqual!T == double)) {
+            const temp = convertEndianTo!64(_d(value).i);
+
+            store_[0] = Format.DOUBLE;
+            *cast(ulong*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + ulong.sizeof]);
+        } else {
+            static if ((real.sizeof > double.sizeof) && EnableReal) {
+                store_[0]      = Format.REAL;
+                const temp     = _r(value);
+                const fraction = convertEndianTo!64(temp.fraction);
+                const exponent = convertEndianTo!16(temp.exponent);
+
+                *cast(Unqual!(typeof(fraction))*)&store_[Offset]                   = fraction;
+                *cast(Unqual!(typeof(exponent))*)&store_[Offset + fraction.sizeof] = exponent;
+                stream_.put(store_[0..$]);
+            } else {  // Non-x86 CPUs, real type equals double type.
+                pack(cast(double)value);
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T value) if (is(Unqual!T == enum))
+    {
+        pack(cast(OriginalType!T)value);
+
+        return this;
+    }
+
+
+    /// Overload for pack(null) for 2.057 or later
+    static if (!is(typeof(null) == void*))
+    {
+        ref PackerImpl pack(T)(in T value) if (is(Unqual!T == typeof(null)))
+        {
+            return packNil();
+        }
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T value) if (isPointer!T)
+    {
+        static if (is(Unqual!T == void*)) {  // for pack(null) for 2.056 or earlier
+            enforce(value is null, "Can't serialize void type");
+            stream_.put(Format.NIL);
+        } else {
+            if (value is null)
+                stream_.put(Format.NIL);
+            else
+                pack(mixin(AsteriskOf!T ~ "value"));
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T array) if (isArray!T)
+    {
+        alias typeof(T.init[0]) U;
+
+        /*
+         * Serializes raw type-information to stream.
+         */
+        void beginRaw(in size_t length)
+        {
+            if (length < 32) {
+                const ubyte temp = Format.RAW | cast(ubyte)length;
+                stream_.put(take8from(temp));
+            } else if (length < 65536) {
+                const temp = convertEndianTo!16(length);
+
+                store_[0] = Format.RAW16;
+                *cast(ushort*)&store_[Offset] = temp;
+                stream_.put(store_[0..Offset + ushort.sizeof]);
+            } else {
+                const temp = convertEndianTo!32(length);
+
+                store_[0] = Format.RAW32;
+                *cast(uint*)&store_[Offset] = temp;
+                stream_.put(store_[0..Offset + uint.sizeof]);
+            }
+        }
+
+        if (array.empty)
+            return packNil();
+
+        // Raw bytes
+        static if (isByte!(U) || isSomeChar!(U)) {
+            ubyte[] raw = cast(ubyte[])array;
+
+            beginRaw(raw.length);
+            stream_.put(raw);
+        } else {
+            beginArray(array.length);
+            foreach (elem; array)
+                pack(elem);
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(T)(in T array) if (isAssociativeArray!T)
+    {
+        if (array is null)
+            return packNil();
+
+        beginMap(array.length);
+        foreach (key, value; array) {
+            pack(key);
+            pack(value);
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl pack(Types...)(auto ref const Types objects) if (Types.length > 1)
+    {
+        foreach (i, T; Types)
+            pack(objects[i]);
+
+        return this;
+    }
+
+
+    /**
+     * Serializes $(D_PARAM object) and writes to stream.
+     *
+     * Calling $(D toMsgpack) if $(D_KEYWORD class) and $(D_KEYWORD struct) implement $(D toMsgpack) method. $(D toMsgpack) signature is:
+     * -----
+     * void toMsgpack(Packer)(ref Packer packer) const
+     * -----
+     * This method serializes all members of T object if $(D_KEYWORD class) and $(D_KEYWORD struct) don't implement $(D toMsgpack).
+     *
+     * An object that doesn't implement $(D toMsgpack) is serialized to Array type.
+     * -----
+     * packer.pack(tuple(true, 1, "Hi!"))  // -> '[true, 1, "Hi!"]', not 'ture, 1, "Hi!"'
+     *
+     * struct Foo
+     * {
+     *     int num    = 10;
+     *     string msg = "D!";
+     * }
+     * packer.pack(Foo());  // -> '[10, "D!"]'
+     *
+     * class Base
+     * {
+     *     bool flag = true;
+     * }
+     * class Derived : Base
+     * {
+     *     double = 0.5f;
+     * }
+     * packer.pack(new Derived());  // -> '[true, 0.5f]'
+     * -----
+     *
+     * Params:
+     *  object = the content to serialize.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref PackerImpl pack(T)(in T object) if (is(Unqual!T == class))
+    {
+        if (object is null)
+            return packNil();
+
+        static if (hasMember!(T, "toMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.toMsgpack(this, withFieldName_); })) {
+                object.toMsgpack(this, withFieldName_);
+            } else static if (__traits(compiles, { T t; t.toMsgpack(this); })) { // backward compatible
+                object.toMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'toMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else {
+            if (auto handler = object.classinfo in packHandlers) {
+                (*handler)(this, cast(void*)&object);
+                return this;
+            }
+            if (T.classinfo !is object.classinfo) {
+                throw new MessagePackException("Can't pack derived class through reference to base class.");
+            }
+
+            alias SerializingClasses!(T) Classes;
+
+            immutable memberNum = SerializingMemberNumbers!(Classes);
+            if (withFieldName_)
+                beginMap(memberNum);
+            else
+                beginArray(memberNum);
+
+            foreach (Class; Classes) {
+                Class obj = cast(Class)object;
+                if (withFieldName_) {
+                    foreach (i, f ; obj.tupleof) {
+                        static if (isPackedField!(Class.tupleof[i])) {
+                            pack(getFieldName!(Class, i));
+                            pack(f);
+                        }
+                    }
+                } else {
+                    foreach (i, f ; obj.tupleof) {
+                        static if (isPackedField!(Class.tupleof[i]))
+                            pack(f);
+                    }
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    @trusted
+    ref PackerImpl pack(T)(auto ref T object) if (is(Unqual!T == struct))
+    {
+        static if (hasMember!(T, "toMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.toMsgpack(this, withFieldName_); })) {
+                object.toMsgpack(this, withFieldName_);
+            } else static if (__traits(compiles, { T t; t.toMsgpack(this); })) { // backward compatible
+                object.toMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'toMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else static if (isTuple!T) {
+            beginArray(object.field.length);
+            foreach (f; object.field)
+                pack(f);
+        } else {  // simple struct
+            if (auto handler = typeid(T) in packHandlers) {
+                (*handler)(this, cast(void*)&object);
+                return this;
+            }
+
+            immutable memberNum = SerializingMemberNumbers!(T);
+            if (withFieldName_)
+                beginMap(memberNum);
+            else
+                beginArray(memberNum);
+
+            if (withFieldName_) {
+                foreach (i, f; object.tupleof) {
+                    static if (isPackedField!(T.tupleof[i]) && __traits(compiles, { pack(f); }))
+                    {
+                        pack(getFieldName!(T, i));
+                        pack(f);
+                    }
+                }
+            } else {
+                foreach (i, f; object.tupleof) {
+                    static if (isPackedField!(T.tupleof[i]) && __traits(compiles, { pack(f); }))
+                        pack(f);
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /**
+     * Serializes the arguments as container to stream.
+     *
+     * -----
+     * packer.packArray(true, 1);  // -> [true, 1]
+     * packer.packMap("Hi", 100);  // -> ["Hi":100]
+     * -----
+     *
+     * In packMap, the number of arguments must be even.
+     *
+     * Params:
+     *  objects = the contents to serialize.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref PackerImpl packArray(Types...)(auto ref const Types objects)
+    {
+        beginArray(Types.length);
+        foreach (i, T; Types)
+            pack(objects[i]);
+        //pack(objects);  // slow :(
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl packMap(Types...)(auto ref const Types objects)
+    {
+        static assert(Types.length % 2 == 0, "The number of arguments must be even");
+
+        beginMap(Types.length / 2);
+        foreach (i, T; Types)
+            pack(objects[i]);
+
+        return this;
+    }
+
+
+    /**
+     * Serializes the type-information to stream.
+     *
+     * These methods don't serialize contents.
+     * You need to call pack method to serialize contents at your own risk.
+     * -----
+     * packer.beginArray(3).pack(true, 1);  // -> [true, 1,
+     *
+     * // other operation
+     *
+     * packer.pack("Hi!");                  // -> [true, 1, "Hi!"]
+     * -----
+     *
+     * Params:
+     *  length = the length of container.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref PackerImpl beginArray(in size_t length)
+    {
+        if (length < 16) {
+            const ubyte temp = Format.ARRAY | cast(ubyte)length;
+            stream_.put(take8from(temp));
+        } else if (length < 65536) {
+            const temp = convertEndianTo!16(length);
+
+            store_[0] = Format.ARRAY16;
+            *cast(ushort*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + ushort.sizeof]);
+        } else {
+            const temp = convertEndianTo!32(length);
+
+            store_[0] = Format.ARRAY32;
+            *cast(uint*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + uint.sizeof]);
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref PackerImpl beginMap(in size_t length)
+    {
+        if (length < 16) {
+            const ubyte temp = Format.MAP | cast(ubyte)length;
+            stream_.put(take8from(temp));
+        } else if (length < 65536) {
+            const temp = convertEndianTo!16(length);
+
+            store_[0] = Format.MAP16;
+            *cast(ushort*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + ushort.sizeof]);
+        } else {
+            const temp = convertEndianTo!32(length);
+
+            store_[0] = Format.MAP32;
+            *cast(uint*)&store_[Offset] = temp;
+            stream_.put(store_[0..Offset + uint.sizeof]);
+        }
+
+        return this;
+    }
+
+
+  private:
+    /*
+     * Serializes the nil value.
+     */
+    ref PackerImpl packNil()
+    {
+        stream_.put(Format.NIL);
+        return this;
+    }
+}
+
+
+/// Default serializer
+alias PackerImpl!(Appender!(ubyte[])) Packer;  // should be pure struct?
+
+
+/**
+ * Register a serialization handler for $(D_PARAM T) type
+ *
+ * Example:
+ * -----
+ * registerPackHandler!(Foo, fooPackHandler);
+ * -----
+ */
+void registerPackHandler(T, alias Handler, Stream = Appender!(ubyte[]))()
+{
+    PackerImpl!(Stream).registerHandler!(T, Handler);
+}
+
+
+/**
+ * Helper for $(D Packer) construction.
+ *
+ * Params:
+ *  stream = the stream to write.
+ *  withFieldName = serialize class / struct with field name
+ *
+ * Returns:
+ *  a $(D Packer) object instantiated and initialized according to the arguments.
+ */
+PackerImpl!(Stream) packer(Stream)(Stream stream, bool withFieldName = false)
+{
+    return typeof(return)(stream, withFieldName);
+}
+
+
+// Buffer implementations
+
+
+/**
+ * $(D RefBuffer) is a reference stored buffer for more efficient serialization
+ *
+ * Example:
+ * -----
+ * auto packer = packer(RefBuffer(16));  // threshold is 16
+ *
+ * // packs data
+ *
+ * writev(fd, cast(void*)packer.buffer.vector.ptr, packer.buffer.vector.length);
+ * -----
+ */
+struct RefBuffer
+{
+  private:
+    static struct Chunk
+    {
+        ubyte[] data;  // storing serialized value
+        size_t  used;  // used size of data
+    }
+
+    immutable size_t Threshold;
+    immutable size_t ChunkSize;
+
+    // for putCopy
+    Chunk[] chunks_;  // memory chunk for buffer
+    size_t  index_;   // index for cunrrent chunk
+
+    // for putRef
+    iovec[] vecList_;  // reference to large data or copied data.
+
+
+  public:
+    /**
+     * Constructs a buffer.
+     *
+     * Params:
+     *  threshold = the threshold of writing value or stores reference.
+     *  chunkSize = the default size of chunk for allocation.
+     */
+    @safe
+    this(in size_t threshold, in size_t chunkSize = 8192)
+    {
+        Threshold = threshold;
+        ChunkSize = chunkSize;
+
+        chunks_.length = 1;
+        chunks_[index_].data.length = chunkSize;
+    }
+
+
+    /**
+     * Returns the buffer contents that excluding references.
+     *
+     * Returns:
+     *  the non-contiguous copied contents.
+     */
+    @property @safe
+    nothrow ubyte[] data()
+    {
+        ubyte[] result;
+
+        foreach (ref chunk; chunks_)
+            result ~= chunk.data[0..chunk.used];
+
+        return result;
+    }
+
+
+    /**
+     * Forwards to all buffer contents.
+     *
+     * Returns:
+     *  the array of iovec struct that stores references.
+     */
+    @property @safe
+    nothrow ref iovec[] vector()
+    {
+        return vecList_;
+    }
+
+
+    /**
+     * Writes the argument to buffer and stores the reference of writed content
+     * if the argument size is smaller than threshold,
+     * otherwise stores the reference of argument directly.
+     *
+     * Params:
+     *  value = the content to write.
+     */
+    @safe
+    void put(in ubyte value)
+    {
+        ubyte[1] values = [value];
+        putCopy(values);
+    }
+
+
+    /// ditto
+    @safe
+    void put(in ubyte[] value)
+    {
+        if (value.length < Threshold)
+            putCopy(value);
+        else
+            putRef(value);
+    }
+
+
+  private:
+    /*
+     * Stores the reference of $(D_PARAM value).
+     *
+     * Params:
+     *  value = the content to write.
+     */
+    @trusted
+    void putRef(in ubyte[] value)
+    {
+        vecList_.length += 1;
+        vecList_[$ - 1]  = iovec(cast(void*)value.ptr, value.length);
+    }
+
+
+    /*
+     * Writes $(D_PARAM value) to buffer and appends to its reference.
+     *
+     * Params:
+     *  value = the contents to write.
+     */
+    @trusted
+    void putCopy(in ubyte[] value)
+    {
+        /*
+         * Helper for expanding new space.
+         */
+        void expand(in size_t size)
+        {
+            const newSize = size < ChunkSize ? ChunkSize : size;
+
+            index_++;
+            chunks_.length = 1;
+            chunks_[index_].data.length = newSize;
+        }
+
+        const size = value.length;
+
+        // lacks current chunk?
+        if (chunks_[index_].data.length - chunks_[index_].used < size)
+            expand(size);
+
+        const base = chunks_[index_].used;                     // start index
+        auto  data = chunks_[index_].data[base..base + size];  // chunk to write
+
+        data[] = value[];
+        chunks_[index_].used += size;
+
+        // Optimization for avoiding iovec allocation.
+        if (vecList_.length && data.ptr == (vecList_[$ - 1].iov_base +
+                                            vecList_[$ - 1].iov_len))
+            vecList_[$ - 1].iov_len += size;
+        else
+            putRef(data);
+    }
+}
+
+
+unittest
+{
+    static assert(isOutputRange!(RefBuffer, ubyte) &&
+                  isOutputRange!(RefBuffer, ubyte[]));
+
+    auto buffer = RefBuffer(2, 4);
+
+    ubyte[] tests = [1, 2];
+    foreach (v; tests)
+        buffer.put(v);
+    buffer.put(tests);
+
+    assert(buffer.data == tests, "putCopy failed");
+
+    iovec[] vector = buffer.vector;
+    ubyte[] result;
+
+    assert(vector.length == 2, "Optimization failed");
+
+    foreach (v; vector)
+        result ~= (cast(ubyte*)v.iov_base)[0..v.iov_len];
+
+    assert(result == tests ~ tests);
+}
+
+
+version (unittest)
+{
+    mixin template DefinePacker()
+    {
+        Packer packer;
+    }
+
+    mixin template DefineDictionalPacker()
+    {
+        Packer packer = Packer(false);
+    }
+}
+
+unittest
+{
+    { // unique value
+        mixin DefinePacker;
+
+        ubyte[] result = [Format.NIL, Format.TRUE, Format.FALSE];
+
+        packer.pack(null, true, false);
+        foreach (i, value; packer.stream.data)
+            assert(value == result[i]);
+    }
+    { // uint *
+        static struct UTest { ubyte format; ulong value; }
+
+        enum : ulong { A = ubyte.max, B = ushort.max, C = uint.max, D = ulong.max }
+
+        static UTest[][] utests = [
+            [{Format.UINT8, A}],
+            [{Format.UINT8, A}, {Format.UINT16, B}],
+            [{Format.UINT8, A}, {Format.UINT16, B}, {Format.UINT32, C}],
+            [{Format.UINT8, A}, {Format.UINT16, B}, {Format.UINT32, C}, {Format.UINT64, D}],
+        ];
+
+        foreach (I, T; TypeTuple!(ubyte, ushort, uint, ulong)) {
+            foreach (i, test; utests[I]) {
+                mixin DefinePacker;
+
+                packer.pack(cast(T)test.value);
+                assert(packer.stream.data[0] == test.format);
+
+                switch (i) {
+                case 0:
+                    auto answer = take8from!(T.sizeof * 8)(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, ubyte.sizeof) == 0);
+                    break;
+                case 1:
+                    auto answer = convertEndianTo!16(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, ushort.sizeof) == 0);
+                    break;
+                case 2:
+                    auto answer = convertEndianTo!32(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, uint.sizeof) == 0);
+                    break;
+                default:
+                    auto answer = convertEndianTo!64(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, ulong.sizeof) == 0);
+                }
+            }
+        }
+    }
+    { // int *
+        static struct STest { ubyte format; long value; }
+
+        enum : long { A = byte.min, B = short.min, C = int.min, D = long.min }
+
+        static STest[][] stests = [
+            [{Format.INT8, A}],
+            [{Format.INT8, A}, {Format.INT16, B}],
+            [{Format.INT8, A}, {Format.INT16, B}, {Format.INT32, C}],
+            [{Format.INT8, A}, {Format.INT16, B}, {Format.INT32, C}, {Format.INT64, D}],
+        ];
+
+        foreach (I, T; TypeTuple!(byte, short, int, long)) {
+            foreach (i, test; stests[I]) {
+                mixin DefinePacker;
+
+                packer.pack(cast(T)test.value);
+                assert(packer.stream.data[0] == test.format);
+
+                switch (i) {
+                case 0:
+                    auto answer = take8from!(T.sizeof * 8)(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, byte.sizeof) == 0);
+                    break;
+                case 1:
+                    auto answer = convertEndianTo!16(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, short.sizeof) == 0);
+                    break;
+                case 2:
+                    auto answer = convertEndianTo!32(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, int.sizeof) == 0);
+                    break;
+                default:
+                    auto answer = convertEndianTo!64(test.value);
+                    assert(memcmp(&packer.stream.data[1], &answer, long.sizeof) == 0);
+                }
+            }
+        }
+    }
+    { // fload, double
+        static if ((real.sizeof == double.sizeof) || !EnableReal)
+        {
+            alias TypeTuple!(float, double, double) FloatingTypes;
+            static struct FTest { ubyte format; double value; }
+
+            static FTest[] ftests = [
+                {Format.FLOAT,  float.min_normal},
+                {Format.DOUBLE, double.max},
+                {Format.DOUBLE, double.max},
+            ];
+        }
+        else
+        {
+            alias TypeTuple!(float, double, real) FloatingTypes;
+            static struct FTest { ubyte format; real value; }
+
+            static FTest[] ftests = [
+                {Format.FLOAT,  float.min_normal},
+                {Format.DOUBLE, double.max},
+                {Format.REAL,   real.max},
+            ];
+        }
+
+        foreach (I, T; FloatingTypes) {
+            mixin DefinePacker;
+
+            packer.pack(cast(T)ftests[I].value);
+            assert(packer.stream.data[0] == ftests[I].format);
+
+            switch (I) {
+            case 0:
+                const answer = convertEndianTo!32(_f(cast(T)ftests[I].value).i);
+                assert(memcmp(&packer.stream.data[1], &answer, float.sizeof) == 0);
+                break;
+            case 1:
+                const answer = convertEndianTo!64(_d(cast(T)ftests[I].value).i);
+                assert(memcmp(&packer.stream.data[1], &answer, double.sizeof) == 0);
+                break;
+            default:
+                static if (EnableReal)
+                {
+                    const t = _r(cast(T)ftests[I].value);
+                    const f = convertEndianTo!64(t.fraction);
+                    const e = convertEndianTo!16(t.exponent);
+                    assert(memcmp(&packer.stream.data[1],            &f, f.sizeof) == 0);
+                    assert(memcmp(&packer.stream.data[1 + f.sizeof], &e, e.sizeof) == 0);
+                }
+                else
+                {
+                    const answer = convertEndianTo!64(_d(cast(T)ftests[I].value).i);
+                    assert(memcmp(&packer.stream.data[1], &answer, double.sizeof) == 0);
+                }
+            }
+        }
+    }
+    { // pointer
+        static struct PTest
+        {
+            ubyte format;
+
+            union
+            {
+                ulong*  p0;
+                long*   p1;
+                double* p2;
+            }
+        }
+
+        PTest[] ptests = [PTest(Format.UINT64), PTest(Format.INT64), PTest(Format.DOUBLE)];
+
+        ulong  v0 = ulong.max;
+        long   v1 = long.min;
+        double v2 = double.max;
+
+        foreach (I, Index; TypeTuple!("0", "1", "2")) {
+            mixin DefinePacker;
+
+            mixin("ptests[I].p" ~ Index ~ " = &v" ~ Index ~ ";");
+
+            packer.pack(mixin("ptests[I].p" ~ Index));
+            assert(packer.stream.data[0] == ptests[I].format);
+
+            switch (I) {
+            case 0:
+                auto answer = convertEndianTo!64(*ptests[I].p0);
+                assert(memcmp(&packer.stream.data[1], &answer, ulong.sizeof) == 0);
+                break;
+            case 1:
+                auto answer = convertEndianTo!64(*ptests[I].p1);
+                assert(memcmp(&packer.stream.data[1], &answer, long.sizeof) == 0);
+                break;
+            default:
+                const answer = convertEndianTo!64(_d(*ptests[I].p2).i);
+                assert(memcmp(&packer.stream.data[1], &answer, double.sizeof) == 0);
+            }
+        }
+    }
+    { // enum
+        enum E : ubyte { A = ubyte.max }
+
+        mixin DefinePacker; E e = E.A;
+
+        packer.pack(e);
+        assert(packer.stream.data[0] == Format.UINT8);
+
+        auto answer = E.A;
+        assert(memcmp(&packer.stream.data[1], &answer, (OriginalType!E).sizeof) == 0);
+    }
+    { // container
+        static struct CTest { ubyte format; size_t value; }
+
+        enum : ulong { A = 16 / 2, B = ushort.max, C = uint.max }
+
+        static CTest[][] ctests = [
+            [{Format.ARRAY | A, Format.ARRAY | A}, {Format.ARRAY16, B}, {Format.ARRAY32, C}],
+            [{Format.MAP   | A, Format.MAP   | A}, {Format.MAP16,   B}, {Format.MAP32,   C}],
+        ];
+
+        foreach (I, Name; TypeTuple!("Array", "Map")) {
+            auto test = ctests[I];
+
+            foreach (i, T; TypeTuple!(ubyte, ushort, uint)) {
+                mixin DefinePacker;
+                mixin("packer.begin" ~ Name ~ "(i ? test[i].value : A);");
+
+                assert(packer.stream.data[0] == test[i].format);
+
+                switch (i) {
+                case 0:
+                    auto answer = take8from(test[i].value);
+                    assert(memcmp(&packer.stream.data[0], &answer, ubyte.sizeof) == 0);
+                    break;
+                case 1:
+                    auto answer = convertEndianTo!16(test[i].value);
+                    assert(memcmp(&packer.stream.data[1], &answer, ushort.sizeof) == 0);
+                    break;
+                default:
+                    auto answer = convertEndianTo!32(test[i].value);
+                    assert(memcmp(&packer.stream.data[1], &answer, uint.sizeof) == 0);
+                }
+            }
+        }
+    }
+    { // user defined
+        {
+            static struct S
+            {
+                uint num = uint.max;
+
+                void toMsgpack(P)(ref P p) const { p.packArray(num); }
+            }
+
+            mixin DefinePacker; S test;
+
+            packer.pack(test);
+
+            assert(packer.stream.data[0] == (Format.ARRAY | 1));
+            assert(packer.stream.data[1] ==  Format.UINT32);
+            assert(memcmp(&packer.stream.data[2], &test.num, uint.sizeof) == 0);
+        }
+        {
+            mixin DefinePacker; auto test = tuple(true, false, uint.max);
+
+            packer.pack(test);
+
+            assert(packer.stream.data[0] == (Format.ARRAY | 3));
+            assert(packer.stream.data[1] ==  Format.TRUE);
+            assert(packer.stream.data[2] ==  Format.FALSE);
+            assert(packer.stream.data[3] ==  Format.UINT32);
+            assert(memcmp(&packer.stream.data[4], &test.field[2], uint.sizeof) == 0);
+        }
+        {
+            static class C
+            {
+                uint num;
+
+                this(uint n) { num = n; }
+
+                void toMsgpack(P)(ref P p) const { p.packArray(num); }
+            }
+
+            mixin DefinePacker; C test = new C(ushort.max);
+
+            packer.pack(test);
+
+            assert(packer.stream.data[0] == (Format.ARRAY | 1));
+            assert(packer.stream.data[1] ==  Format.UINT16);
+            assert(memcmp(&packer.stream.data[2], &test.num, ushort.sizeof) == 0);
+        }
+    }
+    { // simple struct and class
+        {
+            static struct Simple
+            {
+                uint num = uint.max;
+            }
+
+            static struct SimpleWithNonPacked1
+            {
+                uint num = uint.max;
+                @nonPacked string str = "ignored";
+            }
+
+            static struct SimpleWithNonPacked2
+            {
+                @nonPacked string str = "ignored";
+                uint num = uint.max;
+            }
+
+            static struct SimpleWithSkippedTypes
+            {
+                int function(int) fn;
+                int delegate(int) dg;
+                uint num = uint.max;
+            }
+
+            foreach (Type; TypeTuple!(Simple, SimpleWithNonPacked1, SimpleWithNonPacked2, SimpleWithSkippedTypes)) {
+                mixin DefinePacker;
+
+                Type test;
+                packer.pack(test);
+
+                assert(packer.stream.data[0] == (Format.ARRAY | 1));
+                assert(packer.stream.data[1] ==  Format.UINT32);
+                assert(memcmp(&packer.stream.data[2], &test.num, uint.sizeof) == 0);
+            }
+        }
+
+        static class SimpleA
+        {
+            bool flag = true;
+        }
+
+        static class SimpleB : SimpleA
+        {
+            ubyte type = 100;
+        }
+
+        static class SimpleC : SimpleB
+        {
+            uint num = uint.max;
+        }
+
+        static class SimpleCWithNonPacked1 : SimpleB
+        {
+            uint num = uint.max;
+            @nonPacked string str = "ignored";
+        }
+
+        static class SimpleCWithNonPacked2 : SimpleB
+        {
+            @nonPacked string str = "ignored";
+            uint num = uint.max;
+        }
+
+        static class SimpleCWithSkippedTypes : SimpleB
+        {
+            uint num = uint.max;
+            int function(int) fn;
+            int delegate(int) dg;
+        }
+
+        {  // from derived class
+            foreach (Type; TypeTuple!(SimpleC, SimpleCWithNonPacked1, SimpleCWithNonPacked2, SimpleCWithSkippedTypes)) {
+                mixin DefinePacker;
+
+                Type test = new Type();
+                packer.pack(test);
+
+                assert(packer.stream.data[0] == (Format.ARRAY | 3));
+                assert(packer.stream.data[1] ==  Format.TRUE);
+                assert(packer.stream.data[2] ==  100);
+                assert(packer.stream.data[3] ==  Format.UINT32);
+                assert(memcmp(&packer.stream.data[4], &test.num, uint.sizeof) == 0);
+            }
+        }
+        {  // from base class
+            mixin DefinePacker; SimpleB test = new SimpleC();
+
+            try {
+                packer.pack(test);
+                assert(false);
+            } catch (Exception e) { }
+        }
+    }
+}
+
+
+// deserializing routines
+
+
+/**
+ * $(D UnpackException) is thrown on deserialization failure
+ */
+class UnpackException : MessagePackException
+{
+    this(string message)
+    {
+        super(message);
+    }
+}
+
+
+version (D_Ddoc)
+{
+    /**
+     * Internal buffer and related operations for Unpacker
+     *
+     * Following Unpackers mixin this template. So, Unpacker can use following methods.
+     *
+     * -----
+     * //buffer image:
+     * +-------------------------------------------+
+     * | [object] | [obj | unparsed... | unused... |
+     * +-------------------------------------------+
+     *            ^ offset
+     *                   ^ current
+     *                                 ^ used
+     *                                             ^ buffer.length
+     * -----
+     *
+     * This mixin template is a private.
+     */
+    mixin template InternalBuffer()
+    {
+      private:
+        ubyte[] buffer_;  // internal buffer
+        size_t  used_;    // index that buffer cosumed
+        size_t  offset_;  // index that buffer parsed
+        size_t  parsed_;  // total size of parsed message
+        bool    hasRaw_;  // indicates whether Raw object has been deserialized
+
+
+      public:
+        /**
+         * Forwards to internal buffer.
+         *
+         * Returns:
+         *  the reference of internal buffer.
+         */
+        @property @safe
+        nothrow ubyte[] buffer();
+
+
+        /**
+         * Fills internal buffer with $(D_PARAM target).
+         *
+         * Params:
+         *  target = new serialized buffer to deserialize.
+         */
+        @safe void feed(in ubyte[] target);
+
+
+        /**
+         * Consumes buffer. This method is helper for buffer property.
+         * You must use this method if you write bytes to buffer directly.
+         *
+         * Params:
+         *  size = the number of consuming.
+         */
+        @safe
+        nothrow void bufferConsumed(in size_t size);
+
+
+        /**
+         * Removes unparsed buffer.
+         */
+        @safe
+        nothrow void removeUnparsed();
+
+
+        /**
+         * Returns:
+         *  the total size including unparsed buffer size.
+         */
+        @property @safe
+        nothrow size_t size() const;
+
+
+        /**
+         * Returns:
+         *  the parsed size of buffer.
+         */
+        @property @safe
+        nothrow size_t parsedSize() const;
+
+
+        /**
+         * Returns:
+         *  the unparsed size of buffer.
+         */
+        @property @safe
+        nothrow size_t unparsedSize() const;
+
+
+    private:
+        @safe
+        void initializeBuffer(in ubyte[] target, in size_t bufferSize = 8192);
+    }
+}
+else
+{
+    private mixin template InternalBuffer()
+    {
+      private:
+        ubyte[] buffer_;  // internal buffer
+        size_t  used_;    // index that buffer cosumed
+        size_t  offset_;  // index that buffer parsed
+        size_t  parsed_;  // total size of parsed message
+        bool    hasRaw_;  // indicates whether Raw object has been deserialized
+
+
+      public:
+        @property @safe
+        nothrow ubyte[] buffer()
+        {
+            return buffer_;
+        }
+
+
+        @safe
+        void feed(in ubyte[] target)
+        in
+        {
+            assert(target.length);
+        }
+        body
+        {
+            /*
+             * Expands internal buffer.
+             *
+             * Params:
+             *  size = new buffer size to append.
+             */
+            void expandBuffer(in size_t size)
+            {
+                // rewinds buffer(completed deserialization)
+                if (used_ == offset_ && !hasRaw_) {
+                    used_ =  offset_ = 0;
+
+                    if (buffer_.length < size)
+                        buffer_.length = size;
+
+                    return;
+                }
+
+                // deserializing state is mid-flow(buffer has non-parsed data yet)
+                auto unparsed = buffer_[offset_..used_];
+                auto restSize = buffer_.length - used_ + offset_;
+                auto newSize  = size > restSize ? unparsedSize + size : buffer_.length;
+
+                if (hasRaw_) {
+                    hasRaw_ = false;
+                    buffer_ = new ubyte[](newSize);
+                } else {
+                    buffer_.length = newSize;
+
+                    // avoids overlapping copy
+                    auto area = buffer_[0..unparsedSize];
+                    unparsed  = area.overlap(unparsed) ? unparsed.dup : unparsed;
+                }
+
+                buffer_[0..unparsedSize] = unparsed[];
+                used_   = unparsedSize;
+                offset_ = 0;
+            }
+
+            const size = target.length;
+
+            // lacks current buffer?
+            if (buffer_.length - used_ < size)
+                expandBuffer(size);
+
+            buffer_[used_..used_ + size] = target[];
+            used_ += size;
+        }
+
+
+        @safe
+        nothrow void bufferConsumed(in size_t size)
+        {
+            if (used_ + size > buffer_.length)
+                used_ = buffer_.length;
+            else
+                used_ += size;
+        }
+
+
+        @safe
+        nothrow void removeUnparsed()
+        {
+            used_ = offset_;
+        }
+
+
+        @property @safe
+        nothrow size_t size() const
+        {
+            return parsed_ - offset_ + used_;
+        }
+
+
+        @property @safe
+        nothrow size_t parsedSize() const
+        {
+            return parsed_;
+        }
+
+
+        @property @safe
+        nothrow size_t unparsedSize() const
+        {
+            return used_ - offset_;
+        }
+
+
+      private:
+        @safe
+        nothrow void initializeBuffer(in ubyte[] target, in size_t bufferSize = 8192)
+        {
+            const size = target.length;
+
+            buffer_ = new ubyte[](size > bufferSize ? size : bufferSize);
+            used_   = size;
+            buffer_[0..size] = target[];
+        }
+    }
+}
+
+
+/**
+ * This $(D Unpacker) is a $(D MessagePack) direct-conversion deserializer
+ *
+ * This implementation is suitable for fixed data.
+ *
+ * Example:
+ * -----
+ * // serializedData is [10, 0.1, false]
+ * auto unpacker = Unpacker(serializedData);
+ *
+ * uint   n;
+ * double d;
+ * bool   b;
+ *
+ * unpacker.unpackArray(n, d, b);
+ *
+ * // using Tuple
+ * Tuple!(uint, double, bool) record;
+ * unpacker.unpack(record);  // record is [10, 0.1, false]
+ * -----
+ *
+ * NOTE:
+ *  Unpacker becomes template struct if Phobos supports truly IO module.
+ */
+struct Unpacker
+{
+  private:
+    static @system
+    {
+        alias void delegate(ref Unpacker, void*) UnpackHandler;
+        UnpackHandler[TypeInfo] unpackHandlers;
+
+        public void registerHandler(T, alias Handler)()
+        {
+            unpackHandlers[typeid(T)] = delegate(ref Unpacker unpacker, void* obj) {
+                Handler(unpacker, *cast(T*)obj);
+            };
+        }
+    }
+
+    enum Offset = 1;
+
+    mixin InternalBuffer;
+
+    bool withFieldName_;
+
+
+  public:
+    /**
+     * Constructs a $(D Unpacker).
+     *
+     * Params:
+     *  target     = byte buffer to deserialize
+     *  bufferSize = size limit of buffer size
+     */
+    this(in ubyte[] target, in size_t bufferSize = 8192, bool withFieldName = false)
+    {
+        initializeBuffer(target, bufferSize);
+        withFieldName_ = withFieldName;
+    }
+
+
+    /**
+     * Clears states for next deserialization.
+     */
+    @safe
+    nothrow void clear()
+    {
+        parsed_ = 0;
+    }
+
+
+    /**
+     * Deserializes $(D_PARAM T) object and assigns to $(D_PARAM value).
+     *
+     * If the argument is pointer, dereferences pointer and assigns deserialized value.
+     * -----
+     * int* a;
+     * unpacker.unpack(a)  // enforce throws Exception because a is null or
+     *                     // no throw if deserialized value is nil
+     *
+     * int b; a = &b;
+     * unpacker.unpack(b)  // b is deserialized value or
+     *                     // assigns null if deserialized value is nil
+     * -----
+     *
+     * Params:
+     *  value = the reference of value to assign.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     *
+     * Throws:
+     *  UnpackException when doesn't read from buffer or precision loss occurs and
+     *  MessagePackException when $(D_PARAM T) type doesn't match serialized type.
+     */
+    ref Unpacker unpack(T)(ref T value) if (is(Unqual!T == bool))
+    {
+        canRead(Offset, 0);
+        const header = read();
+
+        switch (header) {
+        case Format.TRUE:
+            value = true;
+            break;
+        case Format.FALSE:
+            value = false;
+            break;
+        default:
+            rollback();
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T value) if (isUnsigned!T && !is(Unqual!T == enum))
+    {
+        canRead(Offset, 0);
+        const header = read();
+
+        if (0x00 <= header && header <= 0x7f) {
+            value = header;
+        } else {
+            switch (header) {
+            case Format.UINT8:
+                canRead(ubyte.sizeof);
+                value = read();
+                break;
+            case Format.UINT16:
+                canRead(ushort.sizeof);
+                auto us = load16To!ushort(read(ushort.sizeof));
+                if (us > T.max)
+                    rollback(ushort.sizeof);
+                value = cast(T)us;
+                break;
+            case Format.UINT32:
+                canRead(uint.sizeof);
+                auto ui = load32To!uint(read(uint.sizeof));
+                if (ui > T.max)
+                    rollback(uint.sizeof);
+                value = cast(T)ui;
+                break;
+            case Format.UINT64:
+                canRead(ulong.sizeof);
+                auto ul = load64To!ulong(read(ulong.sizeof));
+                if (ul > T.max)
+                    rollback(ulong.sizeof);
+                value = cast(T)ul;
+                break;
+            default:
+                rollback();
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T value) if (isSigned!T && isIntegral!T && !is(Unqual!T == enum))
+    {
+        canRead(Offset, 0);
+        const header = read();
+
+        if (0x00 <= header && header <= 0x7f) {
+            value = cast(T)header;
+        } else if (0xe0 <= header && header <= 0xff) {
+            value = -(cast(T)-header);
+        } else {
+            switch (header) {
+            case Format.UINT8:
+                canRead(ubyte.sizeof);
+                auto ub = read();
+                if (ub > T.max)
+                    rollback(ubyte.sizeof);
+                value = cast(T)ub;
+                break;
+            case Format.UINT16:
+                canRead(ushort.sizeof);
+                auto us = load16To!ushort(read(ushort.sizeof));
+                if (us > T.max)
+                    rollback(ushort.sizeof);
+                value = cast(T)us;
+                break;
+            case Format.UINT32:
+                canRead(uint.sizeof);
+                auto ui = load32To!uint(read(uint.sizeof));
+                if (ui > T.max)
+                    rollback(uint.sizeof);
+                value = cast(T)ui;
+                break;
+            case Format.UINT64:
+                canRead(ulong.sizeof);
+                auto ul = load64To!ulong(read(ulong.sizeof));
+                if (ul > T.max)
+                    rollback(ulong.sizeof);
+                value = cast(T)ul;
+                break;
+            case Format.INT8:
+                canRead(byte.sizeof);
+                value = cast(byte)read();
+                break;
+            case Format.INT16:
+                canRead(short.sizeof);
+                auto s = load16To!short(read(short.sizeof));
+                if (s < T.min || T.max < s)
+                    rollback(short.sizeof);
+                value = cast(T)s;
+                break;
+            case Format.INT32:
+                canRead(int.sizeof);
+                auto i = load32To!int(read(int.sizeof));
+                if (i < T.min || T.max < i)
+                    rollback(int.sizeof);
+                value = cast(T)i;
+                break;
+            case Format.INT64:
+                canRead(long.sizeof);
+                auto l = load64To!long(read(long.sizeof));
+                if (l < T.min || T.max < l)
+                    rollback(long.sizeof);
+                value = cast(T)l;
+                break;
+            default:
+                rollback();
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T value) if (isFloatingPoint!T && !is(Unqual!T == enum))
+    {
+        canRead(Offset, 0);
+        const header = read();
+
+        switch (header) {
+        case Format.FLOAT:
+            _f temp;
+
+            canRead(uint.sizeof);
+            temp.i = load32To!uint(read(uint.sizeof));
+            value  = temp.f;
+            break;
+        case Format.DOUBLE:
+            // check precision loss
+            static if (is(Unqual!T == float))
+                rollback();
+
+            _d temp;
+
+            canRead(ulong.sizeof);
+            temp.i = load64To!ulong(read(ulong.sizeof));
+            value  = temp.f;
+            break;
+        case Format.REAL:
+            static if (!EnableReal)
+            {
+                rollback();
+            }
+            else
+            {
+                // check precision loss
+                static if (is(Unqual!T == float) || is(Unqual!T == double))
+                    rollback();
+
+                canRead(RealSize);
+
+                version (NonX86)
+                {
+                    CustomFloat!80 temp;
+
+                    const frac = load64To!ulong (read(ulong.sizeof));
+                    const exp  = load16To!ushort(read(ushort.sizeof));
+
+                    temp.significand = frac;
+                    temp.exponent    = exp & 0x7fff;
+                    temp.sign        = exp & 0x8000 ? true : false;
+
+                    // NOTE: temp.get!real is inf on non-x86 when deserialized value is larger than double.max.
+                    value = temp.get!real;
+                }
+                else
+                {
+                    _r temp;
+
+                    temp.fraction = load64To!(typeof(temp.fraction))(read(temp.fraction.sizeof));
+                    temp.exponent = load16To!(typeof(temp.exponent))(read(temp.exponent.sizeof));
+
+                    value = temp.f;
+                }
+            }
+
+            break;
+        default:
+            rollback();
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T value) if (is(Unqual!T == enum))
+    {
+        OriginalType!T temp;
+
+        unpack(temp);
+
+        value = cast(T)temp;
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(T value) if (isPointer!T)
+    {
+        static if (is(Unqual!T == void*)) {
+            enforce(value !is null,  "Can't deserialize void type");
+            unpackNil(value);
+        } else {
+            if (checkNil())
+                unpackNil(value);
+            else
+                enforce(value !is null, T.stringof ~ " is null pointer");
+
+            unpack(mixin(AsteriskOf!T ~ "value"));
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(Types...)(ref Types objects) if (Types.length > 1)
+    {
+        foreach (i, T; Types)
+            unpack!(T)(objects[i]);
+
+        return this;
+    }
+
+
+    /**
+     * Deserializes $(D_PARAM T) object and assigns to $(D_PARAM array).
+     *
+     * This is convenient method for array deserialization.
+     * Rollback will be completely successful if you deserialize raw type((u)byte[] or string types).
+     * But, Rollback will be one element(e.g. int) if you deserialize other types(e.g. int[], int[int])
+     *
+     * No assign if the length of deserialized object is 0.
+     *
+     * In a static array, this method checks the length. Do rollback and throw exception
+     * if length of $(D_PARAM array) is different from length of deserialized object.
+     *
+     * Params:
+     *  array = the reference of array to assign.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     *
+     * Throws:
+     *  UnpackException when doesn't read from buffer or precision loss occurs and
+     *  MessagePackException when $(D_PARAM T) type doesn't match serialized type.
+     */
+    ref Unpacker unpack(T)(ref T array) if (isArray!T && !is(Unqual!T == enum))
+    {
+        alias typeof(T.init[0]) U;
+
+        /*
+         * Deserializes type-information of raw type.
+         */
+        @safe
+        size_t beginRaw()
+        {
+            canRead(Offset, 0);
+            const  header = read();
+            size_t length;
+
+            if (0xa0 <= header && header <= 0xbf) {
+                length = header & 0x1f;
+            } else {
+                switch (header) {
+                case Format.BIN8, Format.STR8:
+                    canRead(ubyte.sizeof);
+                    length = read();
+                    break;
+                case Format.BIN16, Format.RAW16:
+                    canRead(ushort.sizeof);
+                    length = load16To!size_t(read(ushort.sizeof));
+                    break;
+                case Format.BIN32, Format.RAW32:
+                    canRead(uint.sizeof);
+                    length = load32To!size_t(read(uint.sizeof));
+                    break;
+                case Format.NIL:
+                    break;
+                default:
+                    rollback();
+                }
+            }
+
+            return length;
+        }
+
+
+        if (checkNil()) {
+            static if (isStaticArray!T) {
+                onInvalidType();
+            } else {
+                return unpackNil(array);
+            }
+        }
+
+        // Raw bytes
+        static if (isByte!U || isSomeChar!U) {
+            auto length = beginRaw();
+            auto offset = calculateSize!(true)(length);
+            if (length == 0)
+                return this;
+
+            static if (isStaticArray!T) {
+                if (length != array.length)
+                    rollback(offset);
+            }
+
+            canRead(length, offset + Offset);
+            static if (isStaticArray!T) {
+                array[] = (cast(U[])read(length))[0 .. T.length];
+            } else {
+                array = cast(T)read(length);
+            }
+
+            static if (isDynamicArray!T)
+                hasRaw_ = true;
+        } else {
+            auto length = beginArray();
+            if (length == 0)
+                return this;
+
+            static if (isStaticArray!T) {
+                if (length != array.length)
+                    rollback(calculateSize(length));
+            } else {
+                array.length = length;
+            }
+
+            foreach (i; 0..length)
+                unpack(array[i]);
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T array) if (isAssociativeArray!T)
+    {
+        alias typeof(T.init.keys[0])   K;
+        alias typeof(T.init.values[0]) V;
+
+        if (checkNil())
+            return unpackNil(array);
+
+        auto length = beginMap();
+        if (length == 0)
+            return this;
+
+        foreach (i; 0..length) {
+            K k; unpack(k);
+            V v; unpack(v);
+            array[k] = v;
+        }
+
+        return this;
+    }
+
+
+    /**
+     * Deserializes $(D_PARAM T) object and assigns to $(D_PARAM object).
+     *
+     * Calling $(D fromMsgpack) if $(D_KEYWORD class) and $(D_KEYWORD struct) implement $(D fromMsgpack) method. $(D fromMsgpack) signature is:
+     * -----
+     * void fromMsgpack(ref Unpacker unpacker)
+     * -----
+     * Assumes $(D std.typecons.Tuple) or simple struct if $(D_KEYWORD struct) doesn't implement $(D fromMsgpack).
+     * Checks length if $(D_PARAM T) is a $(D std.typecons.Tuple) or simple struct.
+     *
+     * Params:
+     *  object = the reference of object to assign.
+     *  args   = the arguments to class constructor(class only).
+     *           This is used at new statement if $(D_PARAM object) is $(D_KEYWORD null).
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref Unpacker unpack(T, Args...)(ref T object, auto ref Args args) if (is(Unqual!T == class))
+    {
+        if (checkNil())
+            return unpackNil(object);
+
+        if (object is null) {
+            //static if (is(typeof(new T(args))))
+            static if (__traits(compiles, { new T(args); }))
+                object = new T(args);
+            else
+                throw new MessagePackException("Don't know how to construct class type '" ~ Unqual!T.stringof ~ "' with argument types '" ~ Args.stringof ~ "'.");
+        }
+
+        static if (hasMember!(T, "fromMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.fromMsgpack(this, withFieldName_); })) {
+              object.fromMsgpack(this, withFieldName_);
+            } else static if (__traits(compiles, { T t; t.fromMsgpack(this); })) { // backward compatible
+                object.fromMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'fromMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else {
+            if (auto handler = object.classinfo in unpackHandlers) {
+                (*handler)(this, cast(void*)&object);
+                return this;
+            }
+            if (T.classinfo !is object.classinfo) {
+                throw new MessagePackException("Can't unpack derived class through reference to base class.");
+            }
+
+            alias SerializingClasses!(T) Classes;
+
+            size_t length = withFieldName_ ? beginMap() : beginArray();
+            if (length == 0)
+                return this;
+
+            if (length != SerializingMemberNumbers!(Classes))
+                rollback(calculateSize(length));
+
+            if (withFieldName_) {
+                foreach (_; 0..length) {
+                    string fieldName;
+                    unpack(fieldName);
+
+                    foreach (Class; Classes) {
+                        Class obj = cast(Class)object;
+
+                        foreach (i, member; obj.tupleof) {
+                            static if (isPackedField!(Class.tupleof[i]))
+                            {
+                                if (fieldName == getFieldName!(Class, i)) {
+                                    unpack(obj.tupleof[i]);
+                                    goto endLoop;
+                                }
+                            }
+                        }
+                    }
+                    assert(false, "Invalid field name: '" ~ fieldName~"' ");
+
+                endLoop:
+                    continue;
+                }
+            } else {
+                foreach (Class; Classes) {
+                    Class obj = cast(Class)object;
+
+                    foreach (i, member; obj.tupleof) {
+                        static if (isPackedField!(Class.tupleof[i]))
+                            unpack(obj.tupleof[i]);
+                    }
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpack(T)(ref T object) if (is(Unqual!T == struct))
+    {
+        static if (hasMember!(T, "fromMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.fromMsgpack(this); })) {
+                object.fromMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'fromMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else {
+            if (auto handler = typeid(T) in unpackHandlers) {
+                (*handler)(this, cast(void*)&object);
+                return this;
+            }
+
+            auto length = beginArray();
+            if (length == 0)
+                return this;
+
+            static if (isTuple!T) {
+                if (length != T.Types.length)
+                    rollback(calculateSize(length));
+
+                foreach (i, Type; T.Types)
+                    unpack(object.field[i]);
+            } else {  // simple struct
+                //if (length != object.tupleof.length)
+                if (length != SerializingMemberNumbers!(T))
+                    rollback(calculateSize(length));
+
+                foreach (i, member; object.tupleof) {
+                    static if (isPackedField!(T.tupleof[i]))
+                        unpack(object.tupleof[i]);
+                }
+            }
+        }
+
+        return this;
+    }
+
+
+    /**
+     * Deserializes the container object and assigns to each argument.
+     *
+     * These methods check the length. Do rollback if
+     * the length of arguments is different from length of deserialized object.
+     *
+     * In unpackMap, the number of arguments must be even.
+     *
+     * Params:
+     *  objects = the references of object to assign.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     */
+    ref Unpacker unpackArray(Types...)(ref Types objects)
+    {
+        auto length = beginArray();
+        if (length != Types.length)
+            rollback(calculateSize(length));
+
+        foreach (i, T; Types)
+            unpack(objects[i]);
+        // unpack(objects);  // slow :(
+
+        return this;
+    }
+
+
+    /// ditto
+    ref Unpacker unpackMap(Types...)(ref Types objects)
+    {
+        static assert(Types.length % 2 == 0, "The number of arguments must be even");
+
+        auto length = beginMap();
+        if (length != Types.length / 2)
+            rollback(calculateSize(length));
+
+        foreach (i, T; Types)
+            unpack(objects[i]);
+
+        return this;
+    }
+
+
+    /**
+     * Deserializes the type-information of container.
+     *
+     * These methods don't deserialize contents.
+     * You need to call unpack method to deserialize contents at your own risk.
+     * -----
+     * // serialized data is [1, "Hi!"];
+     * int num;
+     * unpacker.beginArray(2).unpack(num);  // num is 1
+     *
+     * // other operation
+     *
+     * string str;
+     * unpacker.unpack(str);  // str is "Hi!"
+     * -----
+     *
+     * Returns:
+     *  the container size.
+     */
+    @safe
+    size_t beginArray()
+    {
+        canRead(Offset, 0);
+        const  header = read();
+        size_t length;
+
+        if (0x90 <= header && header <= 0x9f) {
+            length = header & 0x0f;
+        } else {
+            switch (header) {
+            case Format.ARRAY16:
+                canRead(ushort.sizeof);
+                length = load16To!size_t(read(ushort.sizeof));
+                break;
+            case Format.ARRAY32:
+                canRead(uint.sizeof);
+                length = load32To!size_t(read(uint.sizeof));
+                break;
+            case Format.NIL:
+                break;
+            default:
+                rollback();
+            }
+        }
+
+        return length;
+    }
+
+
+    /// ditto
+    @safe
+    size_t beginMap()
+    {
+        canRead(Offset, 0);
+        const  header = read();
+        size_t length;
+
+        if (0x80 <= header && header <= 0x8f) {
+            length = header & 0x0f;
+        } else {
+            switch (header) {
+            case Format.MAP16:
+                canRead(ushort.sizeof);
+                length = load16To!size_t(read(ushort.sizeof));
+                break;
+            case Format.MAP32:
+                canRead(uint.sizeof);
+                length = load32To!size_t(read(uint.sizeof));
+                break;
+            case Format.NIL:
+                break;
+            default:
+                rollback();
+            }
+        }
+
+        return length;
+    }
+
+
+    /**
+     * Scans an entire buffer and converts each objects.
+     *
+     * This method is used for unpacking record-like objects.
+     *
+     * Example:
+     * -----
+     * // serialized data is "[1, 2][3, 4][5, 6][...".
+     * auto unpacker = Unpacker(serializedData);
+     * foreach (n, d; &unpacker.scan!(int, int))  // == "foreach (int n, int d; unpacker)"
+     *     writeln(n, d); // 1st loop "1, 2", 2nd loop "3, 4"...
+     * -----
+     */
+    int scan(Types...)(scope int delegate(ref Types) dg)
+    {
+        return opApply!(Types)(delegate int(ref Types objects) { return dg(objects); });
+    }
+
+
+    /// ditto
+    int opApply(Types...)(scope int delegate(ref Types) dg)
+    {
+        int result;
+
+        while (used_ - offset_) {
+            auto length = beginArray();
+            if (length != Types.length)
+                rollback(calculateSize(length));
+
+            Types objects;
+            foreach (i, T; Types)
+                unpack(objects[i]);
+
+            result = dg(objects);
+            if (result)
+                return result;
+        }
+
+        return result;
+    }
+
+
+  private:
+    /*
+     * Deserializes nil object and assigns to $(D_PARAM value).
+     *
+     * Params:
+     *  value = the reference of value to assign.
+     *
+     * Returns:
+     *  self, i.e. for method chaining.
+     *
+     * Throws:
+     *  UnpackException when doesn't read from buffer or precision loss occurs and
+     *  MessagePackException when $(D_PARAM T) type doesn't match serialized type.
+     */
+    @safe
+    ref Unpacker unpackNil(T)(ref T value)
+    {
+        canRead(Offset, 0);
+        const header = read();
+
+        if (header == Format.NIL)
+            value = null;
+        else
+            rollback();
+
+        return this;
+    }
+
+
+    /*
+     * Next object is nil?
+     *
+     * Returns:
+     *  true if next object is nil.
+     */
+    @safe
+    bool checkNil()
+    {
+        canRead(Offset, 0);
+
+        return buffer_[offset_] == Format.NIL;
+    }
+
+
+    /*
+     * Calculates the format size of container length.
+     */
+    size_t calculateSize(bool rawType = false)(in size_t length)
+    {
+        static if (rawType)
+            return length < 32 ? 0 : length < 65536 ? ushort.sizeof : uint.sizeof;
+        else
+            return length < 16 ? 0 : length < 65536 ? ushort.sizeof : uint.sizeof;
+    }
+
+
+    /*
+     * Reading test.
+     *
+     * Params:
+     *  size   = the size to read.
+     *  offset = the offset to subtract when doesn't read from buffer.
+     *
+     * Throws:
+     *  UnpackException when doesn't read from buffer.
+     */
+    @safe
+    void canRead(in size_t size, in size_t offset = Offset)
+    {
+        if (used_ - offset_ < size) {
+            if (offset)
+                offset_ -= offset;
+
+            throw new UnpackException("Insufficient buffer");
+        }
+    }
+
+
+    /*
+     * Reads value from buffer and advances offset.
+     */
+    @safe
+    nothrow ubyte read()
+    {
+        return buffer_[offset_++];
+    }
+
+
+    /*
+     * Reads value from buffer and advances offset.
+     */
+    @safe
+    nothrow ubyte[] read(in size_t size)
+    {
+        auto result = buffer_[offset_..offset_ + size];
+
+        offset_ += size;
+
+        return result;
+    }
+
+
+    /*
+     * Do rollback and throws exception.
+     */
+    @safe
+    void rollback(in size_t size = 0)
+    {
+        offset_ -= size + Offset;
+        onInvalidType();
+    }
+}
+
+
+/**
+ * Register a deserialization handler for $(D_PARAM T) type
+ *
+ * Example:
+ * -----
+ * registerUnackHandler!(Foo, fooUnackHandler);
+ * -----
+ */
+void registerUnpackHandler(T, alias Handler)()
+{
+    Unpacker.registerHandler!(T, Handler);
+}
+
+
+unittest
+{
+    { // unique
+        mixin DefinePacker;
+
+        Tuple!(bool, bool) result;
+        Tuple!(bool, bool) test = tuple(true, false);
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(result);
+        assert(test == result);
+    }
+    { // uint *
+        mixin DefinePacker;
+
+        Tuple!(ubyte, ushort, uint, ulong) result;
+        Tuple!(ubyte, ushort, uint, ulong) test = tuple(cast(ubyte)ubyte.max, cast(ushort)ushort.max,
+                                                        cast(uint)uint.max,   cast(ulong)ulong.max);
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(result);
+        assert(test == result);
+    }
+    { // int *
+        mixin DefinePacker;
+
+        Tuple!(byte, short, int, long) result;
+        Tuple!(byte, short, int, long) test = tuple(cast(byte)byte.min, cast(short)short.min,
+                                                    cast(int)int.min,   cast(long)long.min);
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(result);
+        assert(test == result);
+    }
+    { // floating point
+        mixin DefinePacker;
+
+        static if (real.sizeof == double.sizeof || !EnableReal)
+        {
+            Tuple!(float, double, double) result;
+            Tuple!(float, double, double) test = tuple(cast(float)float.min_normal, cast(double)double.max, cast(real)double.min_normal);
+        }
+        else
+        {
+            Tuple!(float, double, real) result;
+            Tuple!(float, double, real) test = tuple(cast(float)float.min_normal, cast(double)double.max, cast(real)real.min_normal);
+        }
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(result);
+        assert(test == result);
+    }
+    { // pointer
+        mixin DefinePacker;
+
+        Tuple!(ulong, long, double) origin;
+        Tuple!(ulong, long, double) values = tuple(ulong.max, long.min, double.min_normal);
+        Tuple!(ulong*, long*, double*) result = tuple(&origin.field[0], &origin.field[1], &origin.field[2]);
+        Tuple!(ulong*, long*, double*) test = tuple(&values.field[0], &values.field[1], &values.field[2]);
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(result);
+        foreach (i, v; test.field)
+            assert(*v == *result.field[i]);
+        assert(origin == values);
+    }
+    { // enum
+        enum   : float { D = 0.5 }
+        enum E : ulong { U = 100 }
+
+        mixin DefinePacker;
+
+        float f = D,   resultF;
+        E     e = E.U, resultE;
+
+        packer.pack(D, e);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        unpacker.unpack(resultF, resultE);
+        assert(f == resultF);
+        assert(e == resultE);
+    }
+    { // container
+        mixin DefinePacker;
+
+        Tuple!(ulong[], double[uint], string, bool[2], char[2]) test
+            = tuple([1UL, 2], [3U:4.0, 5:6.0, 7:8.0], "MessagePack is nice!", [true, false], "D!");
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+        Tuple!(ulong[], double[uint], string, bool[2], char[2]) result;
+
+        unpacker.unpack(result);
+        assert(test == result);
+    }
+    { // user defined
+        {
+            static struct S
+            {
+                uint num;
+
+                void toMsgpack(P)(ref P p) const { p.packArray(num); }
+                void fromMsgpack(ref Unpacker u)
+                {
+                    assert(u.beginArray() == 1);
+                    u.unpack(num);
+                }
+            }
+
+            mixin DefinePacker; S result, test = S(uint.max);
+
+            packer.pack(test);
+
+            auto unpacker = Unpacker(packer.stream.data);
+            unpacker.unpack(result);
+
+            assert(test.num == result.num);
+        }
+        {
+            static class C
+            {
+                uint num;
+
+                this(uint n) { num = n; }
+
+                void toMsgpack(P)(ref P p) const { p.packArray(num - 1); }
+                void fromMsgpack(ref Unpacker u)
+                {
+                    assert(u.beginArray() == 1);
+                    u.unpack(num);
+                }
+            }
+
+            mixin DefinePacker; C result, test = new C(ushort.max);
+
+            packer.pack(test);
+
+            auto unpacker = Unpacker(packer.stream.data);
+            unpacker.unpack(result, ushort.max);
+
+            assert(test.num == result.num + 1);
+        }
+    }
+    { // simple struct and class
+        {
+            static struct Simple
+            {
+                uint num;
+                @nonPacked string str;
+            }
+
+            static struct Simple2
+            {
+                @nonPacked string str;
+                uint num;
+            }
+
+            foreach (Type; TypeTuple!(Simple, Simple2)) {
+                mixin DefinePacker;
+                Type result, test;
+                test.num = uint.max;
+                test.str = "ignored";
+
+                packer.pack(test);
+                auto unpacker = Unpacker(packer.stream.data);
+                unpacker.unpack(result);
+
+                assert(test.num == result.num);
+                assert(test.str != result.str);
+            }
+        }
+
+        static class SimpleA
+        {
+            bool flag = true;
+        }
+
+        static class SimpleB : SimpleA
+        {
+            ubyte type = 100;
+        }
+
+        static class SimpleC : SimpleB
+        {
+            uint num = uint.max;
+            @nonPacked string str;
+        }
+
+        static class SimpleC2 : SimpleB
+        {
+            @nonPacked string str;
+            uint num = uint.max;
+        }
+
+        { // from derived class
+            foreach (Type; TypeTuple!(SimpleC, SimpleC2)) {
+                mixin DefinePacker;
+                Type result, test = new Type();
+                test.flag = false;
+                test.type = 99;
+                test.num  = uint.max / 2;
+                test.str  = "ignored";
+
+                packer.pack(test);
+                auto unpacker = Unpacker(packer.stream.data);
+                unpacker.unpack(result);
+
+                assert(test.flag == result.flag);
+                assert(test.type == result.type);
+                assert(test.num  == result.num);
+                assert(test.str  != result.str);
+            }
+        }
+        { // from base class
+            mixin DefinePacker; SimpleC test = new SimpleC();
+
+            packer.pack(test);
+
+            SimpleB result = new SimpleC();
+            auto unpacker  = Unpacker(packer.stream.data);
+
+            try {
+                unpacker.unpack(result);
+                assert(false);
+            } catch (Exception e) { }
+        }
+        { // https://github.com/msgpack/msgpack-d/issues/16
+            static class Issue16
+            {
+                int i;
+                this(int i) { this.i = i; }
+            }
+
+            Issue16 c1 = new Issue16(10);
+
+            try {
+                Issue16 c2 = null;
+                unpack(pack(c1), c2);
+                assert(false);
+            } catch (Exception e) {}
+
+            Issue16 c3 = new Issue16(20);
+            unpack(pack(c1), c3);
+            assert(c3.i == c1.i);
+        }
+    }
+    { // variadic
+        mixin DefinePacker;
+
+        Tuple!(uint, long, double) test = tuple(uint.max, long.min, double.max);
+
+        packer.pack(test);
+
+        auto unpacker = Unpacker(packer.stream.data);
+
+        uint u; long l; double d;
+
+        unpacker.unpackArray(u, l, d);
+        assert(test == tuple(u, l, d));
+    }
+    { // scan / opApply
+        ubyte[] data;
+        mixin DefinePacker;
+
+        foreach (i; 0..2)
+            packer.pack(tuple(1, 0.5, "Hi!"));
+
+        foreach (n, d, s; &Unpacker(packer.stream.data).scan!(int, double, string)) {
+            assert(n == 1);
+            assert(d == 0.5);
+            assert(s == "Hi!");
+        }
+    }
+}
+
+
+// Static resolution routines for Stream deserializer
+
+
+/**
+ * $(D Value) is a $(D MessagePack) value representation
+ *
+ * Example:
+ * -----
+ * auto unpacker = StreamingUnpacker(pack(1, 0.1L) ~ pack(true) ~ pack("foobarbaz"));
+ *
+ * foreach (unpacked; unpacker) {
+ *     if (unpacked.type == Value.Type.array) {
+ *         foreach (obj; unpacked) {
+ *             switch (obj.type) {
+ *             case Value.Type.unsigned: writeln(obj.as!(uint)); break;
+ *             case Value.Type.floating:            writeln(obj.as!(real)); break;
+ *             defalut:
+ *                 throw new Exception("Unknown type");
+ *             }
+ *         }
+ *     } else {
+ *         if (unpacked.type == Value.Type.boolean)
+ *             writeln(unpacked.as!(bool));
+ *         else
+ *             writeln("Message: ", unpacked.as!(string));
+ *     }
+ * }
+ * -----
+ */
+struct Value
+{
+    /**
+     * $(D MessagePack) value type
+     */
+    static enum Type
+    {
+        nil,       /// nil(null in D)
+        boolean,   /// true, false
+        unsigned,  /// positive fixnum, uint 8, uint 16, uint 32, uint 64
+        signed,    /// negative fixnum, int 8, int 16, int 32, int 64
+        floating,  /// float, double, real
+        array,     /// fix array, array 16, array 32
+        map,       /// fix map, map 16, map 32
+        raw        /// fix raw, raw 16, raw 32
+    }
+
+    /**
+     * msgpack value representation
+     */
+    static union Via
+    {
+        bool         boolean;   /// corresponding to Type.boolean
+        ulong        uinteger;  /// corresponding to Type.unsigned
+        long         integer;   /// corresponding to Type.signed
+        real         floating;  /// corresponding to Type.floating
+        Value[]      array;     /// corresponding to Type.array
+        Value[Value] map;       /// corresponding to Type.map
+        ubyte[]      raw;       /// corresponding to Type.raw
+    }
+
+
+    Type type;  /// represents value type
+    Via  via;   /// represents real value
+
+
+    /**
+     * Constructs a $(D Value) with arguments.
+     *
+     * Params:
+     *  value = the real content.
+     *  type  = the type of value.
+     */
+    @safe
+    this(Type type = Type.nil)
+    {
+        this.type = type;
+    }
+
+    @safe
+    this(typeof(null))
+    {
+        this(Type.nil);
+    }
+
+    /// ditto
+    @trusted
+    this(bool value, Type type = Type.boolean)
+    {
+        this(type);
+        via.boolean = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(ulong value, Type type = Type.unsigned)
+    {
+        this(type);
+        via.uinteger = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(long value, Type type = Type.signed)
+    {
+        this(type);
+        via.integer = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(real value, Type type = Type.floating)
+    {
+        this(type);
+        via.floating = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(Value[] value, Type type = Type.array)
+    {
+        this(type);
+        via.array = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(Value[Value] value, Type type = Type.map)
+    {
+        this(type);
+        via.map = value;
+    }
+
+
+    /// ditto
+    @trusted
+    this(ubyte[] value, Type type = Type.raw)
+    {
+        this(type);
+        via.raw = value;
+    }
+
+    /// This is unsafe overload because using cast internally.
+    @trusted
+    this(string value, Type type = Type.raw)
+    {
+        this(type);
+        via.raw = cast(ubyte[])value;
+    }
+
+    /**
+     * Converts value to $(D_PARAM T) type.
+     *
+     * Returns:
+     *  converted value.
+     *
+     * Throws:
+     *  MessagePackException if type is mismatched.
+     *
+     * NOTE:
+     *  Current implementation uses cast.
+     */
+    @property @trusted
+    T as(T)() if (is(Unqual!T == bool))
+    {
+        if (type != Type.boolean)
+            onCastError();
+
+        return via.boolean;
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (isIntegral!T && !is(Unqual!T == enum))
+    {
+        if (type == Type.unsigned)
+            return cast(T)via.uinteger;
+
+        if (type == Type.signed)
+            return cast(T)via.integer;
+
+        onCastError();
+
+        assert(false);
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (isFloatingPoint!T && !is(Unqual!T == enum))
+    {
+        if (type != Type.floating)
+            onCastError();
+
+        return cast(T)via.floating;
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (is(Unqual!T == enum))
+    {
+        return cast(T)as!(OriginalType!T);
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (isArray!T && !is(Unqual!T == enum))
+    {
+        alias typeof(T.init[0]) V;
+
+        if (type == Type.nil) {
+            static if (isDynamicArray!T) {
+                return null;
+            } else {
+                return T.init;
+            }
+        }
+
+        static if (isByte!V || isSomeChar!V) {
+            if (type != Type.raw)
+                onCastError();
+
+            static if (isDynamicArray!T) {
+                return cast(T)via.raw;
+            } else {
+                if (via.raw.length != T.length)
+                    onCastError();
+
+                return cast(T)(via.raw[0 .. T.length]);
+            }
+        } else {
+            if (type != Type.array)
+                onCastError();
+
+            V[] array;
+
+            foreach (elem; via.array)
+                array ~= elem.as!(V);
+
+            return array;
+        }
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (isAssociativeArray!T)
+    {
+        alias typeof(T.init.keys[0])   K;
+        alias typeof(T.init.values[0]) V;
+
+        if (type == Type.nil)
+            return null;
+
+        if (type != Type.map)
+            onCastError();
+
+        V[K] map;
+
+        foreach (key, value; via.map)
+            map[key.as!(K)] = value.as!(V);
+
+        return map;
+    }
+
+
+    /**
+     * Converts to $(D_PARAM T) type.
+     *
+     * Calling $(D fromMsgpack) if $(D_KEYWORD class) and $(D_KEYWORD struct) implement $(D fromMsgpack) method. $(D fromMsgpack) signature is:
+     * -----
+     * void fromMsgpack(Value value)
+     * -----
+     * This method assigns converted values to all members of T object if $(D_KEYWORD class) and $(D_KEYWORD struct) don't implement $(D fromMsgpack).
+     *
+     * Params:
+     *  args = arguments to class constructor(class only).
+     *
+     * Returns:
+     *  converted value.
+     */
+    @property @trusted
+    T as(T, Args...)(Args args) if (is(Unqual!T == class))
+    {
+        if (type == Type.nil)
+            return null;
+
+        T object = new T(args);
+
+        static if (hasMember!(T, "fromMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.fromMsgpack(this); })) {
+                object.fromMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'fromMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else {
+            alias SerializingClasses!(T) Classes;
+
+            if (via.array.length != SerializingMemberNumbers!(Classes))
+                throw new MessagePackException("The number of deserialized object member is mismatched");
+
+            size_t offset;
+            foreach (Class; Classes) {
+                Class obj = cast(Class)object;
+                foreach (i, member; obj.tupleof) {
+                    static if (isPackedField!(Class.tupleof[i]))
+                        obj.tupleof[i] = via.array[offset++].as!(typeof(member));
+                }
+            }
+        }
+
+        return object;
+    }
+
+
+    /// ditto
+    @property @trusted
+    T as(T)() if (is(Unqual!T == struct))
+    {
+        T obj;
+
+        static if (hasMember!(T, "fromMsgpack"))
+        {
+            static if (__traits(compiles, { T t; t.fromMsgpack(this); })) {
+                obj.fromMsgpack(this);
+            } else {
+                static assert(0, "Failed to invoke 'fromMsgpack' on type '" ~ Unqual!T.stringof ~ "'");
+            }
+        } else {
+            static if (isTuple!T) {
+                if (via.array.length != T.Types.length)
+                    throw new MessagePackException("The number of deserialized Tuple element is mismatched");
+
+                foreach (i, Type; T.Types)
+                    obj.field[i] = via.array[i].as!(Type);
+            } else {  // simple struct
+                if (via.array.length != SerializingMemberNumbers!T)
+                    throw new MessagePackException("The number of deserialized struct member is mismatched");
+
+                size_t offset;
+                foreach (i, member; obj.tupleof) {
+                    static if (isPackedField!(T.tupleof[i]))
+                        obj.tupleof[i] = via.array[offset++].as!(typeof(member));
+                }
+            }
+        }
+
+        return obj;
+    }
+
+
+    /**
+     * Special method called by $(D Packer).
+     *
+     * Params:
+     *  packer = a MessagePack serializer.
+     */
+    void toMsgpack(Packer)(ref Packer packer) const
+    {
+        final switch (type) {
+        case Type.nil:
+            packer.packNil();
+            break;
+        case Type.boolean:
+            packer.pack(via.boolean);
+            break;
+        case Type.unsigned:
+            packer.pack(via.uinteger);
+            break;
+        case Type.signed:
+            packer.pack(via.integer);
+            break;
+        case Type.floating:
+            packer.pack(via.floating);
+            break;
+        case Type.raw:
+            packer.pack(via.raw);
+            break;
+        case Type.array:
+            packer.beginArray(via.array.length);
+            foreach (elem; via.array)
+                elem.toMsgpack(packer);
+            break;
+        case Type.map:
+            packer.beginMap(via.map.length);
+            foreach (key, value; via.map) {
+                key.toMsgpack(packer);
+                value.toMsgpack(packer);
+            }
+            break;
+        }
+    }
+
+
+    /**
+     * Comparison for equality. @trusted for union.
+     */
+    @trusted
+    bool opEquals(Tdummy = void)(ref const Value other) const
+    {
+        if (type != other.type)
+            return false;
+
+        final switch (other.type) {
+        case Type.nil:      return true;
+        case Type.boolean:  return opEquals(other.via.boolean);
+        case Type.unsigned: return opEquals(other.via.uinteger);
+        case Type.signed:   return opEquals(other.via.integer);
+        case Type.floating: return opEquals(other.via.floating);
+        case Type.raw:      return opEquals(other.via.raw);
+        case Type.array:    return opEquals(other.via.array);
+        case Type.map:      return opEquals(other.via.map);
+        }
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : bool)(in T other) const
+    {
+        if (type != Type.boolean)
+            return false;
+
+        return via.boolean == other;
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : ulong)(in T other) const
+    {
+        static if (__traits(isUnsigned, T)) {
+            if (type != Type.unsigned)
+                return false;
+
+            return via.uinteger == other;
+        } else {
+            if (type != Type.signed)
+                return false;
+
+            return via.integer == other;
+        }
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : real)(in T other) const
+    {
+        if (type != Type.floating)
+            return false;
+
+        return via.floating == other;
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : const Value[])(in T other) const
+    {
+        if (type != Type.array)
+            return false;
+
+        return via.array == other;
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : const Value[Value])(in T other) const
+    {
+        if (type != Type.map)
+            return false;
+
+        // This comparison is instead of default comparison because 'via.map == other' raises "Access Violation".
+        foreach (key, value; via.map) {
+            if (key in other) {
+                if (other[key] != value)
+                    return false;
+            } else {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : const(ubyte)[])(in T other) const
+    {
+        if (type != Type.raw)
+            return false;
+
+        return via.raw == other;
+    }
+
+
+    /// ditto
+    @trusted
+    bool opEquals(T : string)(in T other) const
+    {
+        if (type != Type.raw)
+            return false;
+
+        return via.raw == cast(ubyte[])other;
+    }
+
+    @trusted
+    hash_t toHash() const nothrow
+    {
+        static hash_t getHash(T)(T* v) @safe nothrow
+        {
+            return typeid(T).getHash(v);
+        }
+
+        final switch (type) {
+            case Type.nil:      return 0;
+            case Type.boolean:  return getHash(&via.boolean);
+            case Type.unsigned: return getHash(&via.uinteger);
+            case Type.signed:   return getHash(&via.integer);
+            case Type.floating: return getHash(&via.floating);
+            case Type.raw:      return getHash(&via.raw);
+            case Type.array:
+                hash_t ret;
+                foreach (elem; via.array)
+                    ret ^= elem.toHash();
+                return ret;
+            case Type.map:
+                try {
+                    hash_t ret;
+                    foreach (key, value; via.map) {
+                        ret ^= key.toHash();
+                        ret ^= value.toHash();
+                    }
+                    return ret;
+                } catch assert(0);
+        }
+    }
+}
+
+
+unittest
+{
+    // nil
+    Value value = Value(null);
+    Value other = Value();
+
+    assert(value      == other);
+    assert(value.type == Value.Type.nil);
+
+    // boolean
+    value = Value(true);
+    other = Value(false);
+
+    assert(value           != other);
+    assert(value.type      == Value.Type.boolean);
+    assert(value.as!(bool) == true);
+    assert(other           == false);
+
+    try {
+        auto b = value.as!(uint);
+        assert(false);
+    } catch (MessagePackException e) { }
+
+    // unsigned integer
+    value = Value(10UL);
+    other = Value(10UL);
+
+    assert(value           == other);
+    assert(value.type      == Value.Type.unsigned);
+    assert(value.as!(uint) == 10);
+    assert(other           == 10UL);
+
+    // signed integer
+    value = Value(-20L);
+    other = Value(-10L);
+
+    assert(value          != other);
+    assert(value.type     == Value.Type.signed);
+    assert(value.as!(int) == -20);
+    assert(other          == -10L);
+
+    // enum
+    enum E : int { F = -20 }
+
+    E e = value.as!(E);
+    assert(e == E.F);
+
+    // floating point
+    value = Value(0.1e-10L);
+    other = Value(0.1e-20L);
+
+    assert(value           != other);
+    assert(value.type      == Value.Type.floating);
+    assert(value.as!(real) == 0.1e-10L);
+    assert(other           == 0.1e-20L);
+
+    // raw
+    value = Value(cast(ubyte[])[72, 105, 33]);
+    other = Value(cast(ubyte[])[72, 105, 33]);
+
+    assert(value               == other);
+    assert(value.type          == Value.Type.raw);
+    assert(value.as!(string)   == "Hi!");
+    assert(value.as!(ubyte[3]) == [72, 105, 33]);
+    assert(other               == cast(ubyte[])[72, 105, 33]);
+
+    // raw with string
+    value = Value("hello");
+    other = Value("hello");
+
+    assert(value             == other);
+    assert(value.type        == Value.Type.raw);
+    assert(value.as!(string) == "hello");
+
+    // enum : string
+    enum EStr : string { elem = "hello" }
+
+    assert(value.as!(EStr) == EStr.elem);
+
+    // array
+    auto t = Value(cast(ubyte[])[72, 105, 33]);
+    value = Value([t]);
+    other = Value([t]);
+
+    assert(value               == other);
+    assert(value.type          == Value.Type.array);
+    assert(value.as!(string[]) == ["Hi!"]);
+    assert(other               == [t]);
+
+    // map
+    value = Value([Value(1L):Value(2L)]);
+    other = Value([Value(1L):Value(1L)]);
+
+    assert(value               != other);
+    assert(value.type          == Value.Type.map);
+    assert(value.as!(int[int]) == [1:2]);
+    assert(other               == [Value(1L):Value(1L)]);
+
+    value = Value(10UL);
+
+    // struct
+    static struct S
+    {
+        ulong num;
+
+        void fromMsgpack(Value value) { num = value.via.uinteger; }
+    }
+
+    S s = value.as!(S);
+    assert(s.num == 10);
+
+    value = Value([Value(0.5f), Value(cast(ubyte[])[72, 105, 33])]);
+
+    // struct
+    static struct Simple
+    {
+        @nonPacked int era;
+        double num;
+        string msg;
+    }
+
+    Simple simple = value.as!(Simple);
+    assert(simple.era == int.init);
+    assert(simple.num == 0.5f);
+    assert(simple.msg == "Hi!");
+
+    value = Value(10UL);
+
+    // class
+    static class C
+    {
+        ulong num;
+
+        void fromMsgpack(Value value) { num = value.via.uinteger; }
+    }
+
+    C c = value.as!(C);
+    assert(c.num == 10);
+
+    static class SimpleA
+    {
+        bool flag = true;
+    }
+
+    static class SimpleB : SimpleA
+    {
+        ubyte type = 100;
+    }
+
+    static class SimpleC : SimpleB
+    {
+        @nonPacked string str;
+        uint num = uint.max;
+    }
+
+    value = Value([Value(false), Value(99UL), Value(cast(ulong)(uint.max / 2u))]);
+
+    SimpleC sc = value.as!(SimpleC);
+    assert(sc.flag == false);
+    assert(sc.type == 99);
+    assert(sc.num  == uint.max / 2);
+    assert(sc.str.empty);
+
+    // std.typecons.Tuple
+    value = Value([Value(true), Value(1UL), Value(cast(ubyte[])"Hi!")]);
+
+    auto tuple = value.as!(Tuple!(bool, uint, string));
+    assert(tuple.field[0] == true);
+    assert(tuple.field[1] == 1u);
+    assert(tuple.field[2] == "Hi!");
+
+    /*
+     * non-MessagePackable object is stopped by static assert
+     * static struct NonMessagePackable {}
+     * auto nonMessagePackable = value.as!(NonMessagePackable);
+     */
+}
+
+
+/**
+ * $(D Unpacked) is a $(D Range) wrapper for stream deserialization result
+ */
+struct Unpacked
+{
+    Value value;  /// deserialized value
+
+    alias value this;
+
+
+    /**
+     * Constructs a $(D Unpacked) with argument.
+     *
+     * Params:
+     *  value = a deserialized value.
+     */
+    @safe
+    this(ref Value value)
+    {
+        this.value = value;
+    }
+
+
+    /**
+     * InputRange primitive operation that checks iteration state.
+     *
+     * Returns:
+     *  true if there are no more elements to be iterated.
+     */
+    @property @trusted
+    nothrow bool empty() const  // std.array.empty isn't nothrow function
+    {
+        return (value.type == Value.Type.array) && !value.via.array.length;
+    }
+
+
+    /**
+     * Range primitive operation that returns the length of the range.
+     *
+     * Returns:
+     *  the number of values.
+     */
+    @property @trusted
+    size_t length()
+    {
+        return value.via.array.length;
+    }
+
+
+    /**
+     * InputRange primitive operation that returns the currently iterated element.
+     *
+     * Returns:
+     *  the deserialized $(D Value).
+     */
+    @property @trusted
+    ref Value front()
+    {
+        return value.via.array.front;
+    }
+
+
+    /**
+     * InputRange primitive operation that advances the range to its next element.
+     */
+    @trusted
+    void popFront()
+    {
+        value.via.array.popFront();
+    }
+
+    /**
+     * RandomAccessRange primitive operation.
+     *
+     * Returns:
+     *  the deserialized $(D Value) at $(D_PARAM n) position.
+     */
+    @trusted
+    nothrow ref Value opIndex(size_t n)
+    {
+        return value.via.array[n];
+    }
+
+    /**
+     * Returns a slice of the range.
+     *
+     * Paramas:
+     *  from = the start point of slicing.
+     *  to   = the end point of slicing.
+     *
+     * Returns:
+     *  the slice of Values.
+     */
+    @trusted
+    Value[] opSlice(size_t from, size_t to)
+    {
+        return value.via.array[from..to];
+    }
+
+    /**
+     * Range primitive operation that returns the snapshot.
+     *
+     * Returns:
+     *  the snapshot of this Value.
+     */
+    @property @safe
+    Unpacked save()
+    {
+        return Unpacked(value);
+    }
+}
+
+
+unittest
+{
+    static assert(isForwardRange!Unpacked);
+    static assert(hasLength!Unpacked);
+}
+
+
+/**
+ * This $(D StreamingUnpacker) is a $(D MessagePack) streaming deserializer
+ *
+ * This implementation enables you to load multiple objects from a stream(like network).
+ *
+ * Example:
+ * -----
+ * ...
+ * auto unpacker = StreamingUnpacker(serializedData);
+ * ...
+ *
+ * // appends new data to buffer if pre execute() call didn't finish deserialization.
+ * unpacker.feed(newSerializedData);
+ *
+ * while (unpacker.execute()) {
+ *     foreach (obj; unpacker.purge()) {
+ *         // do stuff (obj is a Value)
+ *     }
+ * }
+ *
+ * if (unpacker.size)
+ *     throw new Exception("Message is too large");
+ * -----
+ */
+struct StreamingUnpacker
+{
+  private:
+    /*
+     * Context state of deserialization
+     */
+    enum State
+    {
+        HEADER = 0x00,
+
+        BIN8 = 0x04,
+        BIN16,
+        BIN32,
+
+        // Floating point, Unsigned, Signed interger (== header & 0x03)
+        FLOAT = 0x0a,
+        DOUBLE,
+        UINT8,
+        UINT16,
+        UINT32,
+        UINT64,
+        INT8,
+        INT16,
+        INT32,
+        INT64,
+
+        // Container (== header & 0x01)
+        STR8 = 0x19,
+        RAW16 = 0x1a,
+        RAW32,
+        ARRAY16,
+        ARRAY36,
+        MAP16,
+        MAP32,
+        RAW,
+
+        // D-specific type
+        REAL
+    }
+
+
+    /*
+     * Element type of container
+     */
+    enum ContainerElement
+    {
+        ARRAY_ITEM,
+        MAP_KEY,
+        MAP_VALUE
+    }
+
+
+    /*
+     * Internal stack context
+     */
+    static struct Context
+    {
+        static struct Container
+        {
+            ContainerElement type;   // value container type
+            Value            value;  // current value
+            Value            key;    // for map value
+            size_t           count;  // container length
+        }
+
+        State       state;  // current state of deserialization
+        size_t      trail;  // current deserializing size
+        size_t      top;    // current index of stack
+        Container[] stack;  // storing values
+    }
+
+    Context context_;  // stack environment for streaming deserialization
+
+    mixin InternalBuffer;
+
+
+  public:
+    /**
+     * Constructs a $(D StreamingUnpacker).
+     *
+     * Params:
+     *  target     = byte buffer to deserialize
+     *  bufferSize = size limit of buffer size
+     */
+    @safe
+    this(in ubyte[] target, in size_t bufferSize = 8192)
+    {
+        initializeBuffer(target, bufferSize);
+        initializeContext();
+    }
+
+
+    /**
+     * Forwards to deserialized object.
+     *
+     * Returns:
+     *  the $(D Unpacked) object contains deserialized value.
+     */
+    @property @safe
+    Unpacked unpacked()
+    {
+        return Unpacked(context_.stack[0].value);
+    }
+
+
+    /**
+     * Clears some states for next deserialization.
+     */
+    @safe
+    nothrow void clear()
+    {
+        initializeContext();
+
+        parsed_ = 0;
+    }
+
+
+    /**
+     * Convenient method for unpacking and clearing states.
+     *
+     * Example:
+     * -----
+     * foreach (obj; unpacker.purge()) {
+     *     // do stuff
+     * }
+     * -----
+     * is equivalent to
+     * -----
+     * foreach (obj; unpacker.unpacked) {
+     *     // do stuff
+     * }
+     * unpacker.clear();
+     * -----
+     *
+     * Returns:
+     *  the $(D Unpacked) object contains deserialized value.
+     */
+    @safe
+    Unpacked purge()
+    {
+        auto result = Unpacked(context_.stack[0].value);
+
+        clear();
+
+        return result;
+    }
+
+
+    /**
+     * Executes deserialization.
+     *
+     * Returns:
+     *  true if deserialization has been completed, otherwise false.
+     *
+     * Throws:
+     *  $(D UnpackException) when parse error occurs.
+     */
+    bool execute()
+    {
+        /*
+         * Current implementation is very dirty(goto! goto!! goto!!!).
+         * This Complexity for performance(avoid function call).
+         */
+
+        bool   ret;
+        size_t cur = offset_;
+        Value obj;
+
+        // restores before state
+        auto state =  context_.state;
+        auto trail =  context_.trail;
+        auto top   =  context_.top;
+        auto stack = &context_.stack;
+
+        /*
+         * Helper for container deserialization
+         */
+        bool startContainer(string Type)(ContainerElement type, size_t length)
+        {
+            mixin("callback" ~ Type ~ "((*stack)[top].value, length);");
+
+            if (length == 0)
+                return false;
+
+            (*stack)[top].type  = type;
+            (*stack)[top].count = length;
+            (*stack).length     = ++top + 1;
+
+            return true;
+        }
+
+        // non-deserialized data is nothing
+        if (used_ - offset_ == 0)
+            goto Labort;
+
+        do {
+          Lstart:
+            if (state == State.HEADER) {
+                const header = buffer_[cur];
+
+                if (0x00 <= header && header <= 0x7f) {         // positive
+                    callbackUInt(obj, header);
+                    goto Lpush;
+                } else if (0xe0 <= header && header <= 0xff) {  // negative
+                    callbackInt(obj, cast(byte)header);
+                    goto Lpush;
+                } else if (0xa0 <= header && header <= 0xbf) {  // fix raw
+                    trail = header & 0x1f;
+                    state = State.RAW;
+                    cur++;
+                    continue;
+                } else if (0x90 <= header && header <= 0x9f) {  // fix array
+                    if (!startContainer!"Array"(ContainerElement.ARRAY_ITEM, header & 0x0f))
+                        goto Lpush;
+                    cur++;
+                    continue;
+                } else if (0x80 <= header && header <= 0x8f) {  // fix map
+                    if (!startContainer!"Map"(ContainerElement.MAP_KEY, header & 0x0f))
+                        goto Lpush;
+                    cur++;
+                    continue;
+                } else {
+                    switch (header) {
+                    case Format.UINT8, Format.UINT16, Format.UINT32, Format.UINT64,
+                         Format.INT8, Format.INT16, Format.INT32, Format.INT64,
+                         Format.FLOAT, Format.DOUBLE:
+                        trail = 1 << (header & 0x03); // computes object size
+                        state = cast(State)(header & 0x1f);
+                        break;
+                    case Format.REAL:
+                        trail = RealSize;
+                        state = State.REAL;
+                        break;
+                    case Format.ARRAY16, Format.ARRAY32,
+                         Format.MAP16, Format.MAP32:
+                        trail = 2 << (header & 0x01);  // computes container size
+                        state = cast(State)(header & 0x1f);
+                        break;
+                    // raw will become str format in new spec
+                    case Format.STR8:
+                    case Format.RAW16: // will be STR16
+                    case Format.RAW32: // will be STR32
+                        trail = 1 << ((header & 0x03) - 1);  // computes container size
+                        state = cast(State)(header & 0x1f);
+                        break;
+                    case Format.BIN8, Format.BIN16, Format.BIN32:
+                        trail = 1 << (header & 0x03);  // computes container size
+                        state = cast(State)(header & 0x1f);
+                        break;
+                    case Format.NIL:
+                        callbackNil(obj);
+                        goto Lpush;
+                    case Format.TRUE:
+                        callbackBool(obj, true);
+                        goto Lpush;
+                    case Format.FALSE:
+                        callbackBool(obj, false);
+                        goto Lpush;
+                    default:
+                        throw new UnpackException("Unknown type");
+                    }
+
+                    cur++;
+                    goto Lstart;
+                }
+            } else {
+                // data lack for deserialization
+                if (used_ - cur < trail)
+                    goto Labort;
+
+                const base = cur; cur += trail - 1;  // fix current position
+
+                final switch (state) {
+                case State.FLOAT:
+                    _f temp;
+
+                    temp.i = load32To!uint(buffer_[base..base + trail]);
+                    callbackFloat(obj, temp.f);
+                    goto Lpush;
+                case State.DOUBLE:
+                    _d temp;
+
+                    temp.i = load64To!ulong(buffer_[base..base + trail]);
+                    callbackFloat(obj, temp.f);
+                    goto Lpush;
+                case State.REAL:
+                    const expb = base + ulong.sizeof;
+
+                    version (NonX86)
+                    {
+                        CustomFloat!80 temp;
+
+                        const frac = load64To!ulong (buffer_[base..expb]);
+                        const exp  = load16To!ushort(buffer_[expb..expb + ushort.sizeof]);
+
+                        temp.significand = frac;
+                        temp.exponent    = exp & 0x7fff;
+                        temp.sign        = exp & 0x8000 ? true : false;
+
+                        // NOTE: temp.get!real is inf on non-x86 when deserialized value is larger than double.max.
+                        callbackFloat(obj, temp.get!real);
+                    }
+                    else
+                    {
+                        _r temp;
+
+                        temp.fraction = load64To!(typeof(temp.fraction))(buffer_[base..expb]);
+                        temp.exponent = load16To!(typeof(temp.exponent))(buffer_[expb..expb + temp.exponent.sizeof]);
+
+                        callbackFloat(obj, temp.f);
+                    }
+
+                    goto Lpush;
+                case State.UINT8:
+                    callbackUInt(obj, buffer_[base]);
+                    goto Lpush;
+                case State.UINT16:
+                    callbackUInt(obj, load16To!ulong(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.UINT32:
+                    callbackUInt(obj, load32To!ulong(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.UINT64:
+                    callbackUInt(obj, load64To!ulong(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.INT8:
+                    callbackInt(obj, cast(byte)buffer_[base]);
+                    goto Lpush;
+                case State.INT16:
+                    callbackInt(obj, load16To!long(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.INT32:
+                    callbackInt(obj, load32To!long(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.INT64:
+                    callbackInt(obj, load64To!long(buffer_[base..base + trail]));
+                    goto Lpush;
+                case State.RAW: Lraw:
+                    hasRaw_ = true;
+                    callbackRaw(obj, buffer_[base..base + trail]);
+                    goto Lpush;
+                case State.STR8, State.BIN8:
+                    trail = buffer_[base];
+                    if (trail == 0)
+                        goto Lraw;
+                    state = State.RAW;
+                    cur++;
+                    goto Lstart;
+                case State.RAW16, State.BIN16:
+                    trail = load16To!size_t(buffer_[base..base + trail]);
+                    if (trail == 0)
+                        goto Lraw;
+                    state = State.RAW;
+                    cur++;
+                    goto Lstart;
+                case State.RAW32, State.BIN32:
+                    trail = load32To!size_t(buffer_[base..base + trail]);
+                    if (trail == 0)
+                        goto Lraw;
+                    state = State.RAW;
+                    cur++;
+                    goto Lstart;
+                case State.ARRAY16:
+                    if (!startContainer!"Array"(ContainerElement.ARRAY_ITEM,
+                                                load16To!size_t(buffer_[base..base + trail])))
+                        goto Lpush;
+                    state = State.HEADER;
+                    cur++;
+                    continue;
+                case State.ARRAY36:
+                    if (!startContainer!"Array"(ContainerElement.ARRAY_ITEM,
+                                                load32To!size_t(buffer_[base..base + trail])))
+                        goto Lpush;
+                    state = State.HEADER;
+                    cur++;
+                    continue;
+                case State.MAP16:
+                    if (!startContainer!"Map"(ContainerElement.MAP_KEY,
+                                              load16To!size_t(buffer_[base..base + trail])))
+                        goto Lpush;
+                    state = State.HEADER;
+                    cur++;
+                    continue;
+                case State.MAP32:
+                    if (!startContainer!"Map"(ContainerElement.MAP_KEY,
+                                              load32To!size_t(buffer_[base..base + trail])))
+                        goto Lpush;
+                    state = State.HEADER;
+                    cur++;
+                    continue;
+                case State.HEADER:
+                    break;
+                }
+            }
+
+          Lpush:
+            if (top == 0)
+                goto Lfinish;
+
+            auto container = &(*stack)[top - 1];
+
+            final switch (container.type) {
+            case ContainerElement.ARRAY_ITEM:
+                container.value.via.array ~= obj;
+                if (--container.count == 0) {
+                    obj = container.value;
+                    top--;
+                    goto Lpush;
+                }
+                break;
+            case ContainerElement.MAP_KEY:
+                container.key  = obj;
+                container.type = ContainerElement.MAP_VALUE;
+                break;
+            case ContainerElement.MAP_VALUE:
+                container.value.via.map[container.key] = obj;
+                if (--container.count == 0) {
+                    obj = container.value;
+                    top--;
+                    goto Lpush;
+                }
+                container.type = ContainerElement.MAP_KEY;
+            }
+
+            state = State.HEADER;
+            cur++;
+        } while (cur < used_);
+
+        goto Labort;
+
+      Lfinish:
+        (*stack)[0].value = obj;
+        ret = true;
+        cur++;
+        goto Lend;
+
+      Labort:
+        ret = false;
+
+      Lend:
+        context_.state = state;
+        context_.trail = trail;
+        context_.top   = top;
+        parsed_       += cur - offset_;
+        offset_        = cur;
+
+        return ret;
+    }
+
+
+    /**
+     * supports foreach. One loop provides $(D Unpacked) object contains execute() result.
+     * This is convenient in case that $(D MessagePack) values are continuous.
+     */
+    int opApply(scope int delegate(ref Unpacked) dg)
+    {
+        int result;
+
+        while (execute()) {
+            auto unpackedResult = Unpacked(context_.stack[0].value);
+            result = dg(unpackedResult);
+            if (result)
+                break;
+
+            clear();
+        }
+
+        return result;
+    }
+
+
+  private:
+    /*
+     * initializes internal stack environment.
+     */
+    @safe
+    nothrow void initializeContext()
+    {
+        context_.state        = State.HEADER;
+        context_.trail        = 0;
+        context_.top          = 0;
+        context_.stack.length = 1;
+    }
+}
+
+
+unittest
+{
+    // serialize
+    mixin DefinePacker;
+
+    packer.packArray(null, true, 1, -2, "Hi!", [1], [1:1], double.max);
+
+    // deserialize
+    auto unpacker = StreamingUnpacker(packer.stream.data); unpacker.execute();
+    auto unpacked = unpacker.purge();
+
+    // Range test
+    foreach (unused; 0..2) {
+        uint i;
+
+        foreach (obj; unpacked)
+            i++;
+
+        assert(i == unpacked.via.array.length);
+    }
+
+    auto result = unpacked.via.array;
+
+    assert(result[0].type          == Value.Type.nil);
+    assert(result[1].via.boolean   == true);
+    assert(result[2].via.uinteger  == 1);
+    assert(result[3].via.integer   == -2);
+    assert(result[4].via.raw       == [72, 105, 33]);
+    assert(result[5].as!(int[])    == [1]);
+    assert(result[6].as!(int[int]) == [1:1]);
+    assert(result[7].as!(double)   == double.max);
+}
+
+
+private:
+
+
+/*
+ * Sets value type and value.
+ *
+ * Params:
+ *  value = the value to set
+ *  number = the content to set
+ */
+ at trusted
+void callbackUInt(ref Value value, ulong number)
+{
+    value.type         = Value.Type.unsigned;
+    value.via.uinteger = number;
+}
+
+
+/// ditto
+ at trusted
+void callbackInt(ref Value value, long number)
+{
+    value.type        = Value.Type.signed;
+    value.via.integer = number;
+}
+
+
+/// ditto
+ at trusted
+void callbackFloat(ref Value value, real number)
+{
+    value.type         = Value.Type.floating;
+    value.via.floating = number;
+}
+
+
+/// ditto
+ at trusted
+void callbackRaw(ref Value value, ubyte[] raw)
+{
+    value.type    = Value.Type.raw;
+    value.via.raw = raw;
+}
+
+
+/// ditto
+ at trusted
+void callbackArray(ref Value value, size_t length)
+{
+    value.type = Value.Type.array;
+    value.via.array.length = 0;
+    value.via.array.reserve(length);
+}
+
+
+/// ditto
+ at trusted
+void callbackMap(ref Value value, lazy size_t length)
+{
+    value.type    = Value.Type.map;
+    value.via.map = null;  // clears previous result avoiding 'Access Violation'
+}
+
+
+/// ditto
+ at safe
+void callbackNil(ref Value value)
+{
+    value.type = Value.Type.nil;
+}
+
+
+/// ditto
+ at trusted
+void callbackBool(ref Value value, bool boolean)
+{
+    value.type        = Value.Type.boolean;
+    value.via.boolean = boolean;
+}
+
+
+unittest
+{
+    Value value;
+
+    // Unsigned integer
+    callbackUInt(value, uint.max);
+    assert(value.type         == Value.Type.unsigned);
+    assert(value.via.uinteger == uint.max);
+
+    // Signed integer
+    callbackInt(value, int.min);
+    assert(value.type        == Value.Type.signed);
+    assert(value.via.integer == int.min);
+
+    // Floating point
+    callbackFloat(value, real.max);
+    assert(value.type         == Value.Type.floating);
+    assert(value.via.floating == real.max);
+
+    // Raw
+    callbackRaw(value, cast(ubyte[])[1]);
+    assert(value.type    == Value.Type.raw);
+    assert(value.via.raw == cast(ubyte[])[1]);
+
+    // Array
+    Value[] array; array.reserve(16);
+
+    callbackArray(value, 16);
+    assert(value.type               == Value.Type.array);
+    assert(value.via.array.capacity == array.capacity);
+
+    // Map
+    Value[Value] map;
+
+    callbackMap(value, 16);
+    assert(value.type    == Value.Type.map);
+    assert(value.via.map == null);
+
+    // NIL
+    callbackNil(value);
+    assert(value.type == Value.Type.nil);
+
+    // Bool
+    callbackBool(value, true);
+    assert(value.type        == Value.Type.boolean);
+    assert(value.via.boolean == true);
+}
+
+
+private:
+
+
+/*
+ * A callback for type-mismatched error in cast conversion.
+ */
+ at safe
+pure void onCastError()
+{
+    throw new MessagePackException("Attempt to cast with another type");
+}
+
+
+/*
+ * A callback for type-mismatched error in deserialization process.
+ */
+ at safe
+pure void onInvalidType()
+{
+    throw new MessagePackException("Attempt to unpack with non-compatible type");
+}
+
+
+public:
+
+
+/*
+ * Handy helper for creating MessagePackable object.
+ *
+ * toMsgpack / fromMsgpack are special methods for serialization / deserialization.
+ * This template provides those methods to struct/class.
+ *
+ * Example:
+ * -----
+ * struct S
+ * {
+ *     int num; string str;
+ *
+ *     // http://d.puremagic.com/issues/show_bug.cgi?id = 1099
+ *     mixin MessagePackable;  // all members
+ *     // mixin MessagePackable!("num");  // num only
+ * }
+ * -----
+ *
+ * Defines those methods manually if you treat complex data-structure.
+ */
+mixin template MessagePackable(Members...)
+{
+    static if (Members.length == 0) {
+        /**
+         * Serializes members using $(D_PARAM packer).
+         *
+         * Params:
+         *  packer = the serializer to pack.
+         */
+        void toMsgpack(Packer)(ref Packer packer, bool withFieldName = false) const
+        {
+            if (withFieldName) {
+                packer.beginMap(this.tupleof.length);
+                foreach (i, member; this.tupleof) {
+                    pack(getFieldName!(typeof(this), i));
+                    packer.pack(member);
+                }
+            } else {
+                packer.beginArray(this.tupleof.length);
+                foreach (member; this.tupleof)
+                    packer.pack(member);
+            }
+        }
+
+
+        /**
+         * Deserializes $(D MessagePack) object to members using Value.
+         *
+         * Params:
+         *  value = the MessagePack value to unpack.
+         *
+         * Throws:
+         *  MessagePackException if $(D_PARAM value) is not an Array type.
+         */
+        void fromMsgpack(Value value)
+        {
+            // enables if std.contracts.enforce is moved to object_.d
+            // enforceEx!MessagePackException(value.type == Value.Type.array, "Value must be Array type");
+            if (value.type != Value.Type.array)
+                throw new MessagePackException("Value must be an Array type");
+            if (value.via.array.length != this.tupleof.length)
+                throw new MessagePackException("The size of deserialized value is mismatched");
+
+            foreach (i, member; this.tupleof)
+                this.tupleof[i] = value.via.array[i].as!(typeof(member));
+        }
+
+
+        /**
+         * Deserializes $(D MessagePack) object to members using direct-conversion deserializer.
+         *
+         * Params:
+         *  value = the reference to direct-conversion deserializer.
+         *
+         * Throws:
+         *  MessagePackException if the size of deserialized value is mismatched.
+         */
+        void fromMsgpack(ref Unpacker unpacker)
+        {
+            auto length = unpacker.beginArray();
+            if (length != this.tupleof.length)
+                throw new MessagePackException("The size of deserialized value is mismatched");
+
+            foreach (i, member; this.tupleof)
+                unpacker.unpack(this.tupleof[i]);
+        }
+    } else {
+        /**
+         * Member selecting version of toMsgpack.
+         */
+        void toMsgpack(Packer)(ref Packer packer, bool withFieldName = false) const
+        {
+            if (withFieldName) {
+                packer.beginMap(Members.length);
+                foreach (member; Members) {
+                    packer.pack(member);
+                    packer.pack(mixin(member));
+                }
+            } else {
+                packer.beginArray(Members.length);
+                foreach (member; Members)
+                    packer.pack(mixin(member));
+            }
+        }
+
+
+        /**
+         * Member selecting version of fromMsgpack for Value.
+         */
+        void fromMsgpack(Value value)
+        {
+            if (value.type != Value.Type.array)
+                throw new MessagePackException("Value must be an Array type");
+            if (value.via.array.length != Members.length)
+                throw new MessagePackException("The size of deserialized value is mismatched");
+
+            foreach (i, member; Members)
+                mixin(member ~ "= value.via.array[i].as!(typeof(" ~ member ~ "));");
+        }
+
+
+        /**
+         * Member selecting version of fromMsgpack for direct-converion deserializer.
+         */
+        void fromMsgpack(ref Unpacker unpacker)
+        {
+            auto length = unpacker.beginArray();
+            if (length != Members.length)
+                throw new MessagePackException("The size of deserialized value is mismatched");
+
+            foreach (member; Members)
+                unpacker.unpack(mixin(member));
+        }
+    }
+}
+
+
+unittest
+{
+    { // all members
+        /*
+         * Comment out because "src/msgpack.d(4048): Error: struct msgpack.__unittest16.S no size yet for forward reference" occurs
+         */
+        static struct S
+        {
+            uint num; string str;
+            mixin MessagePackable;
+        }
+
+        mixin DefinePacker;
+
+        S orig = S(10, "Hi!"); orig.toMsgpack(packer);
+
+        { // stream
+            auto unpacker = StreamingUnpacker(packer.stream.data); unpacker.execute();
+
+            S result; result.fromMsgpack(unpacker.unpacked);
+
+            assert(result.num == 10);
+            assert(result.str == "Hi!");
+        }
+        { // direct conversion
+            auto unpacker = Unpacker(packer.stream.data);
+
+            S result; unpacker.unpack(result);
+
+            assert(result.num == 10);
+            assert(result.str == "Hi!");
+        }
+    }
+    { // member select
+        static class C
+        {
+            uint num; string str;
+
+            this() {}
+            this(uint n, string s) { num = n; str = s; }
+
+            mixin MessagePackable!("num");
+        }
+
+        mixin DefinePacker;
+
+        C orig = new C(10, "Hi!"); orig.toMsgpack(packer);
+
+        { // stream
+            auto unpacker = StreamingUnpacker(packer.stream.data); unpacker.execute();
+
+            C result = new C; result.fromMsgpack(unpacker.unpacked);
+
+            assert(result.num == 10);
+        }
+        { // direct conversion
+            auto unpacker = Unpacker(packer.stream.data);
+
+            C result; unpacker.unpack(result);
+
+            assert(result.num == 10);
+        }
+    }
+}
+
+
+private:
+
+
+// Common and system dependent operations
+
+
+/*
+ * MessagePack type-information format
+ *
+ * See_Also:
+ *  $(LINK2 http://redmine.msgpack.org/projects/msgpack/wiki/FormatSpec, MessagePack Specificaton)
+ */
+enum Format : ubyte
+{
+    // unsinged integer
+    UINT8  = 0xcc,  // ubyte
+    UINT16 = 0xcd,  // ushort
+    UINT32 = 0xce,  // uint
+    UINT64 = 0xcf,  // ulong
+
+    // signed integer
+    INT8  = 0xd0,   // byte
+    INT16 = 0xd1,   // short
+    INT32 = 0xd2,   // int
+    INT64 = 0xd3,   // long
+
+    // floating point
+    FLOAT  = 0xca,  // float
+    DOUBLE = 0xcb,  // double
+
+    // raw byte
+    RAW   = 0xa0,
+    RAW16 = 0xda,
+    RAW32 = 0xdb,
+
+    // bin type
+    BIN8  = 0xc4,
+    BIN16 = 0xc5,
+    BIN32 = 0xc6,
+
+    // str type
+    STR8  = 0xd9,
+    //STR16 = 0xda,
+    //STR32 = 0xdb,
+
+    // array
+    ARRAY   = 0x90,
+    ARRAY16 = 0xdc,
+    ARRAY32 = 0xdd,
+
+    // map
+    MAP   = 0x80,
+    MAP16 = 0xde,
+    MAP32 = 0xdf,
+
+    // other
+    NIL   = 0xc0,   // null
+    TRUE  = 0xc3,
+    FALSE = 0xc2,
+
+    // real (This format is D only!)
+    REAL = 0xd4
+}
+
+
+/*
+ * For float type serialization / deserialization
+ */
+union _f
+{
+    float f;
+    uint  i;
+}
+
+
+/*
+ * For double type serialization / deserialization
+ */
+union _d
+{
+    double f;
+    ulong  i;
+}
+
+
+/*
+ * For real type serialization / deserialization
+ *
+ * 80-bit real is padded to 12 bytes(Linux) and 16 bytes(Mac).
+ * http://lists.puremagic.com/pipermail/digitalmars-d/2010-June/077394.html
+ */
+union _r
+{
+    real f;
+
+    struct
+    {
+        ulong  fraction;
+        ushort exponent;  // includes sign
+    }
+}
+
+enum RealSize = 10;  // Real size is 80bit
+
+
+/*
+ * Detects whether $(D_PARAM T) is a built-in byte type.
+ */
+template isByte(T)
+{
+    enum isByte = staticIndexOf!(Unqual!T, byte, ubyte) >= 0;
+}
+
+
+unittest
+{
+    static assert(isByte!(byte));
+    static assert(isByte!(const(byte)));
+    static assert(isByte!(ubyte));
+    static assert(isByte!(immutable(ubyte)));
+    static assert(!isByte!(short));
+    static assert(!isByte!(char));
+    static assert(!isByte!(string));
+}
+
+
+/*
+ * Gets asterisk string from pointer type
+ */
+template AsteriskOf(T)
+{
+    static if (is(T P == U*, U))
+        enum AsteriskOf = "*" ~ AsteriskOf!U;
+    else
+        enum AsteriskOf = "";
+}
+
+/**
+ * Get the number of member to serialize.
+ */
+template SerializingMemberNumbers(Classes...)
+{
+    static if (Classes.length == 0)
+        enum SerializingMemberNumbers = 0;
+    else
+        enum SerializingMemberNumbers = Filter!(isPackedField, Classes[0].tupleof).length + SerializingMemberNumbers!(Classes[1..$]);
+}
+
+/**
+ * Get derived classes with serialization-order
+ */
+template SerializingClasses(T)
+{
+    // There is no information in Object type. Currently disable Object serialization.
+    static if (is(T == Object))
+        static assert(false, "Object type serialization doesn't support yet. Please define toMsgpack/fromMsgpack and use cast");
+    else
+        alias TypeTuple!(Reverse!(Erase!(Object, BaseClassesTuple!(T))), T) SerializingClasses;
+}
+
+
+/**
+ * Get a field name of class or struct.
+ */
+template getFieldName(Type, size_t i)
+{
+    import std.conv : text;
+
+    static assert((is(Unqual!Type == class) || is(Unqual!Type == struct)), "Type must be class or struct: type = " ~ Type.stringof);
+    static assert(i < Type.tupleof.length, text(Type.stringof, " has ", Type.tupleof.length, " attributes: given index = ", i));
+
+    enum getFieldName = __traits(identifier, Type.tupleof[i]);
+}
+
+
+version (LittleEndian)
+{
+    /*
+     * Converts $(value) to different Endian.
+     *
+     * Params:
+     *  value = the LittleEndian value to convert.
+     *
+     * Returns:
+     *  the converted value.
+     */
+    @trusted
+    ushort convertEndianTo(size_t Bit, T)(in T value) if (Bit == 16)
+    {
+        return ntohs(cast(ushort)value);
+    }
+
+
+    // ditto
+    @trusted
+    uint convertEndianTo(size_t Bit, T)(in T value) if (Bit == 32)
+    {
+        return ntohl(cast(uint)value);
+    }
+
+
+    // ditto
+    @trusted
+    ulong convertEndianTo(size_t Bit, T)(in T value) if (Bit == 64)
+    {
+        // dmd has convert function?
+        return ((((cast(ulong)value) << 56) & 0xff00000000000000UL) |
+                (((cast(ulong)value) << 40) & 0x00ff000000000000UL) |
+                (((cast(ulong)value) << 24) & 0x0000ff0000000000UL) |
+                (((cast(ulong)value) <<  8) & 0x000000ff00000000UL) |
+                (((cast(ulong)value) >>  8) & 0x00000000ff000000UL) |
+                (((cast(ulong)value) >> 24) & 0x0000000000ff0000UL) |
+                (((cast(ulong)value) >> 40) & 0x000000000000ff00UL) |
+                (((cast(ulong)value) >> 56) & 0x00000000000000ffUL));
+    }
+
+
+    unittest
+    {
+        assert(convertEndianTo!16(0x0123)             == 0x2301);
+        assert(convertEndianTo!32(0x01234567)         == 0x67452301);
+        assert(convertEndianTo!64(0x0123456789abcdef) == 0xefcdab8967452301);
+    }
+
+
+    /*
+     * Comapatible for BigEndian environment.
+     */
+    ubyte take8from(size_t bit = 8, T)(T value)
+    {
+        static if (bit == 8 || bit == 16 || bit == 32 || bit == 64)
+            return (cast(ubyte*)&value)[0];
+        else
+            static assert(false, bit.stringof ~ " is not support bit width.");
+    }
+
+
+    unittest
+    {
+        foreach (Integer; TypeTuple!(ubyte, ushort, uint, ulong)) {
+            assert(take8from!8 (cast(Integer)0x01)               == 0x01);
+            assert(take8from!16(cast(Integer)0x0123)             == 0x23);
+            assert(take8from!32(cast(Integer)0x01234567)         == 0x67);
+            assert(take8from!64(cast(Integer)0x0123456789abcdef) == 0xef);
+        }
+    }
+}
+else
+{
+    /*
+     * Comapatible for LittleEndian environment.
+     */
+    @safe
+    ushort convertEndianTo(size_t Bit, T)(in T value) if (Bit == 16)
+    {
+        return cast(ushort)value;
+    }
+
+
+    // ditto
+    @safe
+    uint convertEndianTo(size_t Bit, T)(in T value) if (Bit == 32)
+    {
+        return cast(uint)value;
+    }
+
+
+    // ditto
+    @safe
+    ulong convertEndianTo(size_t Bit, T)(in T value) if (Bit == 64)
+    {
+        return cast(ulong)value;
+    }
+
+
+    unittest
+    {
+        assert(convertEndianTo!16(0x0123)       == 0x0123);
+        assert(convertEndianTo!32(0x01234567)   == 0x01234567);
+        assert(convertEndianTo!64(0x0123456789) == 0x0123456789);
+    }
+
+
+    /*
+     * Takes 8bit from $(D_PARAM value)
+     *
+     * Params:
+     *  value = the content to take.
+     *
+     * Returns:
+     *  the 8bit value corresponding $(D_PARAM bit) width.
+     */
+    ubyte take8from(size_t bit = 8, T)(T value)
+    {
+        static if (bit == 8)
+            return (cast(ubyte*)&value)[0];
+        else static if (bit == 16)
+            return (cast(ubyte*)&value)[1];
+        else static if (bit == 32)
+            return (cast(ubyte*)&value)[3];
+        else static if (bit == 64)
+            return (cast(ubyte*)&value)[7];
+        else
+            static assert(false, bit.stringof ~ " is not support bit width.");
+    }
+
+
+    unittest
+    {
+        foreach (Integer; TypeTuple!(ubyte, ushort, uint, ulong)) {
+            assert(take8from!8 (cast(Integer)0x01)               == 0x01);
+            assert(take8from!16(cast(Integer)0x0123)             == 0x23);
+            assert(take8from!32(cast(Integer)0x01234567)         == 0x67);
+            assert(take8from!64(cast(Integer)0x0123456789abcdef) == 0xef);
+        }
+    }
+}
+
+
+/*
+ * Loads $(D_PARAM T) type value from $(D_PARAM buffer).
+ *
+ * Params:
+ *  buffer = the serialized contents.
+ *
+ * Returns:
+ *  the Endian-converted value.
+ */
+T load16To(T)(ubyte[] buffer)
+{
+    return cast(T)(convertEndianTo!16(*cast(ushort*)buffer.ptr));
+}
+
+
+// ditto
+T load32To(T)(ubyte[] buffer)
+{
+    return cast(T)(convertEndianTo!32(*cast(uint*)buffer.ptr));
+}
+
+
+// ditto
+T load64To(T)(ubyte[] buffer)
+{
+    return cast(T)(convertEndianTo!64(*cast(ulong*)buffer.ptr));
+}
diff --git a/bio/bam/utils/array.d b/bio/bam/utils/array.d
new file mode 100644
index 0000000..4e5f8a1
--- /dev/null
+++ b/bio/bam/utils/array.d
@@ -0,0 +1,113 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.utils.array;
+
+import std.c.string;
+import std.traits;
+
+/// Modifies array in-place so that $(D slice) is replaced by
+/// $(D replacement[]).
+///
+/// WARNING: it's you who is responsible that $(D slice) is indeed
+/// a slice of $(D s).
+void replaceSlice(T, U)(ref T[] s, in U[] slice, in T[] replacement)
+    if (is(Unqual!U == T)) 
+{
+
+    auto offset = slice.ptr - s.ptr;
+    auto slicelen = slice.length;
+    auto replen = replacement.length;
+
+    auto newlen = s.length - slicelen + replen;
+
+    if (slicelen == replen) {
+        s[offset .. offset + slicelen] = replacement;
+        return;
+    }
+
+    if (replen < slicelen) {
+        // overwrite piece of slice
+        s[offset .. offset + replen] = replacement;
+        // and then move the remainder
+        memmove(s.ptr + (offset + replen),
+                s.ptr + (offset + slicelen),
+                (newlen - offset - replen) * T.sizeof);
+
+        s.length = newlen;
+        return;
+    }
+
+    // replen > slicelen
+    s.length = newlen;
+    // here, first move the remainder
+    memmove(s.ptr + (offset + replen),
+            s.ptr + (offset + slicelen),
+            (newlen - offset - replen) * T.sizeof);
+    // and then overwrite
+    s[offset .. offset + replen] = replacement;
+}
+
+/// Does almost the same, but does not require $(D replacement),
+/// instead only its length, $(D n) bytes. This is useful for
+/// avoiding memory allocations.
+void prepareSlice(T, U)(ref T[] s, in U[] slice, size_t n)
+    if (is(Unqual!U == T))
+{
+
+    auto offset = slice.ptr - s.ptr;
+    auto slicelen = slice.length;
+    auto replen = n;
+
+    auto newlen = s.length - slicelen + replen;
+
+    if (slicelen == replen) {
+        return;
+    }
+
+    if (replen < slicelen) {
+        memmove(s.ptr + (offset + replen),
+                s.ptr + (offset + slicelen),
+                (newlen - offset - replen) * T.sizeof);
+
+        s.length = newlen;
+        return;
+    }
+
+    // replen > slicelen
+    s.length = newlen;
+    memmove(s.ptr + (offset + replen),
+            s.ptr + (offset + slicelen),
+            (newlen - offset - replen) * T.sizeof);
+}
+
+
+unittest {
+    auto array = [1, 2, 3, 4, 5];
+    replaceSlice(array, array[2 .. 4], [-1, -2, -5]);
+    assert(array == [1, 2, -1, -2, -5, 5]);
+    replaceSlice(array, array[1 .. 4], cast(int[])[]);
+    assert(array == [1, -5, 5]);
+    replaceSlice(array, array[0 .. 1], [3]);
+    assert(array == [3, -5, 5]);
+}
diff --git a/bio/bam/utils/graph.d b/bio/bam/utils/graph.d
new file mode 100644
index 0000000..a226e6f
--- /dev/null
+++ b/bio/bam/utils/graph.d
@@ -0,0 +1,92 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.utils.graph;
+
+import std.exception;
+import std.array;
+import std.algorithm;
+import std.range;
+
+/// This class is used only in utils/samheadermerger.d for merging
+/// reference sequence dictionaries, thus not much functionality 
+/// is presented here.
+class DirectedGraph {
+
+    void addEdge(string a, string b) {
+        auto indA = addNode(a);
+        auto indB = addNode(b);
+        _edges[indA] ~= indB;
+    }
+
+    /// Returns: unique integer identifier of node
+    size_t addNode(string a) {
+        if (a !in _indices) {
+            _nodes ~= a;
+            _edges.length = _nodes.length;
+            return _indices[a] = _nodes.length - 1;
+        } else {
+            return _indices[a];
+        }
+    }
+
+    string[] topologicalSort() {
+        auto predecessor_count = new size_t[_nodes.length];
+        foreach (node_neighbours; _edges) {
+            foreach (neighbour; node_neighbours) 
+                predecessor_count[neighbour] += 1;
+        }
+
+        size_t[] queue;
+        queue.reserve(_nodes.length);
+        for (size_t i = 0; i < _nodes.length; i++)
+            if (predecessor_count[i] == 0)
+                queue ~= i;
+      
+        string[] result;
+        result.reserve(_nodes.length);
+
+        while (!queue.empty) {
+            auto front = queue[0];
+            result ~= _nodes[front];
+            queue = queue[1 .. $];
+            foreach (successor; _edges[front]) {
+                predecessor_count[successor] -= 1;
+                if (predecessor_count[successor] == 0) {
+                    queue ~= successor;
+                }
+            }
+        }
+        
+        if (result.length < _nodes.length) {
+            throw new Exception("graph contains cycles");
+        }
+
+        return result;
+    }
+
+private:
+    string[] _nodes;
+    size_t[string] _indices;
+    size_t[][] _edges;
+}
diff --git a/bio/bam/utils/samheadermerger.d b/bio/bam/utils/samheadermerger.d
new file mode 100644
index 0000000..c4633c7
--- /dev/null
+++ b/bio/bam/utils/samheadermerger.d
@@ -0,0 +1,404 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.utils.samheadermerger;
+
+import bio.sam.header;
+import bio.bam.validation.samheader;
+
+import std.array;
+import std.range;
+import std.algorithm;
+import std.conv;
+import std.typecons;
+import std.exception;
+
+import bio.bam.utils.graph;
+
+/// Class encapsulating functionality of merging several SAM headers
+/// into one. (In fact, its role is to just group several variables,
+/// so it could be replaced by a function returning a struct.)
+class SamHeaderMerger {
+
+    enum Strategy {
+        simple,
+        usingIndex
+    }
+
+    Strategy strategy;
+
+    /// Takes array of SAM headers as an input.
+    this(SamHeader[] headers, bool validate_headers=false) {
+        _headers = headers;
+        _len = _headers.length;
+
+        merged_header = new SamHeader();
+        ref_id_map = new size_t[size_t][_len];
+        ref_id_reverse_map = new size_t[size_t][_len];
+        program_id_map = new string[string][_len];
+        readgroup_id_map = new string[string][_len];
+
+        if (validate_headers) {
+            // TODO: make custom validator for producing better error message
+            foreach (size_t i, header; _headers) {
+                if (!isValid(header)) {
+                    throw new Exception("header #" ~ to!string(i) ~ " is invalid, can't merge");
+                }
+            }
+        }
+
+        auto expected = _headers[0].sorting_order;
+        if (expected != SortingOrder.coordinate && expected != SortingOrder.queryname) {
+            throw new Exception("file headers indicate that some files are not sorted");
+        }
+        foreach (header; _headers) {
+            if (header.sorting_order != expected) {
+                throw new Exception("sorting orders of files don't agree, can't merge");
+            }
+        }
+        merged_header.sorting_order = expected;
+
+        mergeSequenceDictionaries();
+        mergeReadGroups();
+        mergeProgramRecords();
+        mergeComments();
+    }
+
+    /// The main result of merging -- new SamHeader
+    SamHeader merged_header;
+
+    /// Map: index of SamHeader in input array of headers -> old refID -> new refID
+    size_t[size_t][] ref_id_map;
+
+    /// the same for read group identifiers
+    string[string][] readgroup_id_map;
+
+    /// the same for program record identifiers
+    string[string][] program_id_map;
+
+    /// Map: index of SamHeader in input array of headers -> new refID -> old refID
+    size_t[size_t][] ref_id_reverse_map;
+
+private:
+
+    // NOTE FOR DEVELOPER:
+    // for more info on what's going on here, read comments in sambamba/sambamba/merge.d
+
+    SamHeader[] _headers;
+    size_t _len; // number of headers
+
+    static void addVerticeToDict(ref SqLine[string] dict, ref SqLine line) {
+        if (line.name in dict) {
+            if (line.length != dict[line.name].length) {
+                // those two @SQ lines are highly unlikely to refer to the same
+                // reference sequence if lengths are different
+                throw new Exception("can't merge SAM headers: one of references with " ~
+                        "name " ~ line.name ~ " has length " ~ 
+                        to!string(dict[line.name].length) ~ 
+                        " while another one with the same name has length " ~ 
+                        to!string(line.length));
+            }
+            // TODO: merge individual tags?
+        } else {
+            dict[line.name] = line;
+        }
+    }
+
+    void mergeSequenceDictionaries() {
+        // make a directed graph out of reference sequences and do a topological sort
+       
+        SqLine[string] dict;
+
+        // create a graph
+        auto g = new DirectedGraph();
+        foreach (header; _headers) {
+            auto sequences = header.sequences.values;
+            auto prev = sequences.front;
+            addVerticeToDict(dict, prev);
+            g.addNode(prev.name);
+            sequences.popFront();
+            while (!sequences.empty) {
+                auto cur = sequences.front;
+                addVerticeToDict(dict, cur);
+                g.addEdge(prev.name, cur.name);
+                prev = cur;
+                sequences.popFront();
+            }
+        }
+
+        // get topologically sorted nodes
+        try {
+            foreach (v; g.topologicalSort()) {
+                merged_header.sequences.add(dict[v]);
+            }
+            strategy = Strategy.simple;
+        } catch (Exception e) {
+            // failed, try another strategy which requires index files
+            foreach (sq_line; sort!((a, b) => a.name < b.name)(dict.values)) {
+                merged_header.sequences.add(sq_line);
+            }
+            strategy = Strategy.usingIndex;
+        }
+
+        // make mappings
+        foreach (size_t i, header; _headers) {
+            foreach (size_t j, SqLine sq; header.sequences) {
+                auto new_index = merged_header.sequences.getSequenceIndex(sq.name);
+                if (new_index < 0) {
+                  import std.stdio;
+                  stderr.writeln("merged header sequence dictionary: \n",
+                      merged_header.sequences.values);
+                  throw new Exception("BUG: " ~ sq.name ~ " is not in merged header dictionary");
+                }
+                ref_id_map[i][j] = to!size_t(new_index);
+                ref_id_reverse_map[i][to!size_t(new_index)] = j;
+            }
+        }
+    }
+
+    // The reason to pass by reference is that when merging program records,
+    // this function is called in a loop, and we need to keep some structures between calls.
+    //
+    // $(D dict) is a collection of Line structs, which will finally be part of the header;
+    // $(D record_id_map) is an array of mappings (for each header) where old record identifier
+    // is mapped into a new one;
+    static void mergeHeaderLines(Line, R)(R records_with_file_ids, size_t file_count,
+                                          ref HeaderLineDictionary!Line dict,
+                                          ref string[string][] record_id_map)
+        if (is(typeof(Line.identifier) == string) &&
+            is(ElementType!R == Tuple!(Line, size_t)) &&
+            (is(Line == RgLine) || is(Line == PgLine)))
+    {
+        // Map: record identifier -> record -> list of files
+        size_t[][Line][string] id_to_record;
+
+        foreach (record_and_file; records_with_file_ids) {
+            auto rec = record_and_file[0];
+            auto file_id = record_and_file[1];
+            id_to_record[rec.identifier][rec] ~= file_id;
+        }
+
+        // Loop through all identifiers
+        foreach (record_id, records_with_same_id; id_to_record) {
+
+            // Several read groups/program records can share the 
+            // common identifier, and each one of them can be 
+            // presented in several files.
+            // 
+            // If read groups/program records are equal 
+            // (i.e. all fields are equal) then they are treated 
+            // as a single read group/program record
+            // 
+            // Here we iterate over those read groups/program records
+            // and files where they were seen, renaming identifiers
+            // in order to avoid collisions where necessary.
+            foreach (rec, file_ids; records_with_same_id) {
+                string new_id = record_id;
+                if (record_id in dict) {
+                    // if already used ID is encountered,
+                    // find unused ID by adding ".N" to the old ID
+                    for (int i = 1; ; ++i) {
+                        new_id = record_id ~ "." ~ to!string(i);
+                        if (new_id !in dict) {
+                            break;
+                        }
+                    }
+                }
+
+                // save mapping
+                foreach (file_id; file_ids) {
+                    record_id_map[file_id][record_id] = new_id;
+                }
+
+                // update merged header
+                rec.identifier = new_id;
+                dict.add(rec);
+            }
+        }
+    }
+
+    void mergeReadGroups() {
+        Tuple!(RgLine, size_t)[] readgroups_with_file_ids;
+        for (size_t i = 0; i < _len; i++)
+            foreach (rg; _headers[i].read_groups.values)
+                readgroups_with_file_ids ~= tuple(rg, i);
+
+        auto dict = new RgLineDictionary();
+
+        mergeHeaderLines(readgroups_with_file_ids, _len,
+                         dict, readgroup_id_map);
+
+        merged_header.read_groups = dict;
+    }
+
+    void mergeProgramRecords() {
+        Tuple!(PgLine, size_t)[] programs_with_file_ids;
+        for (size_t i = 0; i < _len; i++)
+            foreach (pg; _headers[i].programs.values)
+                programs_with_file_ids ~= tuple(pg, i);
+
+        auto vertices = partition!"a[0].previous_program !is null"(programs_with_file_ids);
+        programs_with_file_ids = programs_with_file_ids[0 .. $ - vertices.length];
+
+        auto dict = new PgLineDictionary();
+
+        while (!vertices.empty) {
+            // populates dict and program_id_map
+            mergeHeaderLines!PgLine(vertices, _len, dict, program_id_map); 
+
+            // find children of current vertices
+            auto old_ids = map!"tuple(a[0].identifier, a[1])"(vertices);
+            vertices = partition!((Tuple!(PgLine, size_t) a) {
+                                    return !canFind(old_ids, tuple(a[0].previous_program, a[1]));
+                                  })(programs_with_file_ids);
+            programs_with_file_ids = programs_with_file_ids[0 .. $ - vertices.length];
+
+            // update PP tags in children
+            
+            foreach (ref pg_with_file_id; vertices) {
+                auto pg = pg_with_file_id[0];
+                auto file_id = pg_with_file_id[1];
+               
+                if (pg.previous_program !is null && 
+                    pg.previous_program in program_id_map[file_id]) 
+                {
+                    auto new_id = program_id_map[file_id][pg.previous_program];
+                    if (new_id != pg.previous_program) {
+                        pg.previous_program = new_id;
+                    }
+                }
+                
+                pg_with_file_id = tuple(pg, file_id);
+            }
+        }
+
+        merged_header.programs = dict;
+    }
+
+    void mergeComments() {
+        merged_header.comments = join(map!"a.comments"(_headers));
+    }
+}
+
+unittest {
+    import std.stdio;
+    import std.algorithm;
+
+    writeln("Testing SAM header merging...");
+    auto h1 = new SamHeader();
+    auto h2 = new SamHeader();
+    auto h3 = new SamHeader();
+    h1.sorting_order = SortingOrder.coordinate;
+    h2.sorting_order = SortingOrder.coordinate;
+    h3.sorting_order = SortingOrder.coordinate;
+ 
+    // ---- fill reference sequence dictionaries -------------------------------
+
+    h1.sequences.add(SqLine("A", 100));
+    h1.sequences.add(SqLine("B", 200));
+    h1.sequences.add(SqLine("C", 300));
+
+    h2.sequences.add(SqLine("D", 100));
+    h2.sequences.add(SqLine("B", 200));
+    h2.sequences.add(SqLine("E", 300));
+
+    h3.sequences.add(SqLine("A", 100));
+    h3.sequences.add(SqLine("E", 300));
+    h3.sequences.add(SqLine("C", 300));
+
+    // expected:        A       B       C
+    //                      D       E
+
+    // ---- add a few read group records ---------------------------------------
+
+    h1.read_groups.add(RgLine("A", "CN1"));
+    h1.read_groups.add(RgLine("C", "CN3"));
+
+    h2.read_groups.add(RgLine("B", "CN2"));
+    h2.read_groups.add(RgLine("C", "CN4"));
+
+    h3.read_groups.add(RgLine("B", "CN2"));
+    h3.read_groups.add(RgLine("A", "CN4"));
+
+    // ---- add some program records with a lot of name clashes ----------------
+
+    h1.programs.add(PgLine("A", "X"));             //        .> C
+    h1.programs.add(PgLine("B", "Y", "", "A"));    //       /
+    h1.programs.add(PgLine("C", "Z", "", "B"));    // A -> B -> D
+    h1.programs.add(PgLine("D", "T", "", "B"));    //
+
+    h2.programs.add(PgLine("B", "Z"));             // B -> A -> C
+    h2.programs.add(PgLine("A", "Y", "", "B"));
+    h2.programs.add(PgLine("C", "T", "", "A"));
+
+    h3.programs.add(PgLine("D", "Y"));             // D -> C -> B
+    h3.programs.add(PgLine("C", "T", "", "D"));
+    h3.programs.add(PgLine("B", "X", "", "C"));
+
+    // expected result:
+    //
+    //            .> C.1
+    //           /
+    //  A -> B.1  -> D.1
+    //
+    //  B -> A.1 -> C.2
+    //
+    //  D -> C -> B.2
+
+    // ---- add some comments - just for the sake of completeness --------------
+
+    h1.comments ~= "abc";
+    h2.comments ~= ["def", "ghi"];
+    
+    // ------------------ merge these three headers ----------------------------
+
+    {
+    auto merger = new SamHeaderMerger([h1, h2, h3]);
+    auto h = merger.merged_header;
+
+    assert(h.sorting_order == SortingOrder.coordinate);
+
+    assert(equal(h.sequences.values, 
+                 [SqLine("A", 100), SqLine("D", 100), SqLine("B", 200),
+                  SqLine("E", 300), SqLine("C", 300)]));
+
+    assert(h.comments == ["abc", "def", "ghi"]);
+
+    assert(equal(sort(array(map!"a.identifier"(h.programs.values))),
+                 ["A", "A.1", "B", "B.1", "B.2", "C", "C.1", "C.2", "D", "D.1"]));
+
+    assert(equal(sort(array(map!"a.identifier"(h.read_groups.values))),
+                 ["A", "A.1", "B", "C", "C.1"]));
+    }
+
+    // sambamba issue 110
+    {
+    auto h0 = new SamHeader();
+    h0.sorting_order = SortingOrder.coordinate;
+    h0.sequences.add(SqLine("A", 100));
+
+    auto merger = new SamHeaderMerger([h0]);
+    auto h = merger.merged_header;
+    assert(equal(h.sequences.values, h0.sequences.values));
+    }
+}
diff --git a/bio/bam/utils/value.d b/bio/bam/utils/value.d
new file mode 100644
index 0000000..8f787fe
--- /dev/null
+++ b/bio/bam/utils/value.d
@@ -0,0 +1,121 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.utils.value;
+
+import bio.bam.tagvalue;
+import std.exception;
+import std.array;
+
+private {
+    static ubyte* arrayPointer(ref Value v) {
+        // if value contains array, as a tagged union, it has the following layout:
+        //
+        // Value = size_t
+        //         void*
+        //         other stuff...
+        return cast(ubyte*)(*(cast(size_t*)(&v) + 1));
+    }
+}
+
+/// Emplace value at address $(D p).
+/// Assumes that enough memory is allocated at that address.
+/// (You can find needed amount of memory with $(D sizeInBytes) function)
+void emplaceValue(ubyte* p, ref Value v) {
+    enforce(!v.is_nothing, "null value can't be stored in BAM");
+
+    auto tag = v.tag;
+    auto size = tag >> 5; // element size
+
+    if ((tag & 1) == 0) { // primitive type
+        *p++ = cast(ubyte)v.bam_typeid;
+
+        p[0 .. size] = (cast(ubyte*)(&v))[0 .. size];
+    } else {
+        
+        auto bytes = *cast(size_t*)(&v) * (tag >> 5);
+
+        if (v.is_string) {
+            *p++ = cast(ubyte)v.bam_typeid;
+            
+            p[0 .. bytes] = arrayPointer(v)[0 .. bytes];
+            p[bytes] = 0; // trailing zero
+
+        } else {
+            *p++ = cast(ubyte)'B';
+            *p++ = cast(ubyte)v.bam_typeid;
+
+            *(cast(uint*)p) = cast(uint)(bytes / size); // # of elements
+            p += uint.sizeof;
+
+            p[0 .. bytes] = arrayPointer(v)[0 .. bytes];
+        }
+    }
+}
+
+/// Put a value to an Appender!(ubyte[]) struct
+void emplaceValue(ref Appender!(ubyte[]) appender, ref Value v) {
+    enforce(!v.is_nothing, "null value can't be stored in BAM");
+
+    auto tag = v.tag;
+    auto size = tag >> 5; // element size
+
+    if ((tag & 1) == 0) { // primitive type
+        appender.put(cast(ubyte)v.bam_typeid);
+        appender.put((cast(ubyte*)(&v))[0 .. size]);
+    } else {
+        
+        auto bytes = *cast(size_t*)(&v) * (tag >> 5);
+
+        if (v.is_string) {
+            appender.put(cast(ubyte)v.bam_typeid);
+            appender.put(arrayPointer(v)[0..bytes]); 
+            appender.put(cast(ubyte)0); // trailing zero
+        } else {
+            appender.put(cast(ubyte)'B');
+            appender.put(cast(ubyte)v.bam_typeid);
+            uint number_of_elems = cast(uint)(bytes / size);
+            appender.put((cast(ubyte*)(&number_of_elems))[0..4]);
+            appender.put(arrayPointer(v)[0 .. bytes]);
+        }
+    }
+}
+
+/// Calculate size in bytes which value will consume in BAM file.
+size_t sizeInBytes(ref Value v) {
+    enforce(!v.is_nothing, "null value can't be stored in BAM");
+
+    auto tag = v.tag;
+
+    if ((tag & 1) == 0) {
+        return char.sizeof + (tag >> 5); // primitive type
+    } 
+
+    auto bytes = *cast(size_t*)(&v) * (tag >> 5);
+
+    if (v.is_string) {
+        return char.sizeof + bytes + char.sizeof; // trailing zero
+    } else {
+        return 2 * char.sizeof + uint.sizeof + bytes;
+    }
+}
diff --git a/bio/bam/validation/alignment.d b/bio/bam/validation/alignment.d
new file mode 100644
index 0000000..ac4b9fa
--- /dev/null
+++ b/bio/bam/validation/alignment.d
@@ -0,0 +1,562 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.validation.alignment;
+
+public import bio.bam.read;
+public import bio.bam.tagvalue;
+import bio.core.utils.algo;
+
+import std.algorithm;
+import std.ascii;
+import std.conv;
+import std.typetuple;
+
+/**
+    Alignment validation error types.
+
+    InvalidCigar error is accompanied by some CigarError,
+    InvalidTags is accompanied by some TagError.
+*/
+enum AlignmentError {
+    EmptyReadName, ///
+    TooLongReadName, /// 
+    ReadNameContainsInvalidCharacters, ///
+    PositionIsOutOfRange, /// 
+    QualityDataContainsInvalidElements, ///
+    InvalidCigar, ///
+    InvalidTags, ///
+    DuplicateTagKeys ///
+}
+
+/// CIGAR string validation error types.
+enum CigarError {
+    InternalHardClipping, /// 
+    InternalSoftClipping, ///
+    InconsistentLength ///
+}
+
+/// Auxiliary data validation error types.
+///
+/// Refers to an individual tag.
+enum TagError {
+    EmptyString, ///
+    EmptyHexadecimalString, ///
+    NonPrintableString, ///
+    NonPrintableCharacter, ///
+    InvalidHexadecimalString, ///
+    ExpectedIntegerValue, ///
+    ExpectedStringValue, ///
+    InvalidValueType, ///
+    InvalidQualityString, ///
+    ExpectedStringWithSameLengthAsSequence ///
+}
+
+/// Designates pair of predefined key from SAM/BAM specification
+/// and expected type of tags with that key.
+struct TagType(string key, T) {
+    enum Key = key;
+    alias T Type;
+}
+
+/// Compile-time available information about predefined tags
+alias TypeTuple!(TagType!("AM", int),
+                 TagType!("AS", int),
+                 TagType!("BC", string),
+                 TagType!("BQ", string),
+                 TagType!("CC", string),
+                 TagType!("CM", int),
+                 TagType!("CP", int),
+                 TagType!("CQ", string),
+                 TagType!("CS", string),
+                 TagType!("E2", string),
+                 TagType!("FI", int),
+                 TagType!("FS", string),
+                 TagType!("FZ", ushort[]),
+                 TagType!("LB", string),
+                 TagType!("H0", int),
+                 TagType!("H1", int),
+                 TagType!("H2", int),
+                 TagType!("HI", int),
+                 TagType!("IH", int),
+                 TagType!("MD", string),
+                 TagType!("MQ", int),
+                 TagType!("NH", int),
+                 TagType!("NM", int),
+                 TagType!("OQ", string),
+                 TagType!("OP", int),
+                 TagType!("OC", string),
+                 TagType!("PG", string),
+                 TagType!("PQ", int),
+                 TagType!("PU", string),
+                 TagType!("Q2", string),
+                 TagType!("R2", string),
+                 TagType!("RG", string),
+                 TagType!("SM", int),
+                 TagType!("TC", int),
+                 TagType!("U2", string),
+                 TagType!("UQ", int))
+    PredefinedTags;
+
+
+private template GetKey(U) {
+    enum GetKey = U.Key;
+}
+
+private template PredefinedTagTypeHelper(string s) {
+    alias PredefinedTags[staticIndexOf!(s, staticMap!(GetKey, PredefinedTags))] PredefinedTagTypeHelper;
+}
+
+/// Get predefined tag type by its key, in compile-time.
+template PredefinedTagType(string s) {
+    alias PredefinedTagTypeHelper!(s).Type PredefinedTagType;
+}
+
+/**
+  Abstract class encapsulating visitation of SAM header elements.
+*/
+abstract class AbstractAlignmentValidator {
+    /// Start validation process.
+    ///
+    /// Passing by reference is not only for doing less copying, 
+    /// one might want to attempt to fix invalid fields 
+    /// in onError() methods.
+    void validate(ref BamRead alignment) {
+        _visitAlignment(alignment);
+    }
+
+    /** Implement those methods to define your own behaviour.
+
+        During validation process, in case of an error the corresponding
+        method gets called, and is provided the object where the error occurred,
+        and type of the error. Objects are passed by reference so that they
+        can be changed (fixed / cleaned up / etc.)
+
+        If onError() returns true, that means to continue validation process
+        for this particular entity. Otherwise, all other validation checks are
+        skipped and next entity is processed.
+    */
+    abstract bool onError(ref BamRead al, AlignmentError error); 
+    abstract bool onError(ref BamRead al, CigarError error); /// ditto
+    abstract bool onError(string key, const ref Value value, TagError error); /// ditto
+
+private:
+
+    // Method names are a bit misleading,
+    // their return value is NOT whether a field is invalid or not
+    // but rather whether onError() handlers decide to stop validation
+    // when the field is invalid.
+
+    bool invalidReadName(ref BamRead al) {
+        // Read name (a.k.a. QNAME) must =~ /^[!-?A-~]{1,255}$/ 
+        // according to specification.
+        if (al.name.length == 0) {
+            if (!onError(al, AlignmentError.EmptyReadName)) return true;
+        } else if (al.name.length > 255) {
+            if (!onError(al, AlignmentError.TooLongReadName)) return true;
+        } else {
+            foreach (char c; al.name) 
+            {
+                if ((c < '!') || (c > '~') || (c == '@')) {
+                    if (!onError(al, AlignmentError.ReadNameContainsInvalidCharacters)) {
+                        return true;
+                    } else {
+                        break;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    bool invalidPosition(ref BamRead al) {
+        /// Check that position is in range [-1 .. 2^29 - 2]
+        if (al.position < -1 || al.position > ((1<<29) - 2)) {
+            if (!onError(al, AlignmentError.PositionIsOutOfRange)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    bool invalidQualityData(ref BamRead al) {
+        /// Check quality data
+        if (!all!"a == 0xFF"(al.base_qualities) &&
+            !all!"0 <= a && a <= 93"(al.base_qualities)) 
+        {
+            if (!onError(al, AlignmentError.QualityDataContainsInvalidElements)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    static bool internalHardClipping(ref BamRead al) {
+        return (al.cigar.length > 2 && 
+                any!"a.type == 'H'"(al.cigar[1..$-1]));
+    }
+
+    static bool internalSoftClipping(ref BamRead al) {
+        if (al.cigar.length <= 2) return false;
+
+        auto cigar = al.cigar;
+
+        /// strip H operations from ends
+        if (cigar[0].type == 'H') {
+            cigar = cigar[1..$];
+        }
+        if (cigar[$-1].type == 'H') {
+            cigar = cigar[0..$-1];
+        }
+
+        /// check that S operations are at the ends only
+        return (cigar.length > 2 &&
+                any!"a.type == 'S'"(cigar[1..$-1]));
+    } 
+
+    //  Sum of M/I/S/=/X operations must be equal to the sequence length
+    //  if both sequence and CIGAR string are presented.
+    static bool inconsistentLength(ref BamRead al) {
+        return (al.sequence_length > 0 &&
+                al.sequence_length != reduce!`a + b`(0, 
+                                        map!`a.length`(
+                                          filter!`canFind("MIS=X", a.type)`(
+                                            al.cigar))));
+    }
+ 
+    bool invalidCigar(ref BamRead al) {
+        
+        if (al.cigar.length == 0) return false;
+
+        static string check(string s) {
+            import std.ascii : toUpper;
+            return (`if (`~s.dup~`(al)`~
+                   `    && !onError(al, CigarError.`~(cast(char)(s[0]-32))~s[1..$]~`)`~
+                   `    && (called_on_error || onError(al, AlignmentError.InvalidCigar)))`~
+                   `{`~
+                   `    return true;`~
+                   `}`).idup;
+        }
+
+        bool called_on_error = false;
+
+        mixin(check("internalHardClipping"));
+        mixin(check("internalSoftClipping"));
+        mixin(check("inconsistentLength"));
+
+        return false;
+    }
+   
+    // Check tags, a lot of them are predefined in the specification
+    // and have to satisfy certain requirements.
+    bool invalidTags(ref BamRead al) {
+
+        bool all_tags_are_good = true;
+        
+        void someTagIsBad() {
+            if (all_tags_are_good) {
+                if (!onError(al, AlignmentError.InvalidTags)) return;
+            }
+            all_tags_are_good = false;
+        }
+
+        /// Check that all tag keys are distinct.
+
+        bool all_distinct = true;
+
+        // Optimize for small number of tags
+        ushort[256] keys = void;
+        size_t i = 0;
+
+        // Check each tag in turn.
+        foreach (k, v; al) {
+            if (!isValid(k, v, al)) {
+                someTagIsBad();
+            }
+           
+            if (i < keys.length) {
+                keys[i] = *cast(ushort*)(k.ptr);
+
+                if (all_distinct) {
+                    for (size_t j = 0; j < i; ++j) {
+                        if (keys[i] == keys[j]) {
+                            all_distinct = false;
+                            break;
+                        }
+                    }
+                }
+
+                i += 1;
+            } else {
+                if (all_distinct) {
+                    // must be exactly one
+                    int found = 0;
+                    foreach (k2, v2; al) {
+                        if (*cast(ushort*)(k2.ptr) == *cast(ushort*)(k.ptr)) {
+                            if (found == 1) {
+                                all_distinct = false;
+                                break;
+                            } else {
+                                ++found;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+       
+        if (!all_distinct) {
+            if (!onError(al, AlignmentError.DuplicateTagKeys)) return true;
+        }
+
+        return false;
+    }
+
+    void _visitAlignment(ref BamRead al) {
+        if (invalidReadName(al)) return;
+        if (invalidPosition(al)) return;
+        if (invalidQualityData(al)) return;
+        if (invalidCigar(al)) return;
+        if (invalidTags(al)) return;
+    }
+
+    bool isValid(string key, const ref Value value, const ref BamRead al) {
+
+        bool result = true;
+
+        if (value.is_hexadecimal_string()) {
+            auto str = cast(string)value;
+            if (str.length == 0) {
+                if (!onError(key, value, TagError.EmptyHexadecimalString)) {
+                    return false;
+                }
+                result = false;
+            }
+            /// check that it contains only 0..9a-fA-F characters
+            if (!all!(isHexDigit)(str)) {
+                if (!onError(key, value, TagError.InvalidHexadecimalString)) {
+                    return false;
+                }
+                result = false;
+            }
+        } else if (value.is_character()) {
+            /// character must be [!-~]
+            auto c = cast(char)value;
+            if (!(c >= '!' && c <= '~')) {
+                if (!onError(key, value, TagError.NonPrintableCharacter)) {
+                    return false;
+                }
+                result = false;
+            }
+        } else if (value.is_string()) {
+            auto str = cast(string)value; 
+            if (str.length == 0) {
+                if (!onError(key, value, TagError.EmptyString)) {
+                    return false;
+                }
+                result = false;
+            }
+            /// string must be [ !-~]+
+            if (!all!"a >= ' ' && a <= '~'"(str)) {
+                if (!onError(key, value, TagError.NonPrintableString)) {
+                    return false;
+                }
+                result = false;
+            }
+        }
+
+        /// check various tags from SAM/BAM specification
+        if (!additionalChecksIfTheTagIsPredefined(key, value, al)) {
+            result = false;
+        }
+
+        return result;
+    }
+
+    // There're some requirements for predefined tags to be checked
+    // such as type, length in some cases, or even some regular expression.
+    // See page 6 of SAM/BAM specification.
+    bool additionalChecksIfTheTagIsPredefined(string key, const ref Value value,
+                                              const ref BamRead al) 
+    {
+        bool result = true;
+
+        // Creates a switch for all predefined tag keys.
+        string switchTagKey() {
+            char[] cs;
+            foreach (t; PredefinedTags) {
+                cs ~= `case "`~t.Key~`":`~
+                      `  if (!checkTagValue!"`~t.Key~`"(value, al)) {`~
+                      `    result = false;`~
+                      `  }`~
+                      `  break;`.dup;
+            }
+            return "switch (key) { " ~ cs.idup ~ " default : break; }";
+        }
+
+        mixin(switchTagKey());
+
+        return result;
+    }
+
+    // Supposed to be inlined in the above switch
+    bool checkTagValue(string s)(const ref Value value, const ref BamRead al) {
+
+        bool result = true;
+        
+        /// 1. Check type.
+
+        static if (is(PredefinedTagType!s == int)) {
+            if (!value.is_integer) {
+                if (!onError(s, value, TagError.ExpectedIntegerValue)) {
+                    return false;
+                }
+                result = false;
+            }
+        } else if (is(PredefinedTagType!s == string)) {
+            // Notice that there are no 'H'-typed predefined tags,
+            // and they are almost unused and therefore are not likely
+            // to appear in the future. 
+            if (!value.is_string || value.bam_typeid == 'H') {
+                if (!onError(s, value, TagError.ExpectedStringValue)) {
+                    return false;
+                }
+                result = false;
+            }
+        } else {
+            if (value.tag != GetTypeId!(PredefinedTagType!s)) {
+                if (!onError(s, value, TagError.InvalidValueType)) {
+                    return false;
+                }
+                result = false;
+            }
+        }
+        
+        /// 2. For tags which contain quality as a string,
+        ///    check that all characters are valid 
+        
+        static if (staticIndexOf!(s, "CQ", "E2", "OQ", "Q2", "U2") != -1) {
+            auto str = cast(string)value;
+            if (str != "*" && !all!"a >= '!' && a <= '~'"(str)) {
+                if (!onError(s, value, TagError.InvalidQualityString)) {
+                    return false;
+                }
+                result = false;
+            }
+        }
+
+        /// 3. In a couple of cases values are required to be 
+        ///    of the same length as the read sequence.
+
+        static if (staticIndexOf!(s, "BQ", "E2") != -1) {
+            if ((cast(string)value).length != al.sequence_length) {
+                if (!onError(s, value, TagError.ExpectedStringWithSameLengthAsSequence)) {
+                    return false;
+                }
+            }
+        }
+
+
+        /// 4. MD tag ought to: a) match /^[0-9]+(([A-Z]|\^[A-Z]+)[0-9]+)*$/
+        ///                     b) match CIGAR string (TODO?)
+        
+        static if (s == "MD") {
+
+            /// a) check regular expression
+
+            auto s = cast(string)value;
+            bool valid = true;
+            if (s.length == 0) valid = false;
+            if (!isDigit(s[0])) valid = false;
+            size_t i = 1;
+            while (i < s.length && isDigit(s[i])) 
+                ++i;
+            while (i < s.length) {
+                if (isUpper(s[i])) {
+                    ++i; // [A-Z]
+                } else if (s[i] == '^') { // ^[A-Z]+
+                    ++i;
+                    if (i == s.length || !isUpper(s[i])) {
+                        valid = false;
+                        break;
+                    }
+                    while (i < s.length && isUpper(s[i]))
+                        ++i;
+                } else {
+                    valid = false;
+                    break;
+                }
+                // now [0-9]+
+                if (i == s.length || !isDigit(s[i])) {
+                    valid = false;
+                    break;
+                }
+                while (i < s.length && isDigit(s[i]))
+                    ++i;
+            }
+
+            if (i < s.length) {
+                valid = false;
+            }
+
+            if (!valid) result = false;
+        }
+
+        return result;
+    }
+}
+
+final private class BooleanValidator : AbstractAlignmentValidator {
+
+    bool result;
+
+    override void validate(ref BamRead al) {
+        result = true;
+        super.validate(al);
+    }
+
+    override bool onError(ref BamRead al, AlignmentError e) {
+        return (result = false);
+    }
+
+    override bool onError(ref BamRead al, CigarError e) {
+        return (result = false);
+    }
+
+    override bool onError(string key, const ref Value val, TagError e) {
+        return (result = false);
+    }
+
+}
+
+private static BooleanValidator booleanValidator;
+
+static this() {
+    booleanValidator = new BooleanValidator();
+}
+
+/// Check if alignment is valid
+bool isValid(BamRead alignment) { 
+    booleanValidator.validate(alignment);
+    return booleanValidator.result;
+}
diff --git a/bio/bam/validation/samheader.d b/bio/bam/validation/samheader.d
new file mode 100644
index 0000000..9f64529
--- /dev/null
+++ b/bio/bam/validation/samheader.d
@@ -0,0 +1,446 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/**
+  Module for SAM header validation.
+  
+  In order to implement your own validation behaviour,
+  subclass AbstractSamHeaderValidator and define your own 
+  onError() methods.
+*/
+module bio.bam.validation.samheader;
+
+public import bio.sam.header;
+import bio.core.utils.algo;
+
+import std.algorithm;
+import std.functional;
+import std.ascii;
+
+/// SAM header validation error types.
+///
+/// Each Invalid??Line error is accompanied by 
+/// corresponding ??LineError.
+enum SamHeaderError {
+    InvalidSqLine,
+    InvalidPgLine,
+    InvalidRgLine,
+    InvalidFormatVersion
+}
+
+/// @SQ line validation error types.
+enum SqLineError {
+    MissingSequenceName,
+    InvalidSequenceName,
+    SequenceLengthOutOfRange
+}
+
+/// @RG line validation error types.
+enum RgLineError {
+    UnknownPlatform,
+    MissingIdentifier
+}
+
+/// @PG line validation error types.
+enum PgLineError {
+    NoMatchForPreviousProgram,
+    MissingIdentifier
+}
+
+/**
+  Abstract class encapsulating visitation of SAM header elements.
+*/
+abstract class AbstractSamHeaderValidator {
+
+    /// Start validation process.
+    ///
+    /// Passing by reference is not only for doing less copying, 
+    /// one might want to attempt to fix invalid fields 
+    /// in onError() methods.
+    void validate(ref SamHeader header) {
+        _visitHeader(header);
+    }
+
+    /** Implement those methods to define your own behaviour.
+
+        During validation process, in case of an error the corresponding
+        method gets called, and is provided the object where the error occurred,
+        and type of the error. Objects are passed by reference so that they
+        can be changed (fixed / cleaned up / etc.)
+
+        'False' return value means to stop further validation checks for the 
+        current entity and skip to the next one.
+    */
+    abstract bool onError(ref SamHeader header, SamHeaderError error);
+    abstract bool onError(ref SqLine line, SqLineError error); /// ditto
+    abstract bool onError(ref PgLine line, PgLineError error); /// ditto
+    abstract bool onError(ref RgLine line, RgLineError error); /// ditto
+
+private:
+
+    bool isValid(ref SqLine sq) {
+
+        /// All members of SqLine get initialized.
+        /// Initial value for name is an empty string,
+        /// and for sequence_length is 0
+
+        bool result = true;
+
+        if (sq.name.length == 0) {
+            onError(sq, SqLineError.MissingSequenceName);
+            result = false;
+        } else {
+            // check that sequence_name is /^[!-)+-<>-~][!-~]*$/
+            auto first = sq.name[0];
+            if (!((first >= '!' && first <= ')') ||
+                  (first >= '+' && first <= '<') ||
+                  (first >= '>' && first <= '~'))) 
+            {
+                onError(sq, SqLineError.InvalidSequenceName);
+                result = false;
+            }
+            
+            if (!all!"a >= '!' && a <= '~'"(sq.name[1..$])) {
+                onError(sq, SqLineError.InvalidSequenceName);
+                result = false;
+            }
+        }
+
+        // @SQ/LN must be in range 1 .. (1<<29)-1
+        // (sequence_length is uint)
+        if (sq.length == 0 || sq.length >= (1<<29)) 
+        {
+            onError(sq, SqLineError.SequenceLengthOutOfRange);
+            result = false;
+        }
+        
+        return result;
+    }
+
+    bool isValid(ref RgLine rg) {
+        bool res = canFind(["ILLUMINA",
+                            "SOLID",
+                            "LS454",
+                            "HELICOS",
+                            "PACBIO"],
+                           rg.platform);
+        if (!res) {
+            onError(rg, RgLineError.UnknownPlatform);
+        }
+        
+        if (rg.identifier.length == 0) {
+            onError(rg, RgLineError.MissingIdentifier);
+            res = false;
+        }
+
+        return res;
+    }
+
+    bool isValid(ref PgLine pg) {
+
+        // checking PP tag occurs in _visitHeader()
+        // because it involves other @PG lines
+        
+        if (pg.identifier.length == 0) {
+            onError(pg, PgLineError.MissingIdentifier);
+            return false;
+        }
+        
+        return true;
+    }
+
+    void _visitHeader(ref SamHeader header) {
+
+        foreach (sq; header.sequences) {
+            if (!isValid(sq)) if (!onError(header, SamHeaderError.InvalidSqLine)) return;
+        }
+
+        foreach (rg; header.read_groups) {
+            if (!isValid(rg)) if (!onError(header, SamHeaderError.InvalidRgLine)) return;
+        }
+
+        foreach (pg; header.programs) {
+            if (!isValid(pg)) if (!onError(header, SamHeaderError.InvalidPgLine)) return;
+        }
+
+        if (!checkFormatVersion(header.format_version)) {
+            if (!onError(header, SamHeaderError.InvalidFormatVersion)) return;
+        }
+
+        // uniqueness of @SQ/SN, @RG/ID, and @PG/ID
+        // is guaranteed by design of HeaderLineDictionary template class
+
+        // check that each @PG/PP matches some @PG/ID
+        foreach (pg; header.programs) {
+            if (pg.previous_program.length != 0) {
+                if (!canFind(map!"a.identifier"(header.programs.values),
+                             pg.previous_program)) 
+                {
+                    if (!onError(pg, PgLineError.NoMatchForPreviousProgram)) return;
+                }
+            }
+        }
+    } // visitHeader
+
+} // AbstractSamHeaderValidator
+
+private {
+
+/// check that @HD/VN is /^[0-9]+\.[0-9]+$/ 
+bool checkFormatVersion(string ver) nothrow {
+
+    if (ver.length == 0) {
+        return false; // must be non-empty
+    }
+
+    if (!isDigit(ver[0])) {
+        return false; // and it must start with digit
+    }
+
+    ver = ver[1..$];
+
+    bool passed_dot = false;
+
+    while (ver.length > 0) {
+        if (isDigit(ver[0])) {
+            ver = ver[1..$]; // skip digits
+        } else if (ver[0] == '.') {
+            if (passed_dot) {
+                return false; // must contain only one dot
+            }
+            passed_dot = true;
+            ver = ver[1..$];
+            if (ver.length == 0 || !isDigit(ver[0])) {
+                return false; // there must be a digit after dot
+            }
+        }
+    }
+
+    return true;
+}
+
+unittest {
+    assert(checkFormatVersion("1.53") == true);
+    assert(checkFormatVersion("a.23") == false);
+    assert(checkFormatVersion("1.2.3") == false);
+    assert(checkFormatVersion("5.") == false);
+    assert(checkFormatVersion("3.141592653589793") == true);
+    assert(checkFormatVersion("100500.42") == true);
+    assert(checkFormatVersion("2.71828.3.5") == false);
+}
+
+final private class BooleanValidator : AbstractSamHeaderValidator {
+
+    bool result;
+
+    override void validate(ref SamHeader header) {
+        result = true;
+        super.validate(header);
+    }
+
+    override bool onError(ref SamHeader header, SamHeaderError e) {
+        return (result = false);
+    }
+
+    override bool onError(ref SqLine line, SqLineError e) {
+        return (result = false);
+    }
+
+    override bool onError(ref RgLine header, RgLineError e) {
+        return (result = false);
+    }
+
+    override bool onError(ref PgLine header, PgLineError e) {
+        return (result = false);
+    }
+}
+
+static BooleanValidator booleanValidator;
+
+} // private
+
+static this() {
+    booleanValidator = new BooleanValidator();
+}
+
+/// Check if header is valid
+bool isValid(SamHeader header) {
+    booleanValidator.validate(header);
+    return booleanValidator.result;
+}
+
+unittest {
+    auto valid_header = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tSN:chr1\tLN:1575");
+    assert(isValid(valid_header));
+
+    auto empty_seq_name = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tSN:\tLN:1575");
+    assert(!isValid(empty_seq_name));
+
+    auto missing_seq_name = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tLN:1575");
+    assert(!isValid(missing_seq_name));
+
+    auto missing_seq_length = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tSN:chr1");
+    assert(!isValid(missing_seq_length));
+
+    auto seq_length_out_of_range = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tSN:chr1\tLN:876543210");
+    assert(!isValid(seq_length_out_of_range));
+
+    auto invalid_seq_name = new SamHeader("@HD\tVN:1.3\tSO:coordinate\n at SQ\tSN:chr \tLN:1575");
+    assert(!isValid(invalid_seq_name));
+
+    auto missing_version = new SamHeader("@HD\tSO:coordinate");
+    assert(!isValid(missing_version));
+
+    auto invalid_version_format = new SamHeader("@HD\tVN:6.7.8");
+    assert(!isValid(invalid_version_format));
+
+    auto unknown_platform = new SamHeader("@RG\tID:678\tPL:TROLOLO");
+    assert(!isValid(unknown_platform));
+
+    auto missing_rg_id = new SamHeader("@RG\tPL:ILLUMINA");
+    assert(!isValid(missing_rg_id));
+
+    auto missing_pg_id = new SamHeader("@PG\tPN:bwa\tVN:0.5.9-r16");
+    assert(!isValid(missing_pg_id));
+
+    auto unknown_previous_program = new SamHeader("@PG\tID:bwa_aln_fastq\tPN:bwa\tPP:bwa_index");
+    assert(!isValid(unknown_previous_program));
+
+    auto another_valid_header = new SamHeader(q"[@HD	VN:1.0	SO:coordinate
+ at SQ	SN:1	LN:249250621	M5:1b22b98cdeb4a9304cb5d48026a85128	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:2	LN:243199373	M5:a0d9851da00400dec1098a9255ac712e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:3	LN:198022430	M5:fdfd811849cc2fadebc929bb925902e5	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:4	LN:191154276	M5:23dccd106897542ad87d2765d28a19a1	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:5	LN:180915260	M5:0740173db9ffd264d728f32784845cd7	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:6	LN:171115067	M5:1d3a93a248d92a729ee764823acbbc6b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:7	LN:159138663	M5:618366e953d6aaad97dbe4777c29375e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:8	LN:146364022	M5:96f514a9929e410c6651697bded59aec	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:9	LN:141213431	M5:3e273117f15e0a400f01055d9f393768	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:10	LN:135534747	M5:988c28e000e84c26d552359af1ea2e1d	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:11	LN:135006516	M5:98c59049a2df285c76ffb1c6db8f8b96	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:12	LN:133851895	M5:51851ac0e1a115847ad36449b0015864	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:13	LN:115169878	M5:283f8d7892baa81b510a015719ca7b0b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:14	LN:107349540	M5:98f3cae32b2a2e9524bc19813927542e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:15	LN:102531392	M5:e5645a794a8238215b2cd77acb95a078	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:16	LN:90354753	M5:fc9b1a7b42b97a864f56b348b06095e6	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:17	LN:81195210	M5:351f64d4f4f9ddd45b35336ad97aa6de	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:18	LN:78077248	M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:19	LN:59128983	M5:1aacd71f30db8e561810913e0b72636d	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:20	LN:63025520	M5:0dec9660ec1efaaf33281c0d5ea2560f	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:21	LN:48129895	M5:2979a6085bfe28e3ad6f552f361ed74d	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:22	LN:51304566	M5:a718acaa6135fdca8357d5bfe94211dd	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:X	LN:155270560	M5:7e0e2e580297b7764e31dbc80c2540dd	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:Y	LN:59373566	M5:1fa3474750af0948bdf97d5a0ee52e51	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:MT	LN:16569	M5:c68f52674c9fb33aef52dcf399755519	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000207.1	LN:4262	M5:f3814841f1939d3ca19072d9e89f3fd7	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000226.1	LN:15008	M5:1c1b2cd1fccbc0a99b6a447fa24d1504	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000229.1	LN:19913	M5:d0f40ec87de311d8e715b52e4c7062e1	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000231.1	LN:27386	M5:ba8882ce3a1efa2080e5d29b956568a4	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000210.1	LN:27682	M5:851106a74238044126131ce2a8e5847c	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000239.1	LN:33824	M5:99795f15702caec4fa1c4e15f8a29c07	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000235.1	LN:34474	M5:118a25ca210cfbcdfb6c2ebb249f9680	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000201.1	LN:36148	M5:dfb7e7ec60ffdcb85cb359ea28454ee9	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000247.1	LN:36422	M5:7de00226bb7df1c57276ca6baabafd15	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000245.1	LN:36651	M5:89bc61960f37d94abf0df2d481ada0ec	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000197.1	LN:37175	M5:6f5efdd36643a9b8c8ccad6f2f1edc7b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000203.1	LN:37498	M5:96358c325fe0e70bee73436e8bb14dbd	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000246.1	LN:38154	M5:e4afcd31912af9d9c2546acf1cb23af2	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000249.1	LN:38502	M5:1d78abec37c15fe29a275eb08d5af236	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000196.1	LN:38914	M5:d92206d1bb4c3b4019c43c0875c06dc0	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000248.1	LN:39786	M5:5a8e43bec9be36c7b49c84d585107776	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000244.1	LN:39929	M5:0996b4475f353ca98bacb756ac479140	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000238.1	LN:39939	M5:131b1efc3270cc838686b54e7c34b17b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000202.1	LN:40103	M5:06cbf126247d89664a4faebad130fe9c	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000234.1	LN:40531	M5:93f998536b61a56fd0ff47322a911d4b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000232.1	LN:40652	M5:3e06b6741061ad93a8587531307057d8	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000206.1	LN:41001	M5:43f69e423533e948bfae5ce1d45bd3f1	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000240.1	LN:41933	M5:445a86173da9f237d7bcf41c6cb8cc62	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000236.1	LN:41934	M5:fdcd739913efa1fdc64b6c0cd7016779	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000241.1	LN:42152	M5:ef4258cdc5a45c206cea8fc3e1d858cf	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000243.1	LN:43341	M5:cc34279a7e353136741c9fce79bc4396	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000242.1	LN:43523	M5:2f8694fc47576bc81b5fe9e7de0ba49e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000230.1	LN:43691	M5:b4eb71ee878d3706246b7c1dbef69299	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000237.1	LN:45867	M5:e0c82e7751df73f4f6d0ed30cdc853c0	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000233.1	LN:45941	M5:7fed60298a8d62ff808b74b6ce820001	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000204.1	LN:81310	M5:efc49c871536fa8d79cb0a06fa739722	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000198.1	LN:90085	M5:868e7784040da90d900d2d1b667a1383	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000208.1	LN:92689	M5:aa81be49bf3fe63a79bdc6a6f279abf6	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000191.1	LN:106433	M5:d75b436f50a8214ee9c2a51d30b2c2cc	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000227.1	LN:128374	M5:a4aead23f8053f2655e468bcc6ecdceb	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000228.1	LN:129120	M5:c5a17c97e2c1a0b6a9cc5a6b064b714f	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000214.1	LN:137718	M5:46c2032c37f2ed899eb41c0473319a69	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000221.1	LN:155397	M5:3238fb74ea87ae857f9c7508d315babb	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000209.1	LN:159169	M5:f40598e2a5a6b26e84a3775e0d1e2c81	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000218.1	LN:161147	M5:1d708b54644c26c7e01c2dad5426d38c	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000220.1	LN:161802	M5:fc35de963c57bf7648429e6454f1c9db	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000213.1	LN:164239	M5:9d424fdcc98866650b58f004080a992a	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000211.1	LN:166566	M5:7daaa45c66b288847b9b32b964e623d3	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000199.1	LN:169874	M5:569af3b73522fab4b40995ae4944e78e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000217.1	LN:172149	M5:6d243e18dea1945fb7f2517615b8f52e	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000216.1	LN:172294	M5:642a232d91c486ac339263820aef7fe0	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000215.1	LN:172545	M5:5eb3b418480ae67a997957c909375a73	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000205.1	LN:174588	M5:d22441398d99caf673e9afb9a1908ec5	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000219.1	LN:179198	M5:f977edd13bac459cb2ed4a5457dba1b3	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000224.1	LN:179693	M5:d5b2fc04f6b41b212a4198a07f450e20	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000223.1	LN:180455	M5:399dfa03bf32022ab52a846f7ca35b30	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000195.1	LN:182896	M5:5d9ec007868d517e73543b005ba48535	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000212.1	LN:186858	M5:563531689f3dbd691331fd6c5730a88b	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000222.1	LN:186861	M5:6fe9abac455169f50470f5a6b01d0f59	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000200.1	LN:187035	M5:75e4c8d17cd4addf3917d1703cacaf25	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000193.1	LN:189789	M5:dbb6e8ece0b5de29da56601613007c2a	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000194.1	LN:191469	M5:6ac8f815bf8e845bb3031b73f812c012	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000225.1	LN:211173	M5:63945c3e6962f28ffd469719a747e73c	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:GL000192.1	LN:547496	M5:325ba9e808f669dfeee210fdd7b470ac	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:NC_007605	LN:171823	M5:6743bd63b3ff2b5b8985d8933c53290a	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at SQ	SN:hs37d5	LN:35477943	M5:5b6a4b3a81a2d3c134b7d14bf6ad39f1	UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz        AS:NCBI37       SP:Human
+ at RG	ID:ERR016155	LB:HUMgdtRAGDIAAPE	SM:HG00125	PI:488	CN:BGI	PL:ILLUMINA	DS:SRP001294
+ at RG	ID:ERR016156	LB:HUMgdtRAGDIAAPE	SM:HG00125	PI:489	CN:BGI	PL:ILLUMINA	DS:SRP001294
+ at RG	ID:ERR016157	LB:HUMgdtRAGDIAAPE	SM:HG00125	PI:488	CN:BGI	PL:ILLUMINA	DS:SRP001294
+ at PG	ID:bwa_index	PN:bwa	VN:0.5.9-r16	CL:bwa index -a bwtsw $reference_fasta
+ at PG	ID:bwa_aln_fastq	PN:bwa	PP:bwa_index	VN:0.5.9-r16	CL:bwa aln -q 15 -f $sai_file $reference_fasta $fastq_file
+ at PG	ID:bwa_sam	PN:bwa	PP:bwa_aln_fastq	VN:0.5.9-r16	CL:bwa sampe -a 1464 -r $rg_line -f $sam_file $reference_fasta $sai_file(s) $fastq_file(s)
+ at PG	ID:bwa_sam.1	PN:bwa	PP:bwa_aln_fastq	VN:0.5.9-r16	CL:bwa sampe -a 1467 -r $rg_line -f $sam_file $reference_fasta $sai_file(s) $fastq_file(s)
+ at PG	ID:sam_to_fixed_bam	PN:samtools	PP:bwa_sam	VN:0.1.17 (r973:277)	CL:samtools view -bSu $sam_file | samtools sort -n -o - samtools_nsort_tmp | samtools fixmate /dev/stdin /dev/stdout | samtools sort -o - samtools_csort_tmp | samtools fillmd -u - $reference_fasta > $fixed_bam_file
+ at PG	ID:sam_to_fixed_bam.1	PN:samtools	PP:bwa_sam.1	VN:0.1.17 (r973:277)	CL:samtools view -bSu $sam_file | samtools sort -n -o - samtools_nsort_tmp | samtools fixmate /dev/stdin /dev/stdout | samtools sort -o - samtools_csort_tmp | samtools fillmd -u - $reference_fasta > $fixed_bam_file
+ at PG	ID:gatk_target_interval_creator	PN:GenomeAnalysisTK	PP:sam_to_fixed_bam	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T RealignerTargetCreator -R $reference_fasta -o $intervals_file -known $known_indels_file(s) 
+ at PG	ID:gatk_target_interval_creator.1	PN:GenomeAnalysisTK	PP:sam_to_fixed_bam.1	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T RealignerTargetCreator -R $reference_fasta -o $intervals_file -known $known_indels_file(s) 
+ at PG	ID:bam_realignment_around_known_indels	PN:GenomeAnalysisTK	PP:gatk_target_interval_creator	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T IndelRealigner -R $reference_fasta -I $bam_file -o $realigned_bam_file -targetIntervals $intervals_file -known $known_indels_file(s) -LOD 0.4 -model KNOWNS_ONLY -compress 0 --disable_bam_indexing
+ at PG	ID:bam_realignment_around_known_indels.1	PN:GenomeAnalysisTK	PP:gatk_target_interval_creator.1	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T IndelRealigner -R $reference_fasta -I $bam_file -o $realigned_bam_file -targetIntervals $intervals_file -known $known_indels_file(s) -LOD 0.4 -model KNOWNS_ONLY -compress 0 --disable_bam_indexing
+ at PG	ID:bam_count_covariates	PN:GenomeAnalysisTK	PP:bam_realignment_around_known_indels	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T CountCovariates -R $reference_fasta -I $bam_file -recalFile $bam_file.recal_data.csv -knownSites $known_sites_file(s) -l INFO -L '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;X;Y;MT' -cov ReadGroupCovariate -cov QualityScoreCovariate -cov CycleCovariate -cov DinucCovariate
+ at PG	ID:bam_count_covariates.1	PN:GenomeAnalysisTK	PP:bam_realignment_around_known_indels.1	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T CountCovariates -R $reference_fasta -I $bam_file -recalFile $bam_file.recal_data.csv -knownSites $known_sites_file(s) -l INFO -L '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;X;Y;MT' -cov ReadGroupCovariate -cov QualityScoreCovariate -cov CycleCovariate -cov DinucCovariate
+ at PG	ID:bam_recalibrate_quality_scores	PN:GenomeAnalysisTK	PP:bam_count_covariates	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T TableRecalibration -R $reference_fasta -recalFile $bam_file.recal_data.csv -I $bam_file -o $recalibrated_bam_file -l INFO -compress 0 --disable_bam_indexing
+ at PG	ID:bam_recalibrate_quality_scores.1	PN:GenomeAnalysisTK	PP:bam_count_covariates.1	VN:1.2-29-g0acaf2d	CL:java $jvm_args -jar GenomeAnalysisTK.jar -T TableRecalibration -R $reference_fasta -recalFile $bam_file.recal_data.csv -I $bam_file -o $recalibrated_bam_file -l INFO -compress 0 --disable_bam_indexing
+ at PG	ID:bam_calculate_bq	PN:samtools	PP:bam_recalibrate_quality_scores	VN:0.1.17 (r973:277)	CL:samtools calmd -Erb $bam_file $reference_fasta > $bq_bam_file
+ at PG	ID:bam_calculate_bq.1	PN:samtools	PP:bam_recalibrate_quality_scores.1	VN:0.1.17 (r973:277)	CL:samtools calmd -Erb $bam_file $reference_fasta > $bq_bam_file
+ at PG	ID:bam_merge	PN:picard	PP:bam_calculate_bq	VN:1.53	CL:java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT
+ at PG	ID:bam_merge.1	PN:picard	PP:bam_calculate_bq.1	VN:1.53	CL:java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT
+ at PG	ID:bam_mark_duplicates	PN:picard	PP:bam_merge	VN:1.53	CL:java $jvm_args -jar MarkDuplicates.jar INPUT=$bam_file OUTPUT=$markdup_bam_file ASSUME_SORTED=TRUE METRICS_FILE=/dev/null VALIDATION_STRINGENCY=SILENT
+ at PG	ID:bam_mark_duplicates.1	PN:picard	PP:bam_merge.1	VN:1.53	CL:java $jvm_args -jar MarkDuplicates.jar INPUT=$bam_file OUTPUT=$markdup_bam_file ASSUME_SORTED=TRUE METRICS_FILE=/dev/null VALIDATION_STRINGENCY=SILENT
+ at PG	ID:bam_merge.2	PN:picard	PP:bam_mark_duplicates	VN:1.53	CL:java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT
+ at PG	ID:bam_merge.1.2	PN:picard	PP:bam_mark_duplicates.1	VN:1.53	CL:java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT
+ at CO	$known_indels_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.indels_mills_devine_hg19_leftAligned_collapsed_double_hit.indels.sites.vcf.gz
+ at CO	$known_indels_file(s) .= ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.low_coverage_vqsr.20101123.indels.sites.vcf.gz
+ at CO	$known_sites_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.dbsnp.build135.snps.sites.vcf.gz
+]");
+    assert(isValid(another_valid_header));
+}
diff --git a/bio/bam/writer.d b/bio/bam/writer.d
new file mode 100644
index 0000000..187b40a
--- /dev/null
+++ b/bio/bam/writer.d
@@ -0,0 +1,292 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2015    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.bam.writer;
+
+import bio.bam.referenceinfo;
+import bio.sam.header;
+import bio.bam.constants;
+import bio.bam.bai.indexing;
+import bio.bam.read;
+import bio.bam.readrange;
+import bio.core.bgzf.outputstream;
+import bio.core.bgzf.virtualoffset;
+import bio.core.utils.stream;
+import bio.core.utils.switchendianness;
+
+import std.parallelism;
+import std.exception;
+import std.stream;
+import std.traits;
+import std.system;
+import std.algorithm;
+import std.array;
+
+/** Class for outputting BAM.
+    $(BR)
+    Compresses BGZF blocks in parallel.
+    Tries to write reads so that they don't cross BGZF block borders.
+    $(BR)
+    Usage is very simple, see example below.
+
+    Example:
+    --------------------------------------
+    import bio.bam.writer, bio.bam.reader;
+    ...
+    auto src = new BamReader("in.bam");
+    auto dst = new BamWriter("out.bam", 9); // maximal compression
+    scope (exit) dst.finish();              // close the stream at exit
+    dst.writeSamHeader(src.header);         // copy header and reference sequence info
+    dst.writeReferenceSequenceInfo(src.reference_sequences);
+    foreach (read; src.reads) {
+        if (read.mapping_quality > 10)      // skip low-quality reads
+            dst.writeRecord(read);
+    }
+    --------------------------------------
+    */
+final class BamWriter {
+
+    /// Creates new BAM writer outputting to file or $(I stream).
+    /// Automatically writes BAM magic number (4 bytes).
+    ///
+    /// Params:
+    ///     compression_level  = compression level, must be in range -1..9
+    ///     task_pool          = task pool to use for parallel compression
+    ///     buffer_size        = size of BgzfOutputStream buffer
+    this(std.stream.Stream stream, 
+         int compression_level=-1,
+         std.parallelism.TaskPool task_pool=std.parallelism.taskPool,
+         size_t buffer_size=0) 
+    {
+        _stream = new BgzfOutputStream(stream, compression_level, 
+                                       task_pool, buffer_size);
+        _stream.setWriteHandler((ubyte[] uncompressed, ubyte[] compressed) {
+            _bytes_written += compressed.length;
+        });
+
+        writeString(BAM_MAGIC);
+    }
+
+    /// ditto
+    this(string filename,
+         int compression_level=-1,
+         std.parallelism.TaskPool task_pool=std.parallelism.taskPool)
+    {
+        _filename = filename;
+        auto filestream = new bio.core.utils.stream.File(filename, "wb+");
+        this(filestream, compression_level, task_pool);
+    }
+
+    /// Can be called right after the stream constructor, only once
+    void setFilename(string output_filename) {
+        enforce(_filename is null, "Can't set output filename twice");
+        _filename = output_filename;
+    }
+
+    /// By default, the writer attempts to automatically create index
+    /// when writing coordinate-sorted files. If this behaviour is not
+    /// desired, it can be switched off before writing SAM header.
+    void disableAutoIndexCreation() {
+        _disable_index_creation = true;
+    }
+
+    package void writeByteArray(const(ubyte[]) array) {
+        _stream.writeExact(array.ptr, array.length);
+    }
+
+    package void writeString(string str) {
+        writeByteArray(cast(ubyte[])str);
+    }
+
+    package void writeInteger(T)(T integer) if (isIntegral!T)
+    {
+        T num = integer;
+        static if (T.sizeof != 1) {
+            if (std.system.endian != Endian.littleEndian) {
+                switchEndianness(&num, T.sizeof);
+            }
+        }
+        _stream.writeExact(&num, T.sizeof);
+    }
+
+    private {
+        size_t _bytes_written;
+        bool _create_index = false;
+        bool _disable_index_creation = false;
+        bool _record_writing_mode = false;
+        string _filename;
+
+        IndexBuilder _index_builder;
+
+        VirtualOffset _start_vo, _end_vo;
+        ubyte[] _pending_read_data_buf;
+        ubyte[] _pending_read_data;
+
+        void appendReadData(ubyte[] data) {
+            auto required = _pending_read_data.length + data.length;
+            if (_pending_read_data_buf.length < required)
+                _pending_read_data_buf.length = max(required, _pending_read_data_buf.length * 2);
+            _pending_read_data_buf[_pending_read_data.length .. $][0 .. data.length] = data;
+            _pending_read_data = _pending_read_data_buf[0 .. required];
+        }
+
+        size_t _len;
+
+        void indexBlock(ubyte[] uncompressed, ubyte[] compressed) {
+            ushort inner_offset = 0;
+
+            void indexRead(ubyte[] data) {
+                auto read = BamRead(data);
+                if (uncompressed.length > 0) {
+                    _end_vo = VirtualOffset(_bytes_written, inner_offset);
+                } else {
+                    _end_vo = VirtualOffset(_bytes_written + compressed.length, 0);
+                }
+                auto read_block = BamReadBlock(_start_vo, _end_vo, read);
+                _index_builder.put(read_block);
+            }
+
+            if (_pending_read_data !is null) {
+                if (uncompressed.length < _len) {
+                    appendReadData(uncompressed);
+                    _len -= uncompressed.length;
+                    uncompressed = null;
+                } else {
+                    appendReadData(uncompressed[0 .. _len]);
+                    uncompressed = uncompressed[_len .. $];
+                    inner_offset = cast(ushort)_len;
+                    indexRead(_pending_read_data);
+                    _pending_read_data = null;
+                }
+            }
+
+            while (uncompressed.length > 0) {
+                _len = *cast(int*)(uncompressed.ptr); // assume LE...
+                _start_vo = VirtualOffset(_bytes_written, inner_offset);
+                if (_len + int.sizeof <= uncompressed.length) {
+                    _pending_read_data = null;
+                    auto read_data = uncompressed[int.sizeof .. int.sizeof + _len];
+                    uncompressed = uncompressed[int.sizeof + _len .. $];
+                    inner_offset += _len + int.sizeof;
+                    indexRead(read_data);
+                } else { // read spans multiple BGZF blocks
+                    appendReadData(uncompressed[int.sizeof .. $]);
+                    _len -= _pending_read_data.length;
+                    break;
+                }
+            }
+            _bytes_written += compressed.length;
+        }
+    }
+
+    /// Writes SAM header. Should be called after construction.
+    void writeSamHeader(bio.sam.header.SamHeader header) {
+        writeSamHeader(header.text);
+    }
+
+    /// ditto
+    void writeSamHeader(string header_text) {
+        _create_index = !_disable_index_creation &&
+            !header_text.find("SO:coordinate").empty &&
+            _filename.length >= 4 &&
+            _filename[$ - 4 .. $] == ".bam";
+        writeInteger(cast(int)header_text.length);
+        writeString(header_text);
+    }
+
+    /// Writes reference sequence information. Should be called after
+    /// dumping SAM header. Writer will store this array to use later for
+    /// resolving read reference IDs to names.
+    ///
+    /// Flushes current BGZF block.
+    void writeReferenceSequenceInfo(const(bio.bam.referenceinfo.ReferenceSequenceInfo)[] reference_sequences)
+    {
+        _reference_sequences = reference_sequences;
+
+        auto n_refs = cast(int)reference_sequences.length;
+        writeInteger(n_refs);
+        foreach (sequence; reference_sequences) {
+            writeInteger(cast(int)(sequence.name.length + 1));
+            writeString(sequence.name);
+            writeInteger(cast(ubyte)'\0');
+            writeInteger(cast(int)sequence.length);
+        }
+
+        if (_create_index) {
+            auto index = new bio.core.utils.stream.File(_filename ~ ".bai", "wb+");
+            _index_builder = IndexBuilder(index, n_refs);
+            _index_builder.check_bins = true;
+        }
+
+        _stream.flushCurrentBlock();
+    }
+
+    private void indexingWriteHandler(ubyte[] uncomp, ubyte[] comp) {
+        indexBlock(uncomp, comp);
+    }
+
+    /// Writes BAM read. Throws exception if read reference ID is out of range.
+    void writeRecord(R)(R read) {
+        enforce(read.ref_id == -1 || read.ref_id < _reference_sequences.length,
+                "Read reference ID is out of range");
+
+        if (!_record_writing_mode) {
+            if (_create_index) {
+                _record_writing_mode = true;
+                _stream.setWriteHandler(&indexingWriteHandler);
+            } else {
+                _stream.setWriteHandler(null);
+            }
+        }
+
+        read._recalculate_bin();
+
+        auto read_size = read.size_in_bytes;
+        if (read_size + _current_size > BGZF_BLOCK_SIZE) {
+            _stream.flushCurrentBlock();
+            read.write(this);
+            _current_size = read_size;
+        } else {
+            read.write(this);
+            _current_size += read_size;
+        }
+    }
+
+    /// Flushes current BGZF block.
+    void flush() {
+        _stream.flush();
+    }
+
+    /// Flushes buffer and closes output stream. Adds BAM EOF block automatically.
+    void finish() {
+        _stream.close();
+        if (_create_index)
+            _index_builder.finish();
+    }
+
+    private {
+        BgzfOutputStream _stream;
+        const(ReferenceSequenceInfo)[] _reference_sequences;
+        size_t _current_size; // number of bytes written to the current BGZF block
+    }
+}
diff --git a/bio/core/base.d b/bio/core/base.d
new file mode 100644
index 0000000..777d821
--- /dev/null
+++ b/bio/core/base.d
@@ -0,0 +1,268 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.base;
+
+import bio.core.tinymap;
+import std.traits;
+
+/// Code common to both Base5 and Base16
+mixin template CommonBaseOperations() {
+    /// Convert to char
+    char asCharacter() @property const { return _code2char[_code]; }
+    ///
+    alias asCharacter this;
+
+}
+
+/// Base representation supporting full set of IUPAC codes
+struct Base {
+    mixin TinyMapInterface!16; 
+
+    private enum ubyte[256] _char2code = [
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                 1, 2, 4, 8, 15,15,15,15, 15,15,15,15, 15, 0,15,15,
+
+                15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15,
+                15,15, 5, 6,  8,15, 7, 9, 15,10,15,15, 15,15,15,15,
+                15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15,
+                15,15, 5, 6,  8,15, 7, 9, 15,10,15,15, 15,15,15,15,
+
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+                15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15
+            ];
+
+    // = 0000
+    //
+    // A 0001
+    // C 0010
+    // G 0100
+    // T 1000
+    //
+    // W 1001 (A T) Weak
+    // S 0110 (C G) Strong
+    //
+    // M 0011 (A C) aMino
+    // K 1100 (G T) Keto
+    // R 0101 (A G) puRine
+    // Y 1010 (A G) pYrimidine
+    //
+    // B 1110 (not A)
+    // D 1101 (not C)
+    // H 1011 (not G)
+    // V 0111 (not T)
+    //
+    // N 1111 (aNy base)
+    private enum _code2char = "=ACMGRSVTWYHKDBN";
+
+    private enum ubyte[16] _complement_table = [0x0, 0x8, 0x4, 0xC, 
+                                                     0x2, 0xA, 0x6, 0xE,
+                                                     0x1, 0x9, 0x5, 0xD,
+                                                     0x3, 0xB, 0x7, 0xF];
+    /// Complementary base
+    Base complement() @property const {
+        // take the code, reverse the bits, and return the base
+        return Base.fromInternalCode(_complement_table[_code]);
+    }
+
+    unittest {
+        import std.ascii;
+
+        foreach (i, c; _code2char) {
+            assert(_char2code[c] == i);
+        }
+
+        foreach (c; 0 .. 256) {
+            auto c2 = _code2char[_char2code[c]];
+            if (c2 != 'N') {
+                if ('0' <= c && c <= '9') {
+                    assert(c2 == "ACGT"[c - '0']);
+                } else {
+                    assert(c2 == toUpper(c));
+                }
+            }
+        }
+    }
+
+    mixin CommonBaseOperations;
+    /// Construct from IUPAC code
+    this(char c) {
+        _code = _char2code[cast(ubyte)c];
+    }
+
+    /// ditto
+    this(dchar c) {
+        _code = _char2code[cast(ubyte)c];
+    }
+
+    private enum ubyte[5] nt5_to_nt16 = [1, 2, 4, 8, 15];
+    private static Base fromBase5(Base5 base) {
+        Base b = void;
+        b._code = nt5_to_nt16[base.internal_code];
+        return b;
+    }
+
+    /// Conversion to Base5
+    Base5 opCast(T)() const
+        if (is(T == Base5)) 
+    {
+        return Base5.fromBase16(this);
+    }
+
+    T opCast(T)() const 
+        if (is(Unqual!T == char) || is(Unqual!T == dchar))
+    {
+        return asCharacter;
+    }
+}
+
+unittest {
+    Base b = 'W';
+    assert(b == 'W');
+
+    b = Base.fromInternalCode(0);
+    assert(b == '=');
+}
+
+alias Base Base16;
+
+/// Base representation supporting only 'A', 'C', 'G', 'T', and 'N'
+/// (internal codes are 0, 1, 2, 3, and 4 correspondingly)
+struct Base5 {
+    mixin TinyMapInterface!5;
+
+    private enum ubyte[256] _char2code = [
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+
+                4, 0, 4, 1,  4, 4, 4, 2,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  3, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 0, 4, 1,  4, 4, 4, 2,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  3, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
+                4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4
+                ];
+
+    private enum _code2char = "ACGTN";
+    private enum ubyte[16] nt16_to_nt5 = [4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4];
+
+    mixin CommonBaseOperations;
+
+    /// Complementary base
+    Base5 complement() @property const {
+        return Base5.fromInternalCode(cast(ubyte)(_code == 4 ? 4 : (3 - _code)));
+    }
+
+    /// Construct base from one of "acgtACGT" symbols.
+    /// Every other character is converted to 'N'
+    this(char c) {
+        _code = _char2code[cast(ubyte)c];
+    }
+
+    /// ditto
+    this(dchar c) {
+        _code = _char2code[cast(ubyte)c];
+    }
+
+    private static Base5 fromBase16(Base16 base) {
+        Base5 b = void;
+        b._code = nt16_to_nt5[base.internal_code];
+        return b;
+    }
+
+    /// Conversion to Base16
+    Base16 opCast(T)() const
+        if(is(T == Base16)) 
+    {
+        return Base16.fromBase5(this);
+    }
+
+    T opCast(T)() const 
+        if (is(Unqual!T == char) || is(Unqual!T == dchar))
+    {
+        return asCharacter;
+    }
+}
+
+unittest {
+    auto b5 = Base5('C');
+    assert(b5.internal_code == 1);
+    b5 = Base5.fromInternalCode(3);
+    assert(b5 == 'T');
+
+    // doesn't work with std.conv.to
+    //
+    //import std.conv;
+    //assert(to!Base16(b5).internal_code == 8);
+
+    assert((cast(Base16)b5).internal_code == 8);
+}
+
+/// Complement base, which might be Base5, Base16, char, or dchar.
+B complementBase(B)(B base) {
+    static if(is(Unqual!B == dchar) || is(Unqual!B == char))
+    {
+        return cast(B)(Base16(base).complement);
+    }
+    else
+        return base.complement;
+}
+
+/// Convert character to base
+template charToBase(B=Base16)
+{
+    B charToBase(C)(C c)
+        if(is(Unqual!C == char) || is(Unqual!C == dchar))
+    {
+        return B(c);
+    }
+}
+
+unittest {
+    assert(complementBase('T') == 'A');
+    assert(complementBase('G') == 'C');
+
+    assert(complementBase(Base5('A')) == Base5('T'));
+    assert(complementBase(Base16('C')) == Base16('G'));
+
+    assert(charToBase!Base16('A').complement == Base16('T'));
+}
diff --git a/bio/core/bgzf/block.d b/bio/core/bgzf/block.d
new file mode 100644
index 0000000..2253585
--- /dev/null
+++ b/bio/core/bgzf/block.d
@@ -0,0 +1,197 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.block;
+
+import bio.bam.constants;
+import bio.core.utils.memoize;
+import bio.core.utils.zlib;
+
+import std.array;
+import std.conv;
+import std.algorithm;
+import std.exception;
+
+/**
+  Structure representing BGZF block.
+  In general, users shouldn't use it, as it is EXTREMELY low-level.
+ */
+struct BgzfBlock {
+    // field types are as in the SAM/BAM specification
+    // ushort ~ uint16_t, char ~ uint8_t, uint ~ uint32_t
+
+    public ulong start_offset; /// start offset in the file, in bytes
+
+    /// end offset in the file, in bytes
+    public ulong end_offset() @property const {
+        return start_offset + bsize + 1;
+    }
+
+    public ushort bsize; /// total Block SIZE minus one
+
+    public ushort cdata_size; /// compressed data size
+
+    /// A buffer is used to reduce number of allocations.
+    ///
+    /// Its size is max(cdata_size, input_size)
+    /// Initially, it contains compressed data, but is rewritten
+    /// during decompressBgzfBlock -- indeed, who cares about
+    /// compressed data after it has been uncompressed?
+    public ubyte[] _buffer = void;
+
+    /// If block has been already decompressed, result is undefined.
+    public inout(ubyte[]) compressed_data() @property inout pure @safe nothrow {
+        return _buffer[0 .. cast(size_t)cdata_size];
+    }
+
+    public uint crc32;
+    public uint input_size; /// size of uncompressed data
+
+    bool dirty;
+
+    hash_t toHash() const pure @safe nothrow {
+        assert(!dirty);
+        return crc32;
+    }
+
+    bool opEquals(const ref BgzfBlock other) pure @safe nothrow {
+        assert(!dirty);
+        return opCmp(other) == 0;
+    }
+
+    int opCmp(const ref BgzfBlock other) const pure @safe nothrow {
+        assert(!dirty);
+        if (cdata_size < other.cdata_size)
+            return -1;
+        if (cdata_size > other.cdata_size)
+            return 1;
+        return std.algorithm.cmp(compressed_data, other.compressed_data);
+    }
+}
+
+/**
+  Struct representing decompressed BgzfBlock
+
+  Start offset is needed to be able to tell current virtual offset,
+  and yet be able to decompress blocks in parallel.
+ */
+struct DecompressedBgzfBlock {
+    ulong start_offset;
+    ulong end_offset;
+    ubyte[] decompressed_data;
+}
+
+///
+alias Cache!(BgzfBlock, DecompressedBgzfBlock) BgzfBlockCache;
+
+/// Function for BGZF block decompression.
+/// Reuses buffer allocated for storing compressed data,
+/// i.e. after execution buffer of the passed $(D block)
+/// is overwritten with uncompressed data.
+DecompressedBgzfBlock decompressBgzfBlock(BgzfBlock block,
+                                          BgzfBlockCache cache=null)
+{
+    if (block.input_size == 0) {
+        return DecompressedBgzfBlock(block.start_offset, 
+                                     block.start_offset + block.bsize + 1,
+                                     cast(ubyte[])[]); // EOF marker
+        // TODO: add check for correctness of EOF marker
+    }
+
+    if (cache !is null) {
+        auto ptr = cache.lookup(block);
+        if (ptr !is null)
+            return *ptr;
+    }
+
+    int err = void;
+
+    // allocate buffer on the stack
+    ubyte[BGZF_MAX_BLOCK_SIZE] uncompressed_buf = void;
+
+    // check that block follows BAM specification
+    enforce(block.input_size <= BGZF_MAX_BLOCK_SIZE, 
+            "Uncompressed block size must be within " ~ 
+            to!string(BGZF_MAX_BLOCK_SIZE) ~ " bytes");
+
+    // for convenience, provide a slice
+    auto uncompressed = uncompressed_buf[0 .. block.input_size];
+
+    // set input data
+    bio.core.utils.zlib.z_stream zs;
+    zs.next_in = cast(typeof(zs.next_in))block.compressed_data;
+    zs.avail_in = to!uint(block.compressed_data.length);
+
+    err = bio.core.utils.zlib.inflateInit2(&zs, /* winbits = */-15);
+    if (err)
+    {
+        throw new ZlibException(err);
+    }
+
+    // uncompress it into a buffer on the stack
+    zs.next_out = cast(typeof(zs.next_out))uncompressed_buf.ptr;
+    zs.avail_out = block.input_size;
+
+    err = bio.core.utils.zlib.inflate(&zs, Z_FINISH);
+    switch (err)
+    {
+        case Z_STREAM_END:
+            assert(zs.total_out == block.input_size);
+            err = bio.core.utils.zlib.inflateEnd(&zs);
+            if (err != Z_OK) {
+                throw new ZlibException(err);
+            }
+            break;
+        default:
+            bio.core.utils.zlib.inflateEnd(&zs);
+            throw new ZlibException(err);
+    }
+
+    assert(block.crc32 == crc32(0, uncompressed[]));
+
+    if (cache !is null) {
+        BgzfBlock compressed_bgzf_block = block;
+        compressed_bgzf_block._buffer = block._buffer.dup;
+        DecompressedBgzfBlock decompressed_bgzf_block;
+        with (decompressed_bgzf_block) {
+            start_offset = block.start_offset;
+            end_offset = block.end_offset;
+            decompressed_data = uncompressed[].dup;
+        }
+        cache.put(compressed_bgzf_block, decompressed_bgzf_block);
+    }
+
+    // Now copy back to block._buffer, overwriting existing data.
+    // It should have enough bytes already allocated.
+    assert(block._buffer.length >= block.input_size);
+    version(extraVerbose) {
+        import std.stdio;
+        stderr.writeln("[uncompressed] [write] range: ", block._buffer.ptr,
+                       " - ", block._buffer.ptr + block.input_size);
+    }
+    block._buffer[0 .. block.input_size] = uncompressed[];
+    block.dirty = true;
+
+    return DecompressedBgzfBlock(block.start_offset, block.end_offset,
+                                 block._buffer[0 .. block.input_size]);
+}
diff --git a/bio/core/bgzf/chunk.d b/bio/core/bgzf/chunk.d
new file mode 100644
index 0000000..529cc00
--- /dev/null
+++ b/bio/core/bgzf/chunk.d
@@ -0,0 +1,41 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.chunk;
+
+import bio.core.bgzf.virtualoffset;
+
+/// Chunk of BAM file is specified by pair of virtual offsets
+struct Chunk {
+    VirtualOffset beg; /// virtual file offset of the start of the chunk
+    VirtualOffset end; /// virtual file offset of the end of the chunk
+
+    /// First compares beginnings, then ends
+    int opCmp(Chunk other) const nothrow {
+        if (beg < other.beg) return -1;
+        if (beg > other.beg) return 1;
+        if (end < other.end) return -1;
+        if (end > other.end) return 1;
+        return 0;
+    }
+}
diff --git a/bio/core/bgzf/compress.d b/bio/core/bgzf/compress.d
new file mode 100644
index 0000000..5bf01ad
--- /dev/null
+++ b/bio/core/bgzf/compress.d
@@ -0,0 +1,113 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.compress;
+
+import bio.bam.constants;
+import bio.core.utils.zlib;
+
+import std.array;
+import std.system;
+import core.bitop;
+
+/// Returns BGZF block containing compressed $(D chunk).
+/// If $(D buffer) is provided, it will be used for storing the block.
+///
+/// Params: 
+///         chunk =  chunk of memory to be compressed
+///         level =  compression level, see zlib documentation
+///         buffer = optional buffer which will be used for storing
+///                  decompressed data
+///
+/// For uncompressed BAM output, use level = 0.
+ubyte[] bgzfCompress(ubyte[] chunk, int level=-1, ubyte[] buffer=null) 
+in 
+{
+    assert(-1 <= level && level <= 9);
+}
+body
+{
+    assert(bio.core.utils.zlib.compressBound(BGZF_BLOCK_SIZE) < BGZF_MAX_BLOCK_SIZE);
+
+    if (buffer is null) {
+        buffer = uninitializedArray!(ubyte[])(BGZF_MAX_BLOCK_SIZE);
+    } else {
+        buffer.length = BGZF_MAX_BLOCK_SIZE;
+    }
+
+    // write header
+    buffer[0 .. BLOCK_HEADER_LENGTH - ushort.sizeof] = BLOCK_HEADER_START[];
+
+    bio.core.utils.zlib.z_stream zs;
+
+    zs.zalloc = null;
+    zs.zfree = null;
+
+    zs.next_in  = cast(ubyte*)chunk.ptr;
+    zs.avail_in = cast(uint)chunk.length;
+
+    zs.next_out = buffer.ptr + BLOCK_HEADER_LENGTH;
+    zs.avail_out = cast(int)(buffer.length - BLOCK_HEADER_LENGTH - BLOCK_FOOTER_LENGTH);
+
+    auto err = bio.core.utils.zlib.deflateInit2(&zs, /* compression level */ level,
+                                            /* deflated compression method */ Z_DEFLATED, 
+                                            /* winbits (no header) */ -15, 
+                                            /* memory usage level (default) */ 8, 
+                                            /* default compression strategy */ Z_DEFAULT_STRATEGY);
+    if (err != Z_OK) {
+        throw new ZlibException("deflateInit2", err);
+    }
+
+    err = bio.core.utils.zlib.deflate(&zs, Z_FINISH);
+    if (err != Z_STREAM_END) {
+        throw new ZlibException("deflate", err);
+    }
+
+    err = bio.core.utils.zlib.deflateEnd(&zs);
+    if (err != Z_OK) {
+        throw new ZlibException("deflateEnd", err);
+    }
+
+    // almost done, update buffer length
+    buffer.length = zs.total_out + BLOCK_HEADER_LENGTH + BLOCK_FOOTER_LENGTH;
+
+    // Write (block length - 1) in BC subfield.
+    // Why -1? To fit the value into 2 bytes (it's assumed to be in range 1-65536).
+    ushort len = cast(ushort)(buffer.length - 1);
+    buffer[BLOCK_HEADER_LENGTH - 2] = len & 0xFF;         // little endian
+    buffer[BLOCK_HEADER_LENGTH - 1] = len >> 8;
+
+    // Write the footer
+    *(cast(uint*)(buffer.ptr + buffer.length - 8)) = crc32(0, chunk);
+    *(cast(uint*)(buffer.ptr + buffer.length - 4)) = cast(uint)chunk.length;
+
+    uint* ptr;
+    if (std.system.endian != Endian.littleEndian) {
+        ptr = cast(uint*)(buffer.ptr + buffer.length - 8);
+        *ptr = bswap(*ptr);
+        ptr = cast(uint*)(buffer.ptr + buffer.length - 4);
+        *ptr = bswap(*ptr);
+    }
+
+    return buffer;
+}
diff --git a/bio/core/bgzf/constants.d b/bio/core/bgzf/constants.d
new file mode 100644
index 0000000..1985309
--- /dev/null
+++ b/bio/core/bgzf/constants.d
@@ -0,0 +1,61 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.constants;
+
+immutable BGZF_MAGIC = 0x04_08_8B_1F; // little endian
+
+immutable ubyte[16] BLOCK_HEADER_START = 
+    [ 31, 139,   8,   4,  // BGZF magic
+       0,   0,   0,   0,  // GZIP modification time
+       0,                 // GZIP extra flags
+     255,                 // GZIP OS identifier
+       6,   0,            // GZIP extra length == 6 (LE)
+      66,  67,            // Subfield 'BC'
+       2,   0];           // Subfield length (holds 1 ushort)
+
+// empty block
+immutable ubyte[28] BGZF_EOF = 
+    [31, 139, 8, 4, 
+        0, 0, 0, 0, 
+                 0, 
+               255, 
+              6, 0, 
+            66, 67, 
+              2, 0, 
+             27, 0, 
+              3, 0, 
+        0, 0, 0, 0, 
+        0, 0, 0, 0];
+
+
+
+// BGZF block header length in bytes.
+// Block header holds BLOCK_HEADER_START + block size (ushort)
+immutable BLOCK_HEADER_LENGTH = BLOCK_HEADER_START.length + ushort.sizeof;
+
+// BGZF footer holds CRC32 and size of decompressed block.
+immutable BLOCK_FOOTER_LENGTH = uint.sizeof + uint.sizeof;
+
+immutable BGZF_MAX_BLOCK_SIZE = 65536;
+immutable BGZF_BLOCK_SIZE = 0xFF00; 
diff --git a/bio/core/bgzf/inputstream.d b/bio/core/bgzf/inputstream.d
new file mode 100644
index 0000000..fa9548b
--- /dev/null
+++ b/bio/core/bgzf/inputstream.d
@@ -0,0 +1,522 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.inputstream;
+
+import bio.core.bgzf.block;
+import bio.core.bgzf.virtualoffset;
+import bio.core.bgzf.constants;
+import bio.core.bgzf.chunk;
+import bio.bam.constants;
+import bio.core.utils.roundbuf;
+
+import std.stream;
+import std.exception;
+import std.conv;
+import std.parallelism;
+import std.array;
+import std.algorithm : min, max;
+
+/// Exception type, thrown in case of encountering corrupt BGZF blocks
+class BgzfException : Exception {
+    this(string msg) { super(msg); }
+}
+
+bool fillBgzfBufferFromStream(Stream stream, bool is_seekable,
+                              BgzfBlock* block, ubyte* buffer,
+                              size_t *number_of_bytes_read=null)
+{
+    if (stream.eof())
+        return false;
+    
+    ulong start_offset;
+    void throwBgzfException(string msg) {
+        throw new BgzfException("Error reading BGZF block starting from offset " ~
+                                to!string(start_offset) ~ ": " ~ msg);
+    }
+
+    if (is_seekable)
+        start_offset = stream.position;
+    
+    try {
+        uint bgzf_magic = void;
+           
+        // TODO: fix byte order if needed
+        size_t bytes_read;
+        while (bytes_read < uint.sizeof) {
+            auto buf = (cast(ubyte*)&bgzf_magic)[bytes_read .. uint.sizeof];
+            auto read_ = stream.read(buf);
+            if (read_ == 0)
+                return false;
+            bytes_read += read_;
+        }
+
+        if (bgzf_magic != BGZF_MAGIC) { 
+            throwBgzfException("wrong BGZF magic");
+        }
+        
+        ushort gzip_extra_length = void;
+
+        if (is_seekable) {
+            stream.seekCur(uint.sizeof + 2 * ubyte.sizeof);
+        } else {
+            uint gzip_mod_time = void;
+            ubyte gzip_extra_flags = void;
+            ubyte gzip_os = void;
+            stream.read(gzip_mod_time);
+            stream.read(gzip_extra_flags);
+            stream.read(gzip_os);
+        }
+
+        stream.read(gzip_extra_length);
+          
+        ushort bsize = void; // total Block SIZE minus 1
+        bool found_block_size = false;
+
+        // read extra subfields
+        size_t len = 0;
+        while (len < gzip_extra_length) {
+            ubyte si1 = void;    // Subfield Identifier1
+            ubyte si2 = void;    // Subfield Identifier2
+            ushort slen = void;  // Subfield LENgth
+                
+            stream.read(si1);    
+            stream.read(si2);    
+            stream.read(slen);   
+
+            if (si1 == BAM_SI1 && si2 == BAM_SI2) { 
+                // found 'BC' as subfield identifier
+                    
+                if (slen != 2) {
+                    throwBgzfException("wrong BC subfield length: " ~ 
+                                       to!string(slen) ~ "; expected 2");
+                }
+
+                if (found_block_size) {
+                    throwBgzfException("duplicate field with block size");
+                }
+
+                // read block size
+                stream.read(bsize); 
+                found_block_size = true;
+
+                // skip the rest
+                if (is_seekable) {
+                    stream.seekCur(slen - bsize.sizeof);
+                } else {
+                    stream.readString(slen - bsize.sizeof);
+                }
+            } else {
+                // this subfield has nothing to do with block size, just skip
+                if (is_seekable) {
+                    stream.seekCur(slen);
+                } else {
+                    stream.readString(slen);
+                }
+            }
+
+            auto nbytes = si1.sizeof + si2.sizeof + slen.sizeof + slen;
+            if (number_of_bytes_read !is null)
+                *number_of_bytes_read += nbytes;
+            len += nbytes;
+        } 
+
+        if (len != gzip_extra_length) {
+            throwBgzfException("total length of subfields in bytes (" ~ 
+                               to!string(len) ~ 
+                               ") is not equal to gzip_extra_length (" ~
+                               to!string(gzip_extra_length) ~ ")");
+        }
+
+        if (!found_block_size) {
+            throwBgzfException("block size was not found in any subfield");
+        }
+           
+        // read compressed data
+        auto cdata_size = bsize - gzip_extra_length - 19;
+        if (cdata_size > BGZF_MAX_BLOCK_SIZE) {
+            throwBgzfException("compressed data size is more than " ~
+                               to!string(BGZF_MAX_BLOCK_SIZE) ~
+                               " bytes, which is not allowed by " ~
+                               "current BAM specification");
+        }
+
+        block.bsize = bsize;
+        block.cdata_size = cast(ushort)cdata_size;
+
+        version(extraVerbose) {
+            import std.stdio;
+            // stderr.writeln("[compressed] reading ", cdata_size, " bytes starting from ", start_offset);
+        }
+        stream.readExact(buffer, cdata_size);
+        version(extraVerbose) {
+            stderr.writeln("[  compressed] [write] range: ", buffer, " - ", buffer + cdata_size);
+        }
+        // version(extraVerbose) {stderr.writeln("[compressed] reading block crc32 and input size...");}
+        stream.read(block.crc32);
+        stream.read(block.input_size);
+
+        if (number_of_bytes_read !is null)
+            *number_of_bytes_read += 12 + cdata_size + block.crc32.sizeof + block.input_size.sizeof;
+           
+        // version(extraVerbose) {stderr.writeln("[compressed] read block input size: ", block.input_size);}
+        block._buffer = buffer[0 .. max(block.input_size, cdata_size)];
+        block.start_offset = start_offset;
+        block.dirty = false;
+    } catch (ReadException e) {
+        throwBgzfException("stream error: " ~ e.msg);
+    }
+
+    return true;
+}
+
+///
+interface BgzfBlockSupplier {
+    /// Fills $(D buffer) with compressed data and points $(D block) to it.
+    /// Return value is false if there is no next block.
+    ///
+    /// The implementation may assume that there's enough space in the buffer.
+    bool getNextBgzfBlock(BgzfBlock* block, ubyte* buffer,
+                          ushort* skip_start, ushort* skip_end);
+
+    /// Total compressed size of the supplied blocks in bytes.
+    /// If unknown, should return 0.
+    size_t totalCompressedSize() const;
+}
+
+///
+class StreamSupplier : BgzfBlockSupplier {
+    private {
+        Stream _stream;
+        bool _seekable;
+        size_t _start_offset;
+        size_t _size;
+        ushort _skip_start;
+    }
+    
+    ///
+    this(Stream stream, ushort skip_start=0) {
+        _stream = stream;
+        _seekable = _stream.seekable;
+        _skip_start = skip_start;
+        if (_seekable)
+            _size = cast(size_t)(_stream.size);
+    }
+
+    ///
+    bool getNextBgzfBlock(BgzfBlock* block, ubyte* buffer,
+                          ushort* skip_start, ushort* skip_end) {
+        auto curr_start_offset = _start_offset;
+
+        // updates _start_offset
+        auto result = fillBgzfBufferFromStream(_stream, _seekable, block, buffer,
+                                               &_start_offset);
+        if (!_seekable)
+            block.start_offset = curr_start_offset;
+
+        *skip_start = _skip_start;
+        _skip_start = 0;
+        *skip_end = 0;
+        return result;
+    }
+
+    /// Stream size if available
+    size_t totalCompressedSize() const {
+        return _size;
+    }
+}
+
+class StreamChunksSupplier : BgzfBlockSupplier {
+    private {
+        Stream _stream;
+        Chunk[] _chunks;
+
+        void moveToNextChunk() {
+            if (_chunks.length == 0)
+                return;
+            size_t i = 1;
+            auto beg = _chunks[0].beg;
+            for ( ; i < _chunks.length; ++i)
+                if (_chunks[i].beg.coffset > _chunks[0].beg.coffset)
+                    break;
+            _chunks = _chunks[i - 1 .. $];
+            _chunks[0].beg = beg;
+            _stream.seekSet(cast(size_t)_chunks[0].beg.coffset);
+            version(extraVerbose) {
+                import std.stdio; stderr.writeln("started processing chunk ", beg, " - ", _chunks[0].end);
+            }
+        }
+    }
+    
+    this(Stream stream, bio.core.bgzf.chunk.Chunk[] chunks) {
+        _stream = stream;
+        assert(_stream.seekable);
+        _chunks = chunks;
+        moveToNextChunk();
+    }
+
+    ///
+    bool getNextBgzfBlock(BgzfBlock* block, ubyte* buffer,
+                          ushort* skip_start, ushort* skip_end)
+    {
+        if (_chunks.length == 0)
+            return false;
+
+        // Usually there can't be two or more chunks overlapping a
+        // single block -- in such cases they are merged during
+        // indexing in most implementations.
+        // If this is not the case, the algorithm should still work,
+        // but it might decompress the same block several times.
+        //
+        // On each call of this method, one of these things happen:
+        // 1) We remain in the current chunk, but read next block
+        // 2) We finish dealing with the current chunk, so we move to
+        //    the next one. If this was the last one, false is returned.
+        //
+        // moveToNextChunk moves stream pointer to chunk.beg.coffset,
+        // in which case skip_start should be set to chunk.beg.uoffset
+
+        auto result = fillBgzfBufferFromStream(_stream, true, block, buffer);
+        auto offset = block.start_offset;
+
+        if (!result)
+            return false;
+
+        if (offset == _chunks[0].beg.coffset)
+            *skip_start = _chunks[0].beg.uoffset; // first block in a chunk
+        else
+            *skip_start = 0;
+
+        long _skip_end; // may be equal to 65536!
+        if (offset == _chunks[0].end.coffset) // last block in a chunk
+            _skip_end = block.input_size - _chunks[0].end.uoffset;
+        else
+            _skip_end = 0;
+
+        *skip_end = cast(ushort)_skip_end;
+
+        if (offset >= _chunks[0].end.coffset) {
+            _chunks = _chunks[1 .. $];
+            moveToNextChunk();
+        }
+
+        // special case: it's not actually the last block in a chunk,
+        // but rather that chunk ended on the edge of two blocks
+        if (block.input_size > 0 && _skip_end == block.input_size) {
+            version(extraVerbose) { import std.stdio; stderr.writeln("skip_end == input size"); }
+            return getNextBgzfBlock(block, buffer, skip_start, skip_end);
+        }
+
+        return true;
+    }
+
+    /// Always zero (unknown)
+    size_t totalCompressedSize() const {
+        return 0;
+    }
+}
+
+///
+class BgzfInputStream : Stream {
+    private {
+        BgzfBlockSupplier _supplier;
+        ubyte[] _data;
+
+        BgzfBlockCache _cache;
+
+        ubyte[] _read_buffer;
+        VirtualOffset _current_vo;
+        VirtualOffset _end_vo;
+
+        size_t _compressed_size;
+
+        // for estimating compression ratio
+        size_t _compressed_read, _uncompressed_read;
+
+        TaskPool _pool;
+        enum _max_block_size = BGZF_MAX_BLOCK_SIZE * 2;
+
+        alias Task!(decompressBgzfBlock, BgzfBlock, BgzfBlockCache)
+            DecompressionTask;
+        DecompressionTask[] _task_buf;
+
+        static struct BlockAux {
+            BgzfBlock block;
+            ushort skip_start;
+            ushort skip_end;
+
+            DecompressionTask* task;
+            alias task this;
+        }
+
+        RoundBuf!BlockAux _tasks = void;
+
+        size_t _offset;
+
+        bool fillNextBlock() {
+            ubyte* p = _data.ptr + _offset;
+            BlockAux b = void;
+            if (_supplier.getNextBgzfBlock(&b.block, p,
+                                           &b.skip_start, &b.skip_end))
+            {
+                if (b.block.input_size == 0) // BGZF EOF block
+                    return false;
+
+                _compressed_read += b.block.end_offset - b.block.start_offset;
+                _uncompressed_read += b.block.input_size;
+                version(extraVerbose) {
+                    import std.stdio;
+                    stderr.writeln("[creating task] ", b.block.start_offset, " / ", b.skip_start, " / ", b.skip_end);
+                }
+
+                DecompressionTask tmp = void;
+                tmp = scopedTask!decompressBgzfBlock(b.block, _cache);
+                auto t = _task_buf.ptr + _offset / _max_block_size;
+                import core.stdc.string : memcpy;
+                memcpy(t, &tmp, DecompressionTask.sizeof);
+                b.task = t;
+                _tasks.put(b);
+                _pool.put(b.task);
+
+                _offset += _max_block_size;
+                if (_offset == _data.length)
+                    _offset = 0;
+                return true;
+            }
+            return false;
+        }
+
+        void setupReadBuffer() {
+            auto b = _tasks.front;
+            auto decompressed_block = b.task.yieldForce();
+            auto from = b.skip_start;
+            auto to = b.block.input_size - b.skip_end;
+            _read_buffer = b.block._buffer.ptr[from .. to];
+
+            if (from == to) {
+                assert(from == 0);
+                setEOF();
+            }
+
+            _current_vo = VirtualOffset(b.block.start_offset, from);
+            version(extraVerbose) {
+                import std.stdio; stderr.writeln("[setup read buffer] ", _current_vo);
+            }
+            if (b.skip_end > 0)
+                _end_vo = VirtualOffset(b.block.start_offset, cast(ushort)to);
+            else
+                _end_vo = VirtualOffset(b.block.end_offset, 0);
+            _tasks.popFront();
+        }
+
+        void setEOF() {
+            _current_vo = _end_vo;
+            readEOF = true;
+        }
+    }
+
+    this(BgzfBlockSupplier supplier,
+         TaskPool pool=taskPool,
+         BgzfBlockCache cache=null,
+         size_t buffer_size=0)
+    {
+        _supplier = supplier;
+        _compressed_size = _supplier.totalCompressedSize();
+        _pool = pool;
+        _cache = cache;
+
+        size_t n_tasks = max(pool.size, 1) * 2;
+        if (buffer_size > 0)
+            n_tasks = max(n_tasks, buffer_size / BGZF_MAX_BLOCK_SIZE);
+
+        _tasks = RoundBuf!BlockAux(n_tasks);
+        _task_buf = uninitializedArray!(DecompressionTask[])(n_tasks);
+
+        _data = uninitializedArray!(ubyte[])(n_tasks * _max_block_size);
+
+        for (size_t i = 0; i < n_tasks; ++i)
+            if (!fillNextBlock())
+                break;
+
+        if (!_tasks.empty) {
+            setupReadBuffer();
+        }
+    }
+
+    VirtualOffset virtualTell() const {
+        return _current_vo;
+    }
+
+    override ulong seek(long offset, SeekPos whence) {
+        throw new SeekException("Stream is not seekable");
+    }
+
+    override size_t writeBlock(const void* buf, size_t size) {
+        throw new WriteException("Stream is not writeable");
+    }
+
+    override size_t readBlock(void* buf, size_t size) {
+        version(extraVerbose) {
+            import std.stdio;
+            // stderr.writeln("[uncompressed] reading ", size, " bytes to address ", buf);
+        }
+        if (_read_buffer.length == 0) {
+            assert(_tasks.empty);
+            setEOF();
+            return 0;
+        }
+        
+        auto buffer = cast(ubyte*)buf;
+
+        auto len = min(size, _read_buffer.length);
+        buffer[0 .. len] = _read_buffer[0 .. len];
+        version(extraVerbose) {
+            // stderr.writeln("[uncompressed] [read] range: ", _read_buffer.ptr, " - ", _read_buffer.ptr + len);
+        }
+        _read_buffer = _read_buffer[len .. $];
+        _current_vo = VirtualOffset(cast(ulong)_current_vo + len);
+
+        if (_read_buffer.length == 0) {
+            _current_vo = _end_vo;
+            if (!_tasks.empty) {
+                setupReadBuffer();
+                if (!readEOF)
+                    fillNextBlock();
+            }
+            else
+                setEOF();
+        }
+
+        return len;
+    }
+
+    size_t total_compressed_size() @property const {
+        return _compressed_size;
+    }
+
+    float average_compression_ratio() @property const {
+        if (_compressed_read == 0)
+            return 0.0;
+        return cast(float)_uncompressed_read / _compressed_read;
+    }
+}
diff --git a/bio/core/bgzf/outputstream.d b/bio/core/bgzf/outputstream.d
new file mode 100644
index 0000000..b9f3d07
--- /dev/null
+++ b/bio/core/bgzf/outputstream.d
@@ -0,0 +1,244 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.outputstream;
+
+import bio.core.bgzf.constants;
+import bio.core.bgzf.compress;
+
+import bio.core.utils.roundbuf;
+
+import std.stream;
+import std.exception;
+import std.parallelism;
+import std.array;
+import std.algorithm : max;
+import std.typecons;
+import std.c.stdlib;
+
+alias void delegate(ubyte[], ubyte[]) BlockWriteHandler;
+
+Tuple!(ubyte[], ubyte[], BlockWriteHandler)
+bgzfCompressFunc(ubyte[] input, int level, ubyte[] output_buffer,
+		 BlockWriteHandler handler)
+{
+    auto output = bgzfCompress(input, level, output_buffer);
+    return tuple(input, output, handler);
+}
+
+/// Class for BGZF compression
+class BgzfOutputStream : Stream {
+
+    private {
+        Stream _stream = void;
+        TaskPool _task_pool = void;
+
+        ubyte[] _buffer; // a slice into _compression_buffer (uncompressed data)
+        ubyte[] _tmp;    // a slice into _compression_buffer (compressed data)
+        size_t _current_size;
+
+        int _compression_level;
+
+        alias Task!(bgzfCompressFunc,
+		    ubyte[], int, ubyte[], BlockWriteHandler) CompressionTask;
+        RoundBuf!(CompressionTask*) _compression_tasks;
+        ubyte[] _compression_buffer;
+    }
+
+    /// Create new BGZF output stream which will use
+    /// provided $(D task_pool) to do multithreaded compression.
+    this(Stream output_stream, 
+         int compression_level=-1, 
+         TaskPool task_pool=taskPool, 
+         size_t buffer_size=0,
+         size_t max_block_size=BGZF_MAX_BLOCK_SIZE,
+         size_t block_size=BGZF_BLOCK_SIZE)
+    {
+        enforce(-1 <= compression_level && compression_level <= 9,
+                "Compression level must be a number in interval [-1, 9]");
+        _stream = output_stream;
+        _task_pool = task_pool;
+        _compression_level = compression_level;
+
+        size_t n_tasks = max(task_pool.size, 1) * 16;
+        if (buffer_size > 0) {
+            n_tasks = max(n_tasks, buffer_size / max_block_size);
+        }
+        _compression_tasks = RoundBuf!(CompressionTask*)(n_tasks);
+
+        // 1 extra block to which we can write while n_tasks are executed
+        auto comp_buf_size = (2 * n_tasks + 2) * max_block_size;
+        auto p = cast(ubyte*)std.c.stdlib.malloc(comp_buf_size);
+        _compression_buffer = p[0 .. comp_buf_size];
+        _buffer = _compression_buffer[0 .. block_size];
+        _tmp = _compression_buffer[max_block_size .. max_block_size * 2];
+
+        readable = false;
+        writeable = true;
+        seekable = false;
+    }
+
+    override size_t readBlock(void* buffer, size_t size) {
+        throw new ReadException("Stream is not readable");
+    }
+
+    override ulong seek(long offset, SeekPos whence) {
+        throw new SeekException("Stream is not seekable");
+    }
+
+    override size_t writeBlock(const void* buf, size_t size) {
+        if (size + _current_size >= _buffer.length) {
+            size_t room;
+            ubyte[] data = (cast(ubyte*)buf)[0 .. size];
+
+            while (data.length + _current_size >= _buffer.length) {
+                room = _buffer.length - _current_size;
+                _buffer[$ - room .. $] = data[0 .. room];
+                data = data[room .. $];
+
+                _current_size = _buffer.length;
+
+                flushCurrentBlock();
+            }
+
+            _buffer[0 .. data.length] = data[];
+            _current_size = data.length;
+        } else {
+            _buffer[_current_size .. _current_size + size] = (cast(ubyte*)buf)[0 .. size];
+            _current_size += size;
+        }
+
+        return size;
+    }
+
+    /// Force flushing current block, even if it is not yet filled.
+    /// Should be used when it's not desired to have records crossing block borders. 
+    void flushCurrentBlock() {
+
+        if (_current_size == 0)
+            return;
+
+        Tuple!(ubyte[], ubyte[], BlockWriteHandler) front_result;
+        if (_compression_tasks.full) {
+            front_result = _compression_tasks.front.yieldForce();
+            _compression_tasks.popFront();
+        }
+
+        auto compression_task = task!bgzfCompressFunc(_buffer[0 .. _current_size],
+						      _compression_level, _tmp,
+						      _before_write);
+        _compression_tasks.put(compression_task);
+        _task_pool.put(compression_task);
+
+        size_t offset = _buffer.ptr - _compression_buffer.ptr;
+        immutable N = _tmp.length;
+        offset += 2 * N;
+        if (offset == _compression_buffer.length)
+            offset = 0;
+        _buffer = _compression_buffer[offset .. offset + _buffer.length];
+        _tmp = _compression_buffer[offset + N .. offset + 2 * N];
+        _current_size = 0;
+
+        if (front_result[0] !is null)
+	    writeResult(front_result);
+
+        while (!_compression_tasks.empty) {
+            auto task = _compression_tasks.front;
+            if (!task.done())
+                break;
+            auto result = task.yieldForce();
+	    writeResult(result);
+            _compression_tasks.popFront();
+        }
+    }
+
+    private void delegate(ubyte[], ubyte[]) _before_write;
+    void setWriteHandler(void delegate(ubyte[], ubyte[]) handler) {
+	_before_write = handler;
+    }
+
+    private void writeResult(Tuple!(ubyte[], ubyte[], BlockWriteHandler) block) {
+	auto uncompressed = block[0];
+	auto compressed = block[1];
+	auto handler = block[2];
+	if (handler) {// write handler enabled
+	    handler(uncompressed, compressed);
+	}
+	_stream.writeExact(compressed.ptr, compressed.length);
+    }
+
+    /// Flush all remaining BGZF blocks and underlying stream.
+    override void flush() {
+        flushCurrentBlock();
+        foreach (task; _compression_tasks) {
+            auto block = task.yieldForce();
+	    writeResult(block);
+        }
+
+        _stream.flush();
+        _current_size = 0;
+    }
+
+    /// Flush all remaining BGZF blocks and close source stream.
+    /// Automatically adds empty block at the end, serving as
+    /// indicator of end of stream.
+    override void close() {
+        flush();
+
+        addEofBlock();
+
+        _stream.close();
+
+        writeable = false;
+        std.c.stdlib.free(_compression_buffer.ptr);
+    }
+
+    /// Adds EOF block. This function is called in close() method.
+    void addEofBlock() {
+        _stream.writeExact(BGZF_EOF.ptr, BGZF_EOF.length);    
+    }
+}
+
+unittest {
+    import bio.core.bgzf.inputstream;
+
+    import std.array, std.range, std.stdio;
+
+    char[] data = "my very l" ~ array(repeat('o', 1000000)) ~ "ng string";
+
+    foreach (level; [-1, 0, 1]) {
+        auto output_stream = new MemoryStream();
+        auto bgzf_output_stream = new BgzfOutputStream(output_stream, 1);
+        bgzf_output_stream.writeExact(data.ptr, data.length);
+        bgzf_output_stream.close();
+
+        auto input_stream = new MemoryStream(output_stream.data);
+        input_stream.seekSet(0);
+
+        auto block_supplier = new StreamSupplier(input_stream);
+        auto bgzf_input_stream = new BgzfInputStream(block_supplier);
+        char[] uncompressed_data = new char[data.length];
+        bgzf_input_stream.readExact(uncompressed_data.ptr, data.length);
+        assert(uncompressed_data == data);
+    }
+}
diff --git a/bio/core/bgzf/virtualoffset.d b/bio/core/bgzf/virtualoffset.d
new file mode 100644
index 0000000..7272827
--- /dev/null
+++ b/bio/core/bgzf/virtualoffset.d
@@ -0,0 +1,95 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.bgzf.virtualoffset;
+
+import std.conv;
+
+/// Structure representing virtual offset in BGZF-compressed file.
+struct VirtualOffset {
+    /// Params:
+    ///     
+    ///     coffset =    unsigned byte offset into the BGZF file 
+    ///                  to the beginning of a BGZF block.
+    ///                  Must be strictly less than 2^48.
+    ///
+    ///     uoffset =    unsigned byte offset into the uncompressed
+    ///                  data stream represented by that BGZF block
+    this(ulong coffset, ushort uoffset) nothrow @safe
+    in {
+        assert(coffset < (1UL<<48));
+    } 
+    body {
+        voffset = (coffset << 16) | uoffset;
+    }
+    
+    /// Set both coffset and uoffset packed as (coffset<<16)|uoffset
+    this(ulong voffset) nothrow @safe {
+        this.voffset = voffset;
+    }
+
+    /// ditto
+    ulong coffset() @property const nothrow @safe pure {
+        return voffset >> 16;
+    }
+    
+    /// ditto
+    ushort uoffset() @property const nothrow @safe pure {
+        return voffset & 0xFFFF;
+    }
+
+    int opCmp(const ref VirtualOffset other) const nothrow @safe pure {
+        if (this.voffset > other.voffset) { return  1; }
+        if (this.voffset < other.voffset) { return -1; }
+        return 0;
+    }
+
+    bool opEquals(const ref VirtualOffset other) const nothrow @safe {
+        return this.voffset == other.voffset;
+    }
+
+    bool opEquals(ulong voffset) const nothrow @safe {
+        auto vo = VirtualOffset(voffset);
+        return opEquals(vo);
+    }
+
+    ulong opCast() const nothrow @safe pure {
+        return voffset;
+    }
+
+    /// String representation in format "<coffset>/<uoffset>"
+    string toString() {
+        return to!string(coffset) ~ "/" ~ to!string(uoffset);
+    }
+
+private:
+    ulong voffset;
+}
+
+unittest {
+    auto voffset = VirtualOffset(100500, 42);
+    assert(voffset.coffset == 100500);
+    assert(voffset.uoffset == 42);
+    assert(voffset == (100500UL << 16) + 42UL);
+    assert(cast(ulong)voffset == (100500UL << 16) + 42UL);
+}
diff --git a/bio/core/call.d b/bio/core/call.d
new file mode 100644
index 0000000..488a05c
--- /dev/null
+++ b/bio/core/call.d
@@ -0,0 +1,106 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.call;
+
+import bio.core.base;
+import bio.core.genotype;
+
+/// A genotype call
+struct Call(alias Gt, B) 
+{
+    alias Gt!B G;
+
+    private {
+        string _sample = void;
+        string _chr = void;
+        ulong _pos = void;
+        B _refbase = void;
+        G _gt = void;
+        float _qual = void;
+    }
+
+    /// Constructor
+    this(string sample, string chr, ulong pos,
+         B refbase, G genotype, float quality=float.nan)
+    {
+        _sample = sample;
+        _chr = chr;
+        _pos = pos;
+        _refbase = refbase;
+        _gt = genotype;
+        _qual = quality;
+    }
+
+    /// Sample name
+    string sample() @property const {
+        return _sample;
+    }
+
+    /// Chromosome name
+    string chromosome() @property const {
+        return _chr;
+    }
+
+    /// 0-based position on the reference
+    ulong position() @property const {
+        return _pos;
+    }
+
+    /// Reference base at the site
+    B reference_base() @property const {
+        return _refbase;
+    }
+
+    /// Most probable genotype
+    ref const(G) genotype() @property const {
+        return _gt;
+    }
+
+    ///
+    alias genotype this; 
+
+    /// Phred-scaled quality score. If unknown, set to NaN.
+    float quality() @property const {
+        return _qual;
+    }
+
+    /// Returns true if this call is not a reference one.
+    bool is_variant() @property const {
+        return _gt != G(_refbase);
+    }
+}
+
+alias Call!(DiploidGenotype, Base5) DiploidCall5;
+alias Call!(DiploidGenotype, Base16) DiploidCall;
+alias DiploidCall DiploidCall16;
+
+unittest {
+    auto call = DiploidCall("NA01234", "chr10", 543210,
+                            Base('T'), diploidGenotype(Base('C'), Base('T')),
+                            47.0);
+
+    assert(call.is_variant);
+    assert(call.is_heterozygous);
+    assert(call.reference_base == 'T');
+}
diff --git a/bio/core/fasta.d b/bio/core/fasta.d
new file mode 100644
index 0000000..a1a8249
--- /dev/null
+++ b/bio/core/fasta.d
@@ -0,0 +1,52 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.fasta;
+
+import std.file;
+import std.exception;
+import std.algorithm;
+import std.string;
+
+struct FastaRecord {
+    string header;
+    string sequence;
+}
+
+auto fastaRecords(string filename) {
+
+    static auto toFastaRecord(S)(S str) {
+        auto res = findSplit(str, "\n");
+        auto header = res[0];
+        auto seq = res[2];
+        return FastaRecord(header, removechars(seq, "\n"));
+    }
+
+    string text = cast(string)std.file.read(filename);
+
+    enforce(text.length > 0 && text[0] == '>');
+    text = text[1 .. $];
+
+    auto records = splitter(text, '>');
+    return map!toFastaRecord(records);
+}
diff --git a/bio/core/genotype.d b/bio/core/genotype.d
new file mode 100644
index 0000000..ac20143
--- /dev/null
+++ b/bio/core/genotype.d
@@ -0,0 +1,93 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.genotype;
+
+import bio.core.base;
+import bio.core.tinymap;
+
+/// Holds ordered pair of two alleles
+struct DiploidGenotype(B) {
+
+    mixin TinyMapInterface!(B.ValueSetSize ^^ 2);
+
+    private static ubyte _getCode(B b1, B b2) {
+        auto c1 = b1.internal_code;
+        auto c2 = b2.internal_code;
+        return cast(ubyte)(c1 * B.ValueSetSize + c2);
+    }
+
+    /// Construct a genotype from two bases
+    /// Every ambiguous base gets converted to 'N' internally.
+    this(B b1, B b2) {
+        _code = _getCode(b1, b2);
+    }
+
+    /// Construct homozygous genotype
+    this(B b) {
+        _code = _getCode(b, b);
+    }
+
+    /// First allele
+    B base1() @property const {
+        return B.fromInternalCode(_code / B.ValueSetSize);
+    }
+
+    /// Second allele
+    B base2() @property const {
+        return B.fromInternalCode(_code % B.ValueSetSize);
+    }
+
+    ///
+    bool is_heterozygous() @property const {
+        return base1 != base2;
+    }
+
+    ///
+    bool is_homozygous() @property const {
+        return base1 == base2;
+    }
+
+    /// String representation B1|B2 (TODO: add phasing in future?)
+    string toString() const {
+        return base1 ~ "|" ~ base2;
+    }
+}
+
+/// Create an instance of DiploidGenotype
+auto diploidGenotype(B...)(B bases) {
+    return DiploidGenotype!(B[0])(bases);
+}
+
+unittest {
+    auto g1 = diploidGenotype(Base('C'), Base('W'));
+    assert(g1.base1 == 'C');
+    assert(g1.base2 == 'W');
+
+    // By default, Base5 is used
+    auto g2 = diploidGenotype(Base5('C'));
+    assert(g2.base1 == g2.base2);
+
+    // Both bases must be of the same type
+    static assert(!__traits(compiles, diploidGenotype(Base5('T'), Base16('D'))));
+}
diff --git a/bio/core/kmer.d b/bio/core/kmer.d
new file mode 100644
index 0000000..83111e6
--- /dev/null
+++ b/bio/core/kmer.d
@@ -0,0 +1,113 @@
+module bio.core.kmer;
+
+import bio.core.base;
+import std.range;
+
+/// Represents k-mer of ACGT bases of length no more than 32.
+struct KMer(uint K) 
+    if (K <= 32)
+{
+    private ulong _id;
+
+    static Base5 code2base(int code) {
+        return Base5("ACGT"[code]);
+    }
+
+    static int char2code(char base) {
+        switch (base) {
+            case 'A': return 0;
+            case 'C': return 1;
+            case 'G': return 2;
+            case 'T': return 3;
+            default: return -1;
+        }
+    }
+
+    /// Unique ID
+    ulong id() @property const {
+        return _id;
+    }
+
+    /// Construct by ID
+    this(S)(S id) 
+        if (is(S == ulong))
+    {
+        _id = id;
+    }
+       
+    /// Construct from sequence. Takes bases from the provided sequence
+    /// until K symbols 'A/C/G/T' are found. That is, 'N' and other ambiguous
+    /// bases are skipped.
+    ///
+    /// If sequence does not contain at least K bases 'A/C/G/T', the result of
+    /// operation is undefined.
+    this(S)(S sequence) 
+        if (isInputRange!S) 
+    {
+        size_t i = 0;
+        foreach (nuc; sequence) {
+            _id <<= 2;
+            ++i;
+            switch (cast(char)nuc) {
+                case 'A':
+                    break;
+                case 'C':
+                    _id += 1;
+                    break;
+                case 'G':
+                    _id += 2;
+                    break;
+                case 'T':
+                    _id += 3;
+                    break;
+                default:
+                    _id >>= 2;
+                    --i;
+                    break;
+            }
+
+            if (i == K)
+                break;
+        }
+    }
+
+    struct KMerSequence {
+        this(ulong number) {
+            _n = number;
+        }
+
+        private ulong _n;
+        private size_t _len = K;
+
+        bool empty() @property const { return _len == 0; }
+        void popFront() { --_len; }
+        void popBack() { --_len; _n >>= 2; }
+
+        Base5 opIndex(size_t i) const {
+            return code2base((_n >> (2 * (_len - i - 1))) & 3);
+        }
+
+        size_t length() @property const { return _len; }
+        Base5 front() @property const { return opIndex(0); }
+        Base5 back() @property const { return opIndex(_len - 1); }
+        KMerSequence save() @property const { 
+            KMerSequence _seq = void;
+            _seq._n = _n;
+            _seq._len = _len;
+            return _seq;
+        }
+    }
+
+    /// Sequence corresponding to the k-mer
+    KMerSequence sequence() @property const {
+        return KMerSequence(_id);
+    }
+}
+
+unittest {
+    import std.algorithm;
+    auto kmer = KMer!10("AACGTACGTG");
+    assert(equal(kmer.sequence, "AACGTACGTG"));
+
+    assert(KMer!5(KMer!5(0b1011001001UL).sequence).id == 0b1011001001UL);
+}
diff --git a/bio/core/region.d b/bio/core/region.d
new file mode 100644
index 0000000..d2589bc
--- /dev/null
+++ b/bio/core/region.d
@@ -0,0 +1,234 @@
+
+#line 1 "region.rl"
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.region;
+
+
+#line 26 "region.d"
+static const int region_parser_start = 1;
+static const int region_parser_first_final = 3;
+static const int region_parser_error = 0;
+
+static const int region_parser_en_region = 1;
+
+
+#line 40 "region.rl"
+
+
+import std.conv;
+
+struct Region {
+    string reference;
+    uint beg;
+    uint end;
+}
+
+Region parseRegion(string str) {
+    char* p = cast(char*)str.ptr;
+    char* pe = p + str.length;
+    char* eof = pe;
+    int cs;
+    long uint_value;
+
+    Region region;
+    region.beg = 0;
+    region.end = uint.max;
+
+    
+#line 57 "region.d"
+	{
+	cs = region_parser_start;
+	}
+
+#line 62 "region.rl"
+    
+#line 64 "region.d"
+	{
+	if ( p == pe )
+		goto _test_eof;
+	switch ( cs )
+	{
+goto case; case 1:
+	if ( (*p) < 43u ) {
+		if ( 33u <= (*p) && (*p) <= 41u )
+			goto st3;
+	} else if ( (*p) > 60u ) {
+		if ( 62u <= (*p) && (*p) <= 126u )
+			goto st3;
+	} else
+		goto st3;
+	goto st0;
+st0:
+cs = 0;
+	goto _out;
+st3:
+	if ( ++p == pe )
+		goto _test_eof3;
+goto case; case 3:
+	if ( (*p) == 58u )
+		goto tr3;
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto st3;
+	goto st0;
+tr3:
+#line 29 "region.rl"
+	{ region.reference = str[0 .. p - str.ptr]; }
+	goto st4;
+st4:
+	if ( ++p == pe )
+		goto _test_eof4;
+goto case; case 4:
+#line 100 "region.d"
+	if ( (*p) == 44u )
+		goto tr5;
+	if ( (*p) < 48u ) {
+		if ( 33u <= (*p) && (*p) <= 47u )
+			goto st5;
+	} else if ( (*p) > 57u ) {
+		if ( 58u <= (*p) && (*p) <= 126u )
+			goto st5;
+	} else
+		goto tr5;
+	goto st0;
+st5:
+	if ( ++p == pe )
+		goto _test_eof5;
+goto case; case 5:
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto st5;
+	goto st0;
+tr5:
+#line 25 "region.rl"
+	{ uint_value = 0; }
+#line 26 "region.rl"
+	{ if ((*p) != ',') uint_value *= 10, uint_value += (*p) - '0'; }
+	goto st6;
+tr6:
+#line 26 "region.rl"
+	{ if ((*p) != ',') uint_value *= 10, uint_value += (*p) - '0'; }
+	goto st6;
+st6:
+	if ( ++p == pe )
+		goto _test_eof6;
+goto case; case 6:
+#line 133 "region.d"
+	switch( (*p) ) {
+		case 44u: goto tr6;
+		case 45u: goto tr7;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr6;
+	goto st0;
+tr7:
+#line 30 "region.rl"
+	{ region.beg = to!uint(uint_value - 1); }
+	goto st2;
+st2:
+	if ( ++p == pe )
+		goto _test_eof2;
+goto case; case 2:
+#line 150 "region.d"
+	if ( (*p) == 44u )
+		goto tr2;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr2;
+	goto st0;
+tr2:
+#line 25 "region.rl"
+	{ uint_value = 0; }
+#line 26 "region.rl"
+	{ if ((*p) != ',') uint_value *= 10, uint_value += (*p) - '0'; }
+	goto st7;
+tr8:
+#line 26 "region.rl"
+	{ if ((*p) != ',') uint_value *= 10, uint_value += (*p) - '0'; }
+	goto st7;
+st7:
+	if ( ++p == pe )
+		goto _test_eof7;
+goto case; case 7:
+#line 170 "region.d"
+	if ( (*p) == 44u )
+		goto tr8;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr8;
+	goto st0;
+		default: break;
+	}
+	_test_eof3: cs = 3; goto _test_eof; 
+	_test_eof4: cs = 4; goto _test_eof; 
+	_test_eof5: cs = 5; goto _test_eof; 
+	_test_eof6: cs = 6; goto _test_eof; 
+	_test_eof2: cs = 2; goto _test_eof; 
+	_test_eof7: cs = 7; goto _test_eof; 
+
+	_test_eof: {}
+	if ( p == eof )
+	{
+	switch ( cs ) {
+	case 3: 
+	case 4: 
+	case 5: 
+#line 29 "region.rl"
+	{ region.reference = str[0 .. p - str.ptr]; }
+	break;
+	case 6: 
+#line 30 "region.rl"
+	{ region.beg = to!uint(uint_value - 1); }
+	break;
+	case 7: 
+#line 31 "region.rl"
+	{ region.end = to!uint(uint_value); }
+	break;
+#line 203 "region.d"
+		default: break;
+	}
+	}
+
+	_out: {}
+	}
+
+#line 63 "region.rl"
+
+    return region;
+}
+
+unittest {
+    auto region1 = parseRegion("chr1:1,000-2000");
+    assert(region1.reference == "chr1");
+    assert(region1.beg == 999);
+    assert(region1.end == 2000);
+
+    auto region2 = parseRegion("chr2");
+    assert(region2.reference == "chr2");
+    assert(region2.beg == 0);
+    assert(region2.end == uint.max);
+
+    auto region3 = parseRegion("chr3:1,000,000");
+    assert(region3.reference == "chr3");
+    assert(region3.beg == 999_999);
+    assert(region3.end == uint.max);
+}
diff --git a/bio/core/sequence.d b/bio/core/sequence.d
new file mode 100644
index 0000000..b87b865
--- /dev/null
+++ b/bio/core/sequence.d
@@ -0,0 +1,230 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.sequence;
+
+import bio.core.base;
+
+import std.algorithm;
+import std.range;
+import std.conv;
+import std.traits;
+public import std.array;
+
+/// Identity function
+T identity(T)(auto ref T t) { return t; }
+
+/// Range that allows to unify operations in forward and reverse directions
+/// without virtual function call overhead introduced by $(D inputRangeObject).
+///
+/// $(D reverseTransform) is a function that will be applied to elements
+/// if range is iterated backwards.
+struct ReversableRange(alias reverseTransform=identity, R)
+    if(isBidirectionalRange!R)
+{
+    private 
+    { 
+        bool _rev = void;
+        R _range = void;
+    }
+
+    /// Construct reversable range.
+    ///
+    /// Params:
+    ///     range   =  bidirectional range
+    ///     reverse =  if true, all operations on the range will be as if
+    ///                $(D retro(range)) was used instead of $(D range).
+    this(R range, bool reverse=false) 
+    {
+        _rev = reverse;
+        _range = range;
+    }
+
+    /// Bidirectional range primitives
+    bool empty() @property
+    {
+        return _range.empty;
+    }
+
+    /// ditto
+    auto front() @property
+    {
+        return _rev ? reverseTransform(_range.back) : _range.front;
+    }
+
+    /// ditto
+    auto back() @property
+    {
+        return _rev ? reverseTransform(_range.front) : _range.back;
+    }
+
+    /// ditto
+    void popFront() 
+    { 
+        if (_rev) 
+            _range.popBack(); 
+        else 
+            _range.popFront(); 
+    }
+
+    /// ditto
+    void popBack()
+    {
+        if (_rev)
+            _range.popFront();
+        else
+            _range.popBack();
+    }
+
+    /// ditto
+    auto save() @property
+    {
+        return ReversableRange(_range.save, _rev);
+    }
+
+    /// Reverse of this range
+    ReversableRange reverse() @property {
+        return ReversableRange(_range.save, !_rev);
+    }
+
+    static if(hasLength!R) 
+    {
+        /// If source range has length, the result also has length
+        size_t length() @property
+        {
+            return _range.length;
+        }
+    }
+
+    static if(isRandomAccessRange!R)
+    {
+        /// If source range is a random access range, $(D opIndex) is defined
+        auto opIndex(size_t index)
+        {
+            if (_rev)
+                return reverseTransform(_range[_range.length - 1 - index]);
+            else
+                return _range[index];
+        }
+    }
+
+    static if(hasSlicing!R)
+    {
+        /// Slicing is also propagated
+        auto opSlice(size_t from, size_t to)
+        {
+            if (_rev)
+            {
+                auto len = _range.length;
+                //
+                //  [b, e) -> (len - 1 - e, len - 1 - b] ~ [len - e, len - b)
+                //
+                return ReversableRange(_range[len - to .. len - from], true);
+            }
+            else
+                return ReversableRange(_range[from .. to], false);
+        }
+    }
+}
+
+/// Create reversable range from bidirectional one.
+ReversableRange!(reverseTransform, R)
+reversableRange(alias reverseTransform=identity, R)(R range, bool reverse=false)
+{
+    return typeof(return)(range, reverse);
+}
+
+unittest {
+
+    auto bidir_range = [1, 2, 3, 4, 5];
+    auto rev = reversableRange(bidir_range[], true);
+
+    assert(rev.front == 5);
+    assert(rev[2] == 3);
+    rev.popFront();
+    assert(rev.back == 1);
+    assert(rev.front == 4);
+    assert(equal(rev[1 .. 3], [3, 2]));
+
+    // Here. That's the whole point.
+    // One can't do the same with $(D retro)
+    // without using $(D inputRangeObject),
+    // but that kills performance because
+    // virtual calls can not be inlined.
+    rev = reversableRange(bidir_range[], false);
+
+    assert(rev.front == 1);
+    assert(equal(rev[1 .. 3], [2, 3]));
+}
+
+/// Sequence of bases. Element of reversed range will be complemented.
+template Sequence(R)
+{
+    alias ReversableRange!(complementBase, R) Sequence;
+}
+
+/// Returns an object very similar to string, but sliceable.
+/// Tricks std.traits.isNarrowString.
+auto sliceableString(string s) {
+    return map!"cast(char)a"(cast(ubyte[])s);
+}
+
+///
+alias ReturnType!sliceableString SliceableString;
+
+/// Create nucleotide sequence from bidirectional base range.
+auto nucleotideSequence(R)(R bases, bool reverse=false)
+    if(isBidirectionalRange!R)
+{
+
+    static if(isNarrowString!R)
+    {
+        return nucleotideSequence(sliceableString(bases), reverse);
+    } 
+    else static if(is(Unqual!(ElementType!R) == char) || 
+              is(Unqual!(ElementType!R) == dchar))
+    {
+        return nucleotideSequence(map!(charToBase!Base16)(bases), reverse);
+    }
+    else
+    {
+        return Sequence!R(bases, reverse);
+    }
+}
+
+///
+alias ReturnType!(nucleotideSequence!SliceableString) NucleotideSequence;
+
+unittest {
+    auto seq0 = nucleotideSequence("ACGTACGT");
+
+    // reverse-complement
+    assert(equal(seq0.reverse[2 .. 6], "GTAC"));
+
+    auto seq1 = nucleotideSequence(seq0, true);
+    assert(equal(seq1[1 .. 5], "CGTA"));
+    assert(equal(seq1, map!complementBase(retro(seq0))));
+
+    seq1 = nucleotideSequence(seq0, false);
+    assert(equal(seq1, seq0));
+}
diff --git a/bio/core/tinymap.d b/bio/core/tinymap.d
new file mode 100644
index 0000000..718acf4
--- /dev/null
+++ b/bio/core/tinymap.d
@@ -0,0 +1,312 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.tinymap;
+
+private import std.algorithm;
+private import std.range;
+private import std.traits;
+
+import std.bitmanip;
+
+/// Efficient dictionary for cases when the number of possible keys is small 
+/// and is known at compile-time. The data is held in a static array, no allocations occur.
+///
+/// Key type must:
+///     have static member ValueSetSize (integer)
+///     have static method fromInternalCode (returning an instance of Key type);
+///     have property $(D internal_code) that maps it to integers 0, 1, ..., ValueSetSize - 1
+struct TinyMap(K, V, alias TinyMapPolicy=useBitArray) {
+    private V[K.ValueSetSize] _dict;
+    private size_t _size;
+    private mixin TinyMapPolicy!(K, V) Policy;
+    private alias ReturnType!(K.internal_code) TCode;
+
+    /// Constructor
+    static TinyMap!(K, V, TinyMapPolicy) opCall(Args...)(Args args) {
+        TinyMap!(K, V, TinyMapPolicy) result;
+        result.Policy.init(args);
+        return result;
+    }
+   
+    /// Current number of elements
+    size_t length() @property const {
+        return _size;
+    }
+
+    /// Indexed access
+    auto ref V opIndex(Key)(auto ref Key key)
+        if(is(Unqual!Key == K))
+    {
+        assert(key in this);
+        return _dict[key.internal_code];
+    }
+
+    /// ditto
+    auto ref const(V) opIndex(Key)(auto ref Key key) const
+        if(is(Unqual!Key == K))
+    {
+        assert(key in this);
+        return _dict[key.internal_code];
+    }
+
+
+    /// ditto
+    V opIndexAssign(V value, K key) {
+        if (key !in this) {
+            ++_size;
+        }
+        _dict[key.internal_code] = value;
+        Policy._onInsert(key);
+        return value;
+    }
+
+    /// ditto
+    void opIndexOpAssign(string op)(V value, K key) {
+        if (key !in this) {
+            ++_size;
+            _dict[key.internal_code] = V.init;
+        }
+        mixin("_dict[key.internal_code] " ~ op ~ "= value;");
+        Policy._onInsert(key);
+    }
+
+    /// Check if the key is in the dictionary
+    bool opIn_r(K key) const {
+        return Policy._hasKey(key);
+    }
+
+    /// Removal
+    bool remove(K key) {
+        if (key in this) {
+            --_size;
+            Policy._onRemove(key);
+            return true;
+        }
+        return false;
+    }
+
+    /// Range of keys
+    auto keys() @property const {
+        // FIXME: create nice workaround for LDC bug #217
+        K[] _ks;
+        foreach (i; 0 .. K.ValueSetSize) {
+            if (Policy._hasKeyWithCode(i))
+                _ks ~= K.fromInternalCode(cast(TCode)i);
+        }
+        return _ks;
+    }
+
+    /// Range of values
+    auto values() @property const {
+        V[] _vs;
+        foreach (i; 0 .. K.ValueSetSize) {
+            if (Policy._hasKeyWithCode(i))
+                _vs ~= _dict[i];
+        }
+        return _vs;
+    }
+
+    /// Iteration with foreach
+    int opApply(scope int delegate(V value) dg) {
+        foreach (i; iota(K.ValueSetSize)) {
+            if (Policy._hasKeyWithCode(i)) {
+                auto ret = dg(_dict[i]);
+                if (ret != 0) return ret;
+            }
+        }
+        return 0;
+    }
+
+    /// ditto
+    int opApply(scope int delegate(K key, V value) dg) {
+        foreach (i; iota(K.ValueSetSize)) {
+            if (Policy._hasKeyWithCode(i)) {
+                auto ret = dg(K.fromInternalCode(cast(TCode)i), _dict[i]);
+                if (ret != 0) return ret;
+            }
+        }
+        return 0;
+    }
+}
+
+/// For each possible key store 0 if it's absent in the dictionary,
+/// or 1 otherwise. Bit array is used for compactness.
+///
+/// This is the default option. In this case, size of dictionary is
+/// roughly (V.sizeof + 1/8) * K.ValueSetSize
+mixin template useBitArray(K, V) {
+    private BitArray _value_is_set;
+
+    private void init() {
+        _value_is_set.length = K.ValueSetSize;
+    }
+
+    private bool _hasKey(K key) const {
+        return _value_is_set[key.internal_code];
+    }
+
+    private bool _hasKeyWithCode(size_t code) const {
+        return _value_is_set[code];
+    }
+
+    private void _onInsert(K key) {
+        _value_is_set[key.internal_code] = true;
+    }
+
+    private void _onRemove(K key) {
+        _value_is_set[key.internal_code] = false;
+    }
+}
+
+/// Use default value specified at construction as an indicator
+/// of key absence.
+/// That allows to save K.ValueSetSize bits of memory.
+///
+/// E.g., you might want to use -1 as such indicator if non-negative
+/// numbers are stored in the dictionary.
+mixin template useDefaultValue(K, V) {
+    private V _default_value;
+
+    private void init(V value) {
+        _default_value = value;
+        if (_default_value != V.init) {
+            _dict[] = _default_value;
+        }
+    }
+
+    private bool _hasKey(K key) const {
+        return _dict[key.internal_code] != _default_value;
+    }
+
+    private bool _hasKeyWithCode(size_t code) const {
+        return _dict[code] != _default_value;
+    }
+
+    private void _onInsert(K key) {}
+
+    private void _onRemove(K key) {
+        this[key] = _default_value;
+    }
+}
+
+/// Allows to set up a dictionary which is always full.
+mixin template fillNoRemove(K, V) {
+
+    private void init() {
+        _size = K.ValueSetSize;
+    }
+
+    private void init(V value) {
+        _size = K.ValueSetSize;
+
+        for (size_t i = 0; i < _size; ++i)
+            _dict[i] = value;
+    }
+
+    private bool _hasKey(K key) const {
+        return true;
+    }
+
+    private bool _hasKeyWithCode(size_t code) const {
+        return true;
+    }
+
+    private void _onInsert(K key) {}
+
+    private void _onRemove(K key) {
+        ++_size;
+    }
+}
+
+unittest {
+
+    import std.array;
+    import bio.core.base;
+
+    void test(M)(ref M dict) {
+        auto b1 = Base('A');
+        auto b2 = Base('C');
+        auto b3 = Base('G');
+        auto b4 = Base('T');
+        dict[b1] = 2;
+        dict[b2] = 3;
+        assert(dict.length == 2);
+        assert(dict[b1] == 2);
+        assert(b2 in dict);
+        assert(b3 !in dict);
+        assert(b4 !in dict);
+        dict[b4] = 5;
+        assert(equal(sort(array(dict.values)), [2, 3, 5]));
+        dict.remove(b1);
+        assert(b1 !in dict);
+        assert(dict.length == 2);
+        assert(dict[b2] == 3);
+
+        foreach (k, v; dict) {
+            assert(k in dict);
+            assert(dict[k] == v);
+        }
+    }
+
+    auto dict1 = TinyMap!(Base, int)();
+    auto dict2 = TinyMap!(Base, int, useDefaultValue)(-1);
+    int[Base] dict3;
+
+    test(dict1);
+    test(dict2);
+    test(dict3);
+
+    auto dict4 = TinyMap!(Base, ulong[4])();
+    dict4[Base('A')] = [0, 1, 2, 3];
+    dict4[Base('A')][3] += 1;
+    assert(dict4[Base('A')] == [0, 1, 2, 4]);
+}
+
+/// Convenient mixin template for getting your struct working with TinyMap.
+///
+/// Creates
+///     1) private member of type T with name _code
+///     2) fromInternalCode static method
+///     3) internal_code property
+///     4) static member ValueSetSize equal to N
+///     5) invariant that _code is always less than ValueSetSize
+///
+/// That is, the only thing which implementation is up to you is
+/// setting _code appropriately.
+mixin template TinyMapInterface(uint N, T=ubyte) if (isUnsigned!T) {
+    private T _code;
+
+    enum ValueSetSize = N;
+    static assert(N <= 2 ^^ (T.sizeof * 8));
+
+    static typeof(this) fromInternalCode(T code) {
+        typeof(this) obj = void;
+        obj._code = code;
+        return obj;
+    }
+
+    T internal_code() @property const {
+        return _code;
+    }
+}
diff --git a/bio/core/utils/algo.d b/bio/core/utils/algo.d
new file mode 100644
index 0000000..1916dde
--- /dev/null
+++ b/bio/core/utils/algo.d
@@ -0,0 +1,162 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2014    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.utils.algo;
+
+import std.traits;
+import std.range;
+import std.algorithm;
+import std.array;
+
+
+/**
+  This function is supposed to be used on a small amount of objects,
+  typically tags of the same alignment. Therefore it runs in O(N^2)
+  but doesn't require any memory allocations.
+*/
+bool allDistinct(Range)(Range r) {
+    uint sz = 0;
+    uint eq = 0;
+    foreach (e1; r) {
+        ++sz;
+        foreach (e2; r) {
+            if (e1 == e2) {
+                eq += 1;
+            }
+        }
+    }
+    return sz == eq;
+}
+
+private import std.algorithm;
+static if (!__traits(compiles, any!"a == 2"([1,2,3]))) {
+
+    import std.functional;
+
+    /// check if all elements satisfy the condition
+    bool all(alias F, R)(R r) {
+        foreach (e; r) {
+            if (!unaryFun!F(e)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /// check if any element satisfies the condition
+    bool any(alias F, R)(R r) {
+        foreach (e; r) {
+            if (unaryFun!F(e)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+import std.functional;
+
+auto argmax(alias func, S)(S set) {
+    auto best_elem = set.front;
+    auto best_value = unaryFun!func(best_elem);
+
+    set.popFront();
+    foreach (elem; set) {
+        auto value = unaryFun!func(elem);
+        if (value > best_value) {
+            best_value = value;
+            best_elem = elem;
+        }
+    }
+
+    return best_elem;
+}
+
+struct NonOverlappingChunks(R, alias begFunc, alias endFunc) {
+
+    this(R r) {
+        _range = r;
+        popFront();
+    }
+
+    bool empty() @property {
+        return _empty;
+    }
+
+    auto front() @property {
+        return _front;
+    }
+
+    void popFront() {
+        if (!_range.empty()) {
+            _front = _range.front;
+            tryToJoinWithNextChunks();
+        } else {
+            _empty = true;
+        }
+    }
+
+private:
+
+    R _range;
+
+    void tryToJoinWithNextChunks() {
+        _range.popFront();
+        while (!_range.empty()) {
+            /// Get next element
+            auto next = _range.front;
+            /// It's presumed that chunks are sorted
+            assert(next >= _front);
+            /// Check if the chunk can be joined with the previous one
+            if (endFunc(_front) >= begFunc(next)) {
+                /// update end of _front
+                endFunc(_front) = max(endFunc(_front), endFunc(next));
+                _range.popFront(); /// next is consumed
+            } else {
+                /// can't join
+                break;
+            }
+        }
+    }
+
+    Unqual!(ElementType!R) _front;
+    bool _empty = false;
+}
+
+/// $(D begFunc) and $(D endFunc) must take a reference to the object
+/// and return references to the field.
+/// FIXME: the design is ugly.
+/// Params: 
+///      r - range of chunks, sorted by leftmost coordinate
+/// Returns:
+///      range of non-overlapping chunks, covering the same subset
+///      as original chunks
+NonOverlappingChunks!(R, begFunc, endFunc)
+nonOverlapping(alias begFunc, alias endFunc, R)(R r) 
+    if (__traits(compiles, {
+	if (begFunc(r.front) == endFunc(r.front))
+	    endFunc(r.front) = begFunc(r.front);
+    }))
+{
+    return NonOverlappingChunks!(R, begFunc, endFunc)(r);
+}
diff --git a/bio/core/utils/bylinefast.d b/bio/core/utils/bylinefast.d
new file mode 100644
index 0000000..50fb756
--- /dev/null
+++ b/bio/core/utils/bylinefast.d
@@ -0,0 +1,142 @@
+/// Kudos to Juan Manuel Cabo
+/// http://forum.dlang.org/post/cddkatcqmdtibcmfljff@forum.dlang.org
+///
+/// This piece of code is in public domain.
+module bio.core.utils.bylinefast;
+
+import std.stdio;
+import std.string: indexOf;
+import std.c.string: memmove;
+
+/**
+   Reads by line in an efficient way (10 times faster than File.byLine from std.stdio).
+   This is accomplished by reading entire buffers (fgetc() is not used),
+   and allocating as little as possible.
+
+   The char \n is considered as separator, removing the previous \r if it exists.
+
+   The \n is never returned. The \r is not returned if it was
+   part of a \r\n (but it is returned if it was by itself).
+
+   The returned string is always a substring of a temporary
+   buffer, that must not be stored. If necessary, you must
+   use str[] or .dup or .idup to copy to another string.
+
+   Example:
+
+   File f = File("file.txt");
+   foreach (string line; ByLineFast(f)) {
+       ...process line...
+       //Make a copy:
+       string copy = line[];
+   }
+
+   The file isn't closed when done iterating, unless it was the only reference to
+   the file (same as std.stdio.byLine). (example: ByLineFast(File("file.txt"))).
+*/
+struct ByLineFast {
+    File file;
+    char[] line;
+    bool first_call = true;
+    char[] buffer;
+    char[] strBuffer;
+
+    this(File f, int bufferSize=4096) {
+        assert(bufferSize > 0);
+        file = f;
+        buffer.length = bufferSize;
+    }
+
+    @property bool empty() const {
+        //Its important to check "line !is null" instead of
+        //"line.length != 0", otherwise, no empty lines can
+        //be returned, the iteration would be closed.
+        if (line !is null) {
+            return false;
+        }
+        if (!file.isOpen) {
+            //Clean the buffer to avoid pointer false positives:
+            (cast(char[])buffer)[] = 0;
+            return true;
+        }
+
+        //First read. Determine if it's empty and put the char back.
+            auto mutableFP = (cast(File*) &file).getFP();
+        auto c = fgetc(mutableFP);
+        if (c == -1) {
+            //Clean the buffer to avoid pointer false positives:
+            (cast(char[])buffer)[] = 0;
+            return true;
+        }
+        if (ungetc(c, mutableFP) != c) {
+            assert(false, "Bug in cstdlib implementation");
+        }
+        return false;
+    }
+
+    @property char[] front() {
+        if (first_call) {
+            popFront();
+            first_call = false;
+        }
+        return line;
+    }
+
+    void popFront() {
+        if (strBuffer.length == 0) {
+            strBuffer = file.rawRead(buffer);
+            if (strBuffer.length == 0) {
+                file.detach();
+                line = null;
+                return;
+            }
+        }
+
+        long pos = strBuffer.indexOf('\n');
+        if (pos != -1) {
+            if (pos != 0 && strBuffer[cast(size_t)pos-1] == '\r') {
+                line = strBuffer[0 .. cast(size_t)(pos-1)];
+            } else {
+                line = strBuffer[0 .. cast(size_t)pos];
+            }
+            //Pop the line, skipping the terminator:
+            strBuffer = strBuffer[cast(size_t)(pos+1) .. $];
+        } else {
+            //More needs to be read here. Copy the tail of the buffer
+            //to the beginning, and try to read with the empty part of
+            //the buffer.
+            //If no buffer was left, extend the size of the buffer before
+            //reading. If the file has ended, then the line is the entire
+            //buffer.
+
+            if (strBuffer.ptr != buffer.ptr) {
+                //Must use memmove because there might be overlap
+                memmove(buffer.ptr, strBuffer.ptr,
+                        strBuffer.length * char.sizeof);
+            }
+            auto spaceBegin = strBuffer.length;
+            if (strBuffer.length == buffer.length) {
+                //Must extend the buffer to keep reading.
+                assumeSafeAppend(buffer);
+                buffer.length = buffer.length * 2;
+            }
+            char[] readPart = file.rawRead(buffer[spaceBegin .. $]);
+            if (readPart.length == 0) {
+                //End of the file. Return whats in the buffer.
+                //The next popFront() will try to read again, and then
+                //mark empty condition.
+                if (spaceBegin != 0 && buffer[spaceBegin-1] == '\r') {
+                    line = buffer[0 .. spaceBegin-1];
+                } else {
+                    line = buffer[0 .. spaceBegin];
+                }
+                strBuffer = null;
+                return;
+            }
+            strBuffer = buffer[0 .. spaceBegin + readPart.length];
+            //Now that we have new data in strBuffer, we can go on.
+            //If a line isn't found, the buffer will be extended again to read more.
+            popFront();
+        }
+    }
+}
diff --git a/bio/core/utils/format.d b/bio/core/utils/format.d
new file mode 100644
index 0000000..ae8b4e6
--- /dev/null
+++ b/bio/core/utils/format.d
@@ -0,0 +1,312 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+/**
+  $(P This module provides fast formatting functions.)
+
+  $(P Each function has two overloads:
+    $(UL
+        $(LI $(D ref char*) - in this case, function starts
+            writing at the location, and updates the pointer.
+            No checks are done, it's user's responsibility that this is safe.)
+        $(LI $(D scope void delegate(const(char)[])) - formatted data 
+            is passed to the delegate for further processing.)))
+ */
+module bio.core.utils.format;
+
+import std.c.stdio;
+import std.c.stdlib;
+import std.string;
+import std.traits;
+import std.array;
+import std.math;
+
+private {
+    // Reverses closed interval [begin .. end]
+    void strreverse(char* begin, char* end)
+    {
+        char aux;
+        while (end > begin)
+            aux = *end, *end-- = *begin, *begin++ = aux;
+    }
+
+    // Prints $(D value) at the address where $(D str) points to.
+    // Returns number of characters written.
+    size_t itoa(T)(T value, char* str)
+    {
+        char* wstr=str;
+
+        static if (isSigned!T) { 
+            ulong uvalue = (value < 0) ? -value : value;
+        } else {
+            ulong uvalue = value;
+        }
+
+        do {
+            *wstr++ = cast(char)(48 + (uvalue % 10)); 
+        } while (uvalue /= 10);
+
+        static if (isSigned!T) {
+            if (value < 0) *wstr++ = '-';
+        }
+
+        strreverse(str,wstr-1);
+
+        return wstr - str;
+    }
+}
+
+///
+template isSomeSink(T) {
+    static if (__traits(compiles, T.init("string")))//T == void delegate(const(char)[])))
+        enum isSomeSink = true;
+    else static if (is(T == char*))
+        enum isSomeSink = true;
+    else
+        enum isSomeSink = false;
+}
+
+private {
+    void writeFloat(T)(ref char* sink, T number) 
+        if (isFloatingPoint!T)
+    {
+        char[4] format;
+        format[0] = '%';
+        format[1] = 'g';
+        format[2] = '\0';
+        sink += sprintf(sink, format.ptr, number);
+    }
+
+    void writeFloat(T)(scope void delegate(const(char)[]) sink, T number) 
+        if (isFloatingPoint!T)
+    {
+        char[1024] buffer = void;
+        int count;
+
+        auto p = buffer.ptr;
+        auto psize = buffer.length;
+        for (;;)
+        {
+            version(Win32)
+            {
+                count = _snprintf(p,psize,"%g", cast(double)number);
+                if (count != -1)
+                    break;
+                psize *= 2;
+                p = cast(char *) alloca(psize);
+            }
+            version(Posix)
+            {
+                count = snprintf(p,psize,"%g", cast(double)number);
+                if (count == -1)
+                    psize *= 2;
+                else if (count >= psize)
+                    psize = count + 1;
+                else
+                    break;
+                p = cast(char *) alloca(psize);
+            }
+        }
+
+        sink(p[0 .. count]);
+    }
+
+    void writeInteger(T)(ref char* sink, T integer)
+        if (isIntegral!T)
+    {
+        sink += itoa(integer, sink);
+    }
+
+    void writeInteger(T)(scope void delegate(const(char)[]) sink, T integer) 
+        if (isIntegral!T)
+    {
+        char[32] buf = void;
+        auto len = itoa(integer, buf.ptr);
+        sink(buf[0 .. len]);
+    }
+
+    void writeChar(T)(ref char* sink, T c)
+        if (isSomeChar!T)
+    {
+        *sink++ = c;
+    }
+
+    void writeChar(T)(scope void delegate(const(char)[]) sink, T c) 
+        if (isSomeChar!T)
+    {
+        sink((&c)[0 .. 1]);
+    }
+
+    void writeString(T)(ref char* sink, T s)
+        if (isSomeString!T)
+    {
+        auto str = cast(const(char)[])s;
+        std.c.string.memcpy(sink, str.ptr, str.length);
+        sink += str.length;
+    }
+
+    void writeString(T)(scope void delegate(const(char)[]) sink, T s)
+        if (isSomeString!T)
+    {
+        sink(cast(const(char)[])s);
+    }
+
+    void writeImpl(Sink, T)(auto ref Sink sink, T value) 
+        if (isSomeSink!Sink)
+    {
+        static if (isIntegral!T)
+            writeInteger(sink, value);
+        else static if (isFloatingPoint!T)
+            writeFloat(sink, value);
+        else static if (isSomeChar!T)
+            writeChar(sink, value);
+        else static if (isSomeString!T)
+            writeString(sink, value);
+        else static assert(false, 
+                    "only integers, floats, chars and strings are supported");
+    }
+
+    // -------------------- JSON output utils ----------------------------------
+
+    // JSON doesn't support NaN and +/- infinity.
+    // Therefore the approach taken here is to represent
+    // infinity as 1.0e+1024, and NaN as null.
+    void writeFloatJson(Sink, T)(auto ref Sink sink, T value) 
+        if (isFloatingPoint!T)
+    {
+        if (isFinite(value)) {
+            sink.write(value);
+        } else {
+            if (value == float.infinity) {
+                sink.write("1.0e+1024");
+            } else if (value == -float.infinity) {
+                sink.write("-1.0e+1024");
+            } else if (isNaN(value)) {
+                sink.write("null");
+            } else {
+                assert(0);
+            }
+        }
+    }
+
+    immutable char[256] specialCharacterTable = [
+    /*   0-15  */    0,0,  0,0,0,0,0,0, 'b','t','n',0, 'f','r',0,  0, 
+    /*  16-31  */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,   0,  0,0,  0,
+    /*  32-47  */    0,0,'"',0,0,0,0,0,   0,  0,  0,0,   0,  0,0,  0, 
+    /*  48-63  */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,   0,  0,0,'/', 
+    /*  64-79  */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,   0,  0,0,  0,
+    /*  80-95  */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,'\\',  0,0,  0, 
+    /*  96-111 */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,   0,  0,0,  0,
+    /* 112-127 */    0,0,  0,0,0,0,0,0,   0,  0,  0,0,   0,  0,0,  0,
+
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+                     0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0
+    ];
+
+    void writeStringJson(Sink, T)(auto ref Sink sink, T s) 
+        if (isSomeString!T)
+    {
+        sink.write('"');
+        foreach (char c; s) {
+            auto sc = specialCharacterTable[cast(ubyte)c];
+            if (sc == 0) {
+                sink.write(c);
+            } else {
+                sink.write('\\');
+                sink.write(sc);
+            }
+        }
+        sink.write('"');
+    }
+
+    void writeCharJson(Sink, T)(auto ref Sink sink, T c)
+        if (isSomeChar!T)
+    {
+        sink.writeStringJson((&c)[0 .. 1]);
+    }
+
+    void writeArrayJson(Sink, T)(auto ref Sink sink, T array)
+        if (isArray!T && __traits(compiles, sink.writeJson(array[0])))
+    {
+        if (array.length == 0) {
+            sink.write("[]");
+            return;
+        }
+
+        sink.write('[');
+        foreach (elem; array[0 .. $ - 1]) {
+            sink.writeJson(elem);
+            sink.write(',');
+        }
+        sink.writeJson(array[$ - 1]);
+        sink.write(']');
+    }
+
+    void writeJsonImpl(Sink, T)(auto ref Sink sink, T value) 
+        if (isSomeSink!Sink)
+    {
+        static if (isIntegral!T)
+            writeInteger(sink, value);
+        else static if (isFloatingPoint!T)
+            writeFloatJson(sink, value);
+        else static if (isSomeChar!T)
+            writeCharJson(sink, value);
+        else static if (isSomeString!T)
+            writeStringJson(sink, value);
+        else static if (isArray!T && __traits(compiles, sink.writeJsonImpl(value[0])))
+            writeArrayJson(sink, value);
+        else static assert(false, 
+                    "only numbers, chars, strings and arrays are supported");
+    }
+}
+
+///
+void write(T)(ref char* sink, T value) { writeImpl(sink, value); }
+///
+void write(T)(scope void delegate(const(char)[]) sink, T value) { writeImpl(sink, value); }
+
+///
+void writeArray(Sink, T, U)(auto ref Sink sink, T array, U delimiter)
+    if (isSomeSink!Sink && isArray!T && (isSomeChar!U || isSomeString!U) && 
+        __traits(compiles, sink.write(array[0])))
+{
+    if (array.length == 0)
+        return;
+
+    foreach (elem; array[0 .. $ - 1]) {
+        sink.write(elem);
+        sink.write(delimiter);
+    }
+    sink.write(array[$ - 1]);
+}
+
+/// Supports numbers, strings, and arrays. No dictionary - because D doesn't have a good one.
+void writeJson(T)(ref char* sink, T value) { writeJsonImpl(sink, value); }
+/// ditto
+void writeJson(T)(scope void delegate(const(char)[]) sink, T value) { writeJsonImpl(sink, value); }
diff --git a/bio/core/utils/memoize.d b/bio/core/utils/memoize.d
new file mode 100644
index 0000000..81da494
--- /dev/null
+++ b/bio/core/utils/memoize.d
@@ -0,0 +1,272 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.utils.memoize;
+
+import std.traits;
+import std.typecons;
+
+debug {
+    import std.stdio;
+}
+
+///
+interface Cache(K, V) {
+    ///
+    V* lookup(K key);
+
+    ///
+    void put(K key, V value);
+}
+
+/// Elements are not removed from the cache.
+class BasicCache(uint maxItems, K, V) : Cache!(K, V) {
+    private V[K] cache; 
+
+    V* lookup(K key) {
+        return key in cache;
+    }
+
+    void put(K key, V value) {
+        cache[key] = value;
+    }
+}
+
+/// First-in first-out element removal.
+class FifoCache(uint maxItems, K, V) : Cache!(K, V) {
+    private V[K] cache; 
+    private int items = 0;
+    bool full = false;
+    private K[maxItems] keys; // cyclic queue
+    private uint removals;
+
+    V* lookup(K key) {
+        return key in cache;
+    }
+
+    void put(K key, V value) {
+        cache[key] = value;
+
+        if (full) {
+            cache.remove(keys[items]);
+            removals += 1;
+
+            if (removals % maxItems == 0) {
+                cache.rehash;
+            }
+        }
+
+        keys[items] = key;
+        items += 1;
+
+        if (items == maxItems) {
+            full = true;
+            items = 0;
+        }
+    }
+}
+
+/// Least used strategy
+class LuCache(uint maxItems, K, V) : Cache!(K, V) {
+    private {
+        V[K] cache;
+        int[K] counter;
+        uint removals;
+    }
+
+    V* lookup(K key) {
+        auto result = key in cache;
+        if (result !is null) {
+            counter[key] += 1;
+        }
+        return result;
+    }
+
+    void put(K key, V value) {
+        if (counter.length >= maxItems) {
+            // delete one element before inserting next
+            int min = int.max;
+            K min_key;
+            foreach (k, i; counter) {
+                if (i < min) {
+                    min = i;
+                    min_key = k;
+                }
+            }
+            
+            cache.remove(min_key);
+            counter.remove(min_key);
+            removals += 1;
+
+            if (removals % maxItems == 0) {
+                cache.rehash;
+                counter.rehash;
+            }
+        }
+        cache[key] = value;
+        counter[key] = 1;
+    }
+}
+
+version(unittest) {
+    /// keeps number of function evaluations
+    static shared evaluations = 0;
+    static shared int hits = 0;
+    static shared int misses = 0;
+
+    import std.stdio;
+    import core.atomic;
+    void printStats() {
+        writeln("hits: ", hits, " misses: ", misses);
+    }
+}
+
+auto memoize(alias func, uint maxItems=1024,
+             alias CacheImpl=BasicCache, Args...)(Args args)
+    if(isCallable!func && is(Args == ParameterTypeTuple!func)
+                       && Args.length > 0) 
+{
+    alias ReturnType!func R; 
+
+    static if (Args.length == 1) {
+        static shared(CacheImpl!(maxItems, Args, R)) cache;
+    } else {
+        static shared(CacheImpl!(maxItems, Tuple!Args, R)) cache;
+    }
+    static shared bool init = false;
+
+    if (!init) {
+        synchronized {
+            if (cache is null) {
+                static if (Args.length == 1) {
+                    cache = new shared(CacheImpl!(maxItems, Args, R))();
+                } else {
+                    cache = new shared(CacheImpl!(maxItems, Tuple!Args, R))();
+                }
+            }
+            init = true;
+        }
+    }
+
+    static if (Args.length == 1) {
+        auto key = args;
+    } else {
+        auto key = tuple(args);
+    }
+
+    R* ret = (cast()cache).lookup(key);
+    if (ret !is null) {
+        version(unittest) {
+            atomicOp!"+="(hits, 1);
+        }
+        return *ret;
+    } else {
+        version(unittest) {
+            atomicOp!"+="(misses, 1);
+        }
+        synchronized(cache) {
+
+            ret = (cast()cache).lookup(key);
+            if (ret !is null) {
+                return *ret;
+            }
+
+            version(unittest) {
+                evaluations.atomicOp!"+="(1);
+            }
+
+            auto result = func(args);
+            (cast()cache).put(key, result);
+            return result;
+        }
+    }
+}
+
+unittest {
+
+    import core.thread;
+
+    evaluations = 0;
+    /// very simple function for testing
+    int func(int x, int y) {
+        return x * y;
+    }
+
+    /// 4 different argument values in total
+    void thread_func() {
+        memoize!func(5, 10);
+        memoize!func(3, 7);
+        memoize!func(6, 4);
+        memoize!func(5, 10);
+        memoize!func(7, 9);
+    }
+    
+    Thread[] threads = new Thread[5];
+    foreach (i; 0 .. 5) threads[i] = new Thread(&thread_func);
+    foreach (i; 0 .. 5) threads[i].start();
+    foreach (i; 0 .. 5) threads[i].join();
+
+    /// number of evaluations must be the same as number of 
+    /// different argument values (4 in this case)
+    assert(evaluations == 4);
+
+    /// test FIFO cache
+    alias memoize!(func, 2, FifoCache, int, int) fifomemoize;
+    evaluations = 0;
+
+    fifomemoize(1, 5); // 5
+    fifomemoize(2, 3); // 5 6
+    fifomemoize(2, 4); // 6 8
+    fifomemoize(1, 5); // 8 5
+    assert(evaluations == 4);
+    fifomemoize(2, 4); // 8 5
+    assert(evaluations == 4);
+    fifomemoize(1, 7); // 5 7
+    fifomemoize(1, 5); // 5 7
+    assert(evaluations == 5);
+
+    int foo(int x) {
+        return x;
+    }
+    /// Test LU cache
+    alias memoize!(foo, 3, LuCache, int) lumemoize;
+    evaluations = 0;
+
+    lumemoize(1);
+    lumemoize(1);
+    lumemoize(1); // 1
+    lumemoize(2);
+    lumemoize(2); // 1, 2
+    lumemoize(3);
+    lumemoize(3);
+    lumemoize(3); // 1, 2, 3
+    lumemoize(4); // 2 -> 4
+    lumemoize(2); // 4 -> 2
+    assert(evaluations == 5);
+    lumemoize(3); // 1, 2, 3
+    lumemoize(5); // 2 -> 5
+    assert(evaluations == 6);
+    lumemoize(4); // 5 -> 4
+    lumemoize(9); // 4 -> 9
+    assert(evaluations == 8);
+}
diff --git a/bio/core/utils/outbuffer.d b/bio/core/utils/outbuffer.d
new file mode 100644
index 0000000..56c0879
--- /dev/null
+++ b/bio/core/utils/outbuffer.d
@@ -0,0 +1,108 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.utils.outbuffer;
+
+import std.array;
+import std.exception;
+
+///
+class OutBuffer {
+    private {
+        ubyte[] _heap;
+
+        ubyte* _heap_ptr() @property { return _heap.ptr; }
+        size_t _heap_used;
+        size_t _heap_capacity;
+    }
+
+    ///
+    this(size_t initial_capacity) {
+        _heap = uninitializedArray!(ubyte[])(initial_capacity);
+        _heap_capacity = initial_capacity;
+    }
+
+    ///
+    ubyte[] data() @property {
+        return _heap_ptr[0 .. _heap_used];
+    }
+
+    ///
+    size_t length() @property const {
+        return _heap_used;
+    }
+
+    /// Remove last elements such that new size is equal to $(D size).
+    void shrink(size_t size) {
+        enforce(size <= length);
+        _heap_used = size;
+    }
+
+    ///
+    size_t capacity() @property const {
+        return _heap_capacity;
+    }
+    
+    /// ditto
+    void capacity(size_t new_capacity) @property {
+        if (new_capacity <= _heap_capacity)
+            return;
+
+        _heap.length = new_capacity;
+        _heap_capacity = new_capacity;
+    }
+        
+    ///
+    void put(T)(T bytes) if (is(T == ubyte[])) {
+        size_t needed = bytes.length + _heap_used;
+        if (needed > _heap_capacity) {
+            do {
+                _heap_capacity = _heap_capacity * 3 / 2;
+            } while (_heap_capacity < needed);
+            capacity = _heap_capacity;
+        }
+        _heap_ptr[_heap_used .. _heap_used + bytes.length] = bytes[];
+        _heap_used = needed;
+    }
+
+    /// Dumps raw bytes into the buffer. No endianness conversion or whatever.
+    void put(T)(auto ref T value) if (!is(T == ubyte[])) {
+        put((cast(ubyte*)(&value))[0 .. T.sizeof]);
+    }
+
+    /// Responsibility that there's enough capacity is on the user
+    void putUnsafe(T)(T bytes) if (is(T == ubyte[])) {
+        _heap_ptr[_heap_used .. _heap_used + bytes.length] = bytes[];
+        _heap_used += bytes.length;;
+    }
+
+    /// ditto
+    void putUnsafe(T)(auto ref T value) if (!is(T == ubyte[])) {
+        putUnsafe((cast(ubyte*)(&value))[0 .. T.sizeof]);
+    }
+
+    ///
+    void clear() {
+        _heap_used = 0;
+    }
+}
diff --git a/bio/core/utils/range.d b/bio/core/utils/range.d
new file mode 100644
index 0000000..c3a2f45
--- /dev/null
+++ b/bio/core/utils/range.d
@@ -0,0 +1,280 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.utils.range;
+
+import bio.core.utils.roundbuf;
+
+import std.range;
+import std.exception;
+import std.algorithm;
+import std.parallelism;
+import std.functional;
+import std.array;
+
+/// Keeps a cyclic buffer of size $(D amount)
+/// which is filled at the construction.
+/// After that, each popFront() is accompanied
+/// by fetching next element from the original range.
+///
+/// The function is useful when, for instance, range of Tasks
+/// is being decorated, because it allows to keep a certain amount
+/// of them being executed simultaneously, utilizing all
+/// CPU cores.
+auto prefetch(Range)(Range r, size_t amount) {
+
+    enforce(amount > 0, "Amount of elements to prefetch must be positive");
+
+    struct Result {
+        alias ElementType!Range E;
+
+        this(Range range, size_t amount) {
+            _roundbuf = RoundBuf!E(amount);
+            _range = range;
+            foreach (i; 0 .. amount) {
+                if (_range.empty) {
+                    break;
+                }
+                _roundbuf.put(_range.front);
+                _range.popFront();
+            }
+        }
+        
+        bool empty() @property {
+            return _range.empty && _roundbuf.empty;
+        }
+        
+        auto ref front() @property {
+            return _roundbuf.front;
+        }
+
+        void popFront() @property {
+            assert(!_roundbuf.empty);
+
+            if (_range.empty) {
+                _roundbuf.popFront();
+                return;
+            }
+
+            _roundbuf.popFront();
+            _roundbuf.put(_range.front);
+
+            _range.popFront();
+        }
+    private:
+        Range _range;
+        RoundBuf!E _roundbuf;
+    }
+
+    return Result(r, amount);
+}
+
+///
+struct Cached(R) {
+    private {
+        alias ElementType!R E;
+        R _range;
+        E _front;
+        bool _empty;
+    }
+
+    this(R range) {
+        _range = range;
+        popFront();
+    }
+
+    auto front() { return _front; }
+    bool empty() { return _empty; }
+    void popFront() {
+        if (_range.empty) {
+            _empty = true;
+        } else {
+            _front = _range.front;
+            _range.popFront();
+        }
+    }
+}
+
+/// Caches front element.
+auto cached(R)(R range) {
+    return Cached!R(range);
+}
+
+unittest {
+    import std.algorithm;
+
+    ubyte[] emptyrange = [];
+    assert(equal(emptyrange, prefetch(emptyrange, 42)));
+
+    auto range = [1, 2, 3, 4, 5];
+    assert(equal(range, prefetch(range, 1)));
+    assert(equal(range, prefetch(range, 3)));
+    assert(equal(range, prefetch(range, 5)));
+    assert(equal(range, prefetch(range, 7)));
+
+    assert(equal(range, cached(range)));
+}
+
+/// Takes arbitrary input range as an input and returns
+/// another range which produces arrays of original elements
+/// of size $(D chunk_size).
+///
+/// Useful for setting granularity in parallel applications.
+/// $(D std.algorithm.joiner) composed with $(D chunked) 
+/// produces same elements as were in the original range.
+/// 
+/// The difference from $(D std.range.chunks) is that
+/// any input range is allowed, no slicing or length is required.
+/// The cost is memory allocations for chunks.
+auto chunked(R)(R range, uint chunk_size) {
+
+    alias ElementType!R E;
+
+    struct Result {
+
+        this(R range, uint chunk_size) {
+            enforce(chunk_size > 0);
+            this.range = range;
+            this.chunk_size = chunk_size; 
+            fillBuffer();
+        }
+
+        bool empty() @property {
+            return buffer.length == 0;
+        }
+
+        E[] front() @property {
+            return buffer;    
+        }
+
+        void popFront() {
+            fillBuffer();
+        }
+
+    private:
+        R range;
+        uint chunk_size;
+
+        E[] buffer;
+
+        void fillBuffer() {
+            buffer = uninitializedArray!(E[])(chunk_size);
+            for (auto i = 0; i < chunk_size; i++) {
+                if (range.empty) {
+                    buffer.length = i;
+                    break;
+                }
+                buffer[i] = range.front;
+                range.popFront();
+            }
+        }
+    }
+
+    return Result(range, chunk_size);
+}
+
+unittest {
+    import std.algorithm;
+
+    assert(equal(chunked(iota(1, 6), 2), [[1, 2], [3, 4], [5]]));
+    assert(equal(chunked(iota(1, 7), 2), [[1, 2], [3, 4], [5, 6]]));
+    assert(equal(chunked([1], 10), [[1]]));
+    assert(equal(chunked(iota(1, 10), 7), [[1, 2, 3, 4, 5, 6, 7], [8,9]]));
+
+    auto r = iota(25);
+    assert(equal(joiner(chunked(r, 7)), r));
+} 
+
+/// Version of parallel map using cyclic buffer with prefetching.
+/// Uses combination of chunked, prefetch, joiner, and std.parallelism.
+///
+/// The analogue in Haskell is Control.Parallel.Strategies.parBuffer
+/// 
+/// Params:
+///     prefetch_amount -   how many chunks will be prefetched
+///     chunk_size      -   the maximum size of each chunk
+auto parallelTransform(alias func, Range)(Range r, 
+                                          uint chunk_size=1, 
+                                          uint prefetch_amount=totalCPUs-1)
+{
+    alias ElementType!Range E;
+
+    static auto createTask(E[] elements) {
+        auto task =  task!(pipe!(map!(unaryFun!func), array))(elements);
+        taskPool.put(task);
+        return task;
+    }
+
+    if (prefetch_amount == 0) {
+        prefetch_amount = 1;
+    }
+
+    auto chunks = chunked(r, chunk_size);
+    auto tasks = map!createTask(chunks);
+    auto prefetched = prefetch(tasks, prefetch_amount);
+    return joiner(map!"a.yieldForce()"(prefetched));
+}
+
+unittest {
+    auto range = iota(100);
+    assert(equal(parallelTransform!"a * a"(range), map!"a * a"(range)));
+}
+
+struct PrefixSum(S) {
+    private {
+        S _sequence;
+        ElementType!S _sum;
+    }
+
+    this(S sequence) {
+        _sequence = sequence;
+        if (!_sequence.empty) {
+            _sum = _sequence.front;
+        }
+    }
+
+    bool empty() @property {
+        return _sequence.empty;
+    }
+
+    ElementType!S front() @property {
+        return _sum;
+    }
+
+    void popFront() {
+        _sequence.popFront();
+        if (!_sequence.empty) {
+            _sum += _sequence.front;
+        }
+    }
+}
+
+/// Prefix sum.
+PrefixSum!S prefixSum(S)(S sequence) {
+    return PrefixSum!S(sequence);
+}
+
+unittest {
+    auto range = iota(5);
+    assert(equal(prefixSum(range), [0, 1, 3, 6, 10]));
+}
diff --git a/bio/core/utils/roundbuf.d b/bio/core/utils/roundbuf.d
new file mode 100644
index 0000000..e319b75
--- /dev/null
+++ b/bio/core/utils/roundbuf.d
@@ -0,0 +1,102 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.utils.roundbuf;
+
+import std.exception;
+
+/// Cyclic buffer
+struct RoundBuf(T) {
+   
+    private {
+        T[] _items = void;
+        size_t _put;
+        size_t _taken;
+    }
+
+    /** initializes round buffer of size $(D n) */
+    this(size_t n) {
+        _items = new T[n];
+    }
+
+    /// Input range primitives
+    bool empty() @property const {
+        return _put == _taken;
+    }
+
+    /// ditto
+    auto ref front() @property {
+        enforce(!empty, "buffer is empty");
+        return _items[_taken % $];
+    }
+
+    /// ditto
+    void popFront() {
+        ++_taken;
+    }
+
+    ///
+    auto ref back() @property {
+      enforce(!empty, "buffer is empty");
+      return _items[(_put - 1) % $];
+    }
+
+    /// Output range primitive
+    void put(T item) {
+        enforce(!full, "buffer is full");
+        _items[_put % $] = item;
+        ++_put;
+    }
+
+    /// Check if buffer is full
+    bool full() @property const {
+        return _put == _taken + _items.length;
+    }
+   
+    /// Current number of elements
+    size_t length() @property const {
+        return _put - _taken;
+    }
+}
+
+unittest {
+    auto buf = RoundBuf!int(4);
+    assert(buf.empty);
+
+    buf.put(1);
+    buf.put(2);
+    assert(buf.length == 2);
+    assert(buf.front == 1);
+    buf.popFront();
+    buf.put(1);
+    buf.put(0);
+    buf.put(3);
+    assert(buf.full);
+    buf.popFront();
+    buf.put(4);
+    buf.popFront();
+    buf.popFront();
+    assert(buf.front == 3);
+    buf.popFront();
+    assert(buf.front == 4);
+}
diff --git a/bio/core/utils/stream.d b/bio/core/utils/stream.d
new file mode 100644
index 0000000..6c5146d
--- /dev/null
+++ b/bio/core/utils/stream.d
@@ -0,0 +1,167 @@
+module bio.core.utils.stream;
+
+public import std.stream;
+import core.stdc.stdio;
+import core.stdc.errno;
+import core.stdc.string;
+import core.sys.posix.sys.select;
+import std.conv;
+import std.string : toStringz;
+
+version(Posix){
+    private import core.sys.posix.unistd;
+}
+
+version(Windows) {
+    private import std.file;
+    private import std.utf;
+    private import std.c.windows.windows;
+    extern (Windows) {
+        DWORD GetFileType(HANDLE hFile);
+    }
+}
+
+FileMode toFileMode(string mode) {
+    FileMode result = FileMode.In;
+    switch (mode) {
+        case "r", "rb":
+            result = FileMode.In; // 1000
+            break;
+        case "r+", "r+b", "rb+":
+            result = FileMode.In | FileMode.Out; // 1100
+        case "w", "wb":
+            result = FileMode.OutNew; // 0110
+            break;
+        case "w+", "w+b", "wb+":
+            result = FileMode.In | FileMode.OutNew; // 1110
+            break;
+        case "a", "ab":
+            result = FileMode.Append; // 0001
+            break;
+        case "a+", "a+b", "ab+":
+            result = FileMode.In | FileMode.Append; // 1001
+            break;
+        default:
+            break;
+    }
+
+    return result;
+}
+
+final class File: std.stream.File {
+    this(string filename, string mode="rb") {
+        version (Posix) {
+            // Issue 8528 workaround
+            auto file = fopen(toStringz(filename), toStringz(mode));
+            if (file == null) {
+                throw new OpenException(cast(string) ("Cannot open or create file '"
+                                                      ~ filename ~ "' : ") ~
+                                        to!string(strerror(errno)));
+            }
+            super(core.stdc.stdio.fileno(file), toFileMode(mode));
+        }
+        version (Windows) {
+            int access, share, createMode;
+            auto mode_flags = toFileMode(mode);
+
+            share |= FILE_SHARE_READ | FILE_SHARE_WRITE;
+            if (mode_flags & FileMode.In) {
+                access |= GENERIC_READ;
+                createMode = OPEN_EXISTING;
+            }
+            if (mode_flags & FileMode.Out) {
+                access |= GENERIC_WRITE;
+                createMode = OPEN_ALWAYS;
+            }
+            if ((mode_flags & FileMode.OutNew) == FileMode.OutNew) {
+                createMode = CREATE_ALWAYS;
+            }
+
+            auto handle = CreateFileW(std.utf.toUTF16z(filename), access, share,
+                                      null, createMode, 0, null);
+            isopen = handle != INVALID_HANDLE_VALUE;
+            if (!isopen) {
+                throw new OpenException(cast(string) ("Cannot open or create file '"
+                                                      ~ filename ~ "'"));
+            }
+            super(handle, toFileMode(mode));
+        }
+    }
+
+    override ulong seek(long offset, SeekPos rel) {
+        assertSeekable();
+        auto hFile = handle();
+        version (Windows) {
+          int hi = cast(int)(offset>>32);
+          uint low = SetFilePointer(hFile, cast(int)offset, &hi, rel);
+          if ((low == INVALID_SET_FILE_POINTER) && (GetLastError() != 0))
+            throw new SeekException("unable to move file pointer");
+          ulong result = (cast(ulong)hi << 32) + low;
+        } else version (Posix) {
+          // Phobos casts offset to int, leading to throwing an exception
+          // on large files
+          auto result = lseek(hFile, cast(off_t)offset, rel);
+          if (result == cast(typeof(result))-1)
+            throw new SeekException("unable to move file pointer");
+        }
+        readEOF = false;
+        return cast(ulong)result;
+      }
+
+    override size_t readBlock(void* buffer, size_t size) {
+        assertReadable();
+        auto hFile = handle();
+        version (Windows) {
+            auto dwSize = to!DWORD(size);
+            ReadFile(hFile, buffer, dwSize, &dwSize, null);
+            size = dwSize;
+        } else version (Posix) {
+            // http://developerweb.net/viewtopic.php?id=4267
+            fd_set rset;
+            timeval timeout;
+            immutable MAX_IDLE_SECS = 1;
+            while (true) {
+                auto ret = core.sys.posix.unistd.read(hFile, buffer, size);
+                if (ret == -1) {
+                    if (errno == EINTR)
+                        continue;
+
+                    if (errno == EAGAIN || errno == EWOULDBLOCK) {
+                        FD_ZERO(&rset);
+                        FD_SET(hFile, &rset);
+                        timeout.tv_sec = MAX_IDLE_SECS;
+                        timeout.tv_usec = 0;
+                        ret = select(hFile + 1, &rset, null, null, &timeout);
+                        if (ret <= 0) {
+                            size = 0;
+                            throw new ReadException("read timeout");
+                            break;
+                        }
+                    } else {
+                        throw new ReadException(to!string(strerror(errno)));
+                    }
+                } else {
+                    size = ret;
+                    break;
+                }
+            }
+        }
+        readEOF = (size == 0);
+        return size;
+    }
+
+    override size_t writeBlock(const void* buffer, size_t size) {
+      assertWriteable();
+      auto hFile = handle();
+      version (Windows) {
+        auto dwSize = to!DWORD(size);
+        WriteFile(hFile, buffer, dwSize, &dwSize, null);
+        size = dwSize;
+      } else version (Posix) {
+        size = core.sys.posix.unistd.write(hFile, buffer, size);
+        if (size == -1)
+          throw new WriteException(to!string(strerror(errno)));
+      }
+      return size;
+    }
+}
diff --git a/bio/core/utils/switchendianness.d b/bio/core/utils/switchendianness.d
new file mode 100644
index 0000000..7b141cf
--- /dev/null
+++ b/bio/core/utils/switchendianness.d
@@ -0,0 +1,50 @@
+/**
+  (Almost) a copy-paste from std/stream.d
+*/
+module bio.core.utils.switchendianness;
+
+import core.bitop;
+
+/***
+* Switches the byte order of buffer.
+* $(D size) must be even.
+*/
+void switchEndianness(const(void)* buffer, size_t size) 
+in
+{
+  assert((size & 1) == 0);
+}
+body
+{
+    ubyte* startb = cast(ubyte*)buffer;
+    uint* start = cast(uint*)buffer;
+    switch (size) {
+        case 0: break;
+        case 2: {
+            ubyte x = *startb;
+            *startb = *(startb+1);
+            *(startb+1) = x;
+            break;
+        }
+        case 4: {
+            *start = bswap(*start);
+            break;
+        }
+        default: {
+            uint* end = cast(uint*)(buffer + size - uint.sizeof);
+            while (start < end) {
+                uint x = bswap(*start);
+                *start = bswap(*end);
+                *end = x;
+                ++start;
+                --end;
+            }
+            startb = cast(ubyte*)start;
+            ubyte* endb = cast(ubyte*)end;
+            auto len = uint.sizeof - (startb - endb);
+            if (len > 0) {
+                switchEndianness(startb,len);
+            }
+        }
+    }
+}
diff --git a/bio/core/utils/tmpfile.d b/bio/core/utils/tmpfile.d
new file mode 100644
index 0000000..c3f16e6
--- /dev/null
+++ b/bio/core/utils/tmpfile.d
@@ -0,0 +1,20 @@
+module bio.core.utils.tmpfile;
+
+import std.path;
+import std.process;
+
+/// Absolute path of temporary file.
+///
+/// Params:
+///     filename - base name
+///     tmpdir   - temporary directory
+///                                   
+string tmpFile(string filename, string tmpdir=null) {
+    if (tmpdir != null) {
+        return buildPath(tmpdir, filename);
+    }
+version(Windows)
+    return buildPath(std.process.getenv("TEMP"), filename);
+else version(Posix)
+    return "/tmp/" ~ filename;
+}
diff --git a/bio/core/utils/zlib.d b/bio/core/utils/zlib.d
new file mode 100644
index 0000000..c25d345
--- /dev/null
+++ b/bio/core/utils/zlib.d
@@ -0,0 +1,280 @@
+// minimized version of etc.c.zlib
+module bio.core.utils.zlib;
+
+import core.stdc.config;
+
+extern (C) {
+
+const char[] ZLIB_VERSION = "1.2.3";
+const ZLIB_VERNUM = 0x1230;
+
+alias void* function (void* opaque, uint items, uint size) alloc_func;
+alias void  function (void* opaque, void* address) free_func;
+
+struct z_stream
+{
+    ubyte    *next_in;  /* next input byte */
+    uint     avail_in;  /* number of bytes available at next_in */
+    c_ulong  total_in;  /* total nb of input bytes read so far */
+
+    ubyte    *next_out; /* next output byte should be put there */
+    uint     avail_out; /* remaining free space at next_out */
+    c_ulong  total_out; /* total nb of bytes output so far */
+
+    char     *msg;      /* last error message, NULL if no error */
+    void*    state;     /* not visible by applications */
+
+    alloc_func zalloc;  /* used to allocate the internal state */
+    free_func  zfree;   /* used to free the internal state */
+    void*      opaque;  /* private data object passed to zalloc and zfree */
+
+    int     data_type;  /* best guess about the data type: binary or text */
+    c_ulong adler;      /* adler32 value of the uncompressed data */
+    c_ulong reserved;   /* reserved for future use */
+}
+
+alias z_stream* z_streamp;
+
+/*
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+struct gz_header {
+    int     text;       /* true if compressed data believed to be text */
+    c_ulong time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    byte    *extra;     /* pointer to extra field or Z_NULL if none */
+    uint    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uint    extra_max;  /* space at extra (only when reading header) */
+    byte    *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uint    name_max;   /* space at name (only when reading header) */
+    byte    *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uint    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+}
+
+alias gz_header* gz_headerp;
+
+                        /* constants */
+
+enum
+{
+        Z_NO_FLUSH      = 0,
+        Z_PARTIAL_FLUSH = 1, /* will be removed, use Z_SYNC_FLUSH instead */
+        Z_SYNC_FLUSH    = 2,
+        Z_FULL_FLUSH    = 3,
+        Z_FINISH        = 4,
+        Z_BLOCK         = 5,
+        Z_TREES         = 6,
+}
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+enum
+{
+        Z_OK            = 0,
+        Z_STREAM_END    = 1,
+        Z_NEED_DICT     = 2,
+        Z_ERRNO         = -1,
+        Z_STREAM_ERROR  = -2,
+        Z_DATA_ERROR    = -3,
+        Z_MEM_ERROR     = -4,
+        Z_BUF_ERROR     = -5,
+        Z_VERSION_ERROR = -6,
+}
+/* Return codes for the compression/decompression functions. Negative
+ * values are errors, positive values are used for special but normal events.
+ */
+
+enum
+{
+        Z_NO_COMPRESSION         = 0,
+        Z_BEST_SPEED             = 1,
+        Z_BEST_COMPRESSION       = 9,
+        Z_DEFAULT_COMPRESSION    = -1,
+}
+/* compression levels */
+
+enum
+{
+        Z_FILTERED            = 1,
+        Z_HUFFMAN_ONLY        = 2,
+        Z_RLE                 = 3,
+        Z_FIXED               = 4,
+        Z_DEFAULT_STRATEGY    = 0,
+}
+/* compression strategy; see deflateInit2() below for details */
+
+enum
+{
+        Z_BINARY   = 0,
+        Z_TEXT     = 1,
+        Z_UNKNOWN  = 2,
+
+        Z_ASCII    = Z_TEXT
+}
+/* Possible values of the data_type field (though see inflate()) */
+
+enum
+{
+        Z_DEFLATED   = 8,
+}
+/* The deflate compression method (the only one supported in this version) */
+
+const int Z_NULL = 0;  /* for initializing zalloc, zfree, opaque */
+
+                        /* basic functions */
+
+char* zlibVersion();
+int deflateInit(z_streamp strm, int level)
+{
+    return deflateInit_(strm, level, ZLIB_VERSION.ptr, z_stream.sizeof);
+}
+
+int deflate(z_streamp strm, int flush);
+int deflateEnd(z_streamp strm);
+
+int inflateInit(z_streamp strm)
+{
+    return inflateInit_(strm, ZLIB_VERSION.ptr, z_stream.sizeof);
+}
+int inflate(z_streamp strm, int flush);
+int inflateEnd(z_streamp strm);
+
+int deflateInit2(z_streamp strm,
+                 int  level,
+                 int  method,
+                 int  windowBits,
+                 int  memLevel,
+                 int  strategy)
+{
+    return deflateInit2_(strm, level, method, windowBits, memLevel,
+                         strategy, ZLIB_VERSION.ptr, z_stream.sizeof);
+}
+
+
+int deflateBound(z_streamp strm, size_t sourceLen);
+
+int inflateInit2(z_streamp strm, int windowBits)
+{
+    return inflateInit2_(strm, windowBits, ZLIB_VERSION.ptr, z_stream.sizeof);
+}
+
+int compress(ubyte* dest,
+             size_t* destLen,
+             ubyte* source,
+             size_t sourceLen);
+
+int compress2(ubyte* dest,
+              size_t* destLen,
+              ubyte* source,
+              size_t sourceLen,
+              int level);
+
+size_t compressBound(size_t sourceLen);
+
+int uncompress(ubyte* dest,
+               size_t* destLen,
+               ubyte* source,
+               size_t sourceLen);
+
+alias void* gzFile;
+alias int z_off_t;              // file offset
+
+gzFile gzopen(char* path, char* mode);
+gzFile gzdopen(int fd, char* mode);
+
+int gzsetparams(gzFile file, int level, int strategy);
+int gzread(gzFile file, void* buf, uint len);
+int gzwrite(gzFile file, void* buf, uint len);
+int gzprintf(gzFile file, char* format, ...);
+int gzputs(gzFile file, char* s);
+char* gzgets(gzFile file, char* buf, int len);
+int gzputc(gzFile file, int c);
+int    gzgetc(gzFile file);
+int gzungetc(int c, gzFile file);
+int gzflush(gzFile file, int flush);
+z_off_t gzseek(gzFile file, z_off_t offset, int whence);
+int gzrewind(gzFile file);
+z_off_t  gztell(gzFile file);
+int gzeof(gzFile file);
+int gzdirect(gzFile file);
+int gzclose(gzFile file);
+char* gzerror(gzFile file, int *errnum);
+void gzclearerr (gzFile file);
+ uint adler32  (uint adler, ubyte *buf, uint len);
+uint adler32_combine(uint adler1, uint adler2, z_off_t len2);
+uint crc32(uint crc, ubyte *buf, uint len);
+uint crc32_combine (uint crc1, uint crc2, z_off_t len2);
+
+int deflateInit_(z_streamp strm,
+                 int level,
+                 const char* versionx,
+                 int stream_size);
+
+int inflateInit_(z_streamp strm,
+                 const char* versionx,
+                 int stream_size);
+
+int deflateInit2_(z_streamp strm,
+                  int level,
+                  int method,
+                  int windowBits,
+                  int memLevel,
+                  int strategy,
+                  const char* versionx,
+                  int stream_size);
+
+int inflateBackInit_(z_stream* strm,
+                     int windowBits,
+                     ubyte* window,
+                     const char* z_version,
+                     int stream_size);
+
+int inflateInit2_(z_streamp strm,
+                  int windowBits,
+                  const char* versionx,
+                  int stream_size);
+
+char* zError(int err);
+int inflateSyncPoint(z_streamp z);
+uint* get_crc_table();
+
+}
+
+class ZlibException : Exception
+{
+    this(int errnum) {
+        auto msg = "[zlib] " ~ messageFromErrnum(errnum);
+        super(msg);
+    }
+
+    this(string func, int errnum) {
+        auto msg = "[zlib/" ~ func ~ "] " ~ messageFromErrnum(errnum);
+        super(msg);
+    }
+
+    private string messageFromErrnum(int errnum) {
+        switch (errnum)
+        {
+            case Z_STREAM_END:      msg = "stream end"; break;
+            case Z_NEED_DICT:       msg = "need dict"; break;
+            case Z_ERRNO:           msg = "errno"; break;
+            case Z_STREAM_ERROR:    msg = "stream error"; break;
+            case Z_DATA_ERROR:      msg = "data error"; break;
+            case Z_MEM_ERROR:       msg = "mem error"; break;
+            case Z_BUF_ERROR:       msg = "buf error"; break;
+            case Z_VERSION_ERROR:   msg = "version error"; break;
+            default:                msg = "unknown error";  break;
+        }
+        return msg;
+    }
+}
+
+uint crc32(uint crc, const(void)[] buf)
+{
+    return crc32(crc, cast(ubyte *)buf.ptr, cast(uint)(buf.length));
+}
+
diff --git a/bio/maf/block.d b/bio/maf/block.d
new file mode 100644
index 0000000..5395e76
--- /dev/null
+++ b/bio/maf/block.d
@@ -0,0 +1,73 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.maf.block;
+
+///
+struct MafSequence {
+    ///
+    size_t size;
+    ///
+    size_t start;
+
+    ///
+    string source;
+    ///
+    char strand;
+
+    ///
+    size_t source_size;
+    ///
+    string text;
+   
+    ///
+    char left_status = '.';
+    ///
+    size_t left_count;
+
+    ///
+    char right_status = '.';
+    ///
+    size_t right_count;
+
+    ///
+    bool empty() @property {
+        return empty_status != '.';
+    }
+
+    ///
+    char empty_status = '.';
+
+    ///
+    string quality;
+}
+
+///
+struct MafBlock {
+    ///
+    MafSequence[] sequences;
+    ///
+    double score = double.nan;
+    ///
+    uint pass = 0;
+}
diff --git a/bio/maf/parser.d b/bio/maf/parser.d
new file mode 100644
index 0000000..4576c04
--- /dev/null
+++ b/bio/maf/parser.d
@@ -0,0 +1,827 @@
+module bio.maf.parser;
+#line 1 "maf_block.rl"
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+import std.conv, std.array;
+import bio.maf.block;
+
+
+#line 27 "maf_block.d"
+static byte[] _maf_block_actions = [
+	0, 1, 1, 1, 2, 1, 5, 1, 
+	6, 1, 7, 1, 8, 1, 9, 1, 
+	10, 1, 11, 1, 12, 1, 14, 1, 
+	16, 1, 17, 1, 18, 1, 19, 1, 
+	20, 1, 21, 1, 22, 2, 0, 1, 
+	2, 3, 4, 2, 7, 13, 2, 15, 
+	12
+];
+
+static short[] _maf_block_key_offsets = [
+	0, 0, 1, 5, 11, 20, 23, 26, 
+	29, 34, 39, 44, 49, 54, 57, 62, 
+	67, 74, 77, 80, 83, 92, 95, 100, 
+	105, 114, 117, 122, 127, 132, 137, 142, 
+	147, 152, 157, 162, 167, 172, 177, 182, 
+	187, 192, 197, 202, 205, 208, 211, 214, 
+	221, 224, 227, 230, 235, 240, 245, 250, 
+	255, 258, 263, 268, 271, 276, 281, 286, 
+	291, 296, 301, 306, 311, 316, 321, 326, 
+	331, 336, 341, 346, 351, 354, 359, 364, 
+	369, 374, 379, 384, 389, 394, 399, 404, 
+	409, 414, 419, 424, 429, 434, 437, 442, 
+	447, 452, 457, 462, 467, 472, 477, 482, 
+	487, 492, 497, 502, 507, 512, 517, 520, 
+	525, 530, 535, 540, 545, 550, 555, 560, 
+	565, 570, 575, 580, 585, 590, 595, 600, 
+	603, 608, 613, 618, 623, 628, 633, 638, 
+	643, 648, 653, 658, 663, 668, 673, 678, 
+	683, 686, 691, 696, 701, 706, 711, 716, 
+	721, 726, 731, 736, 741, 746, 751, 756, 
+	761, 766, 769, 770, 771, 772, 773, 775, 
+	781, 787, 793, 799, 805, 811, 817, 823, 
+	829, 835, 841, 847, 853, 859, 865, 871, 
+	877, 881, 885, 886, 887, 888, 889, 896, 
+	900, 902, 910, 914, 916, 922, 931, 932, 
+	933, 937, 938, 939, 940, 944, 948, 956, 
+	962, 968, 974, 980, 986, 992, 998, 1004, 
+	1010, 1016, 1022, 1028, 1034, 1040, 1046, 1052, 
+	1058, 1062, 1070
+];
+
+static char[] _maf_block_trans_keys = [
+	97u, 10u, 32u, 9u, 13u, 10u, 32u, 112u, 
+	115u, 9u, 13u, 10u, 32u, 101u, 105u, 112u, 
+	113u, 115u, 9u, 13u, 32u, 9u, 13u, 32u, 
+	9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 43u, 45u, 9u, 13u, 32u, 9u, 
+	13u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 67u, 73u, 77u, 110u, 
+	9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 
+	32u, 9u, 13u, 32u, 67u, 73u, 84u, 110u, 
+	9u, 13u, 77u, 78u, 32u, 9u, 13u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 67u, 73u, 84u, 110u, 9u, 13u, 
+	77u, 78u, 32u, 9u, 13u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 
+	32u, 9u, 13u, 32u, 9u, 13u, 32u, 45u, 
+	70u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	32u, 9u, 13u, 32u, 9u, 13u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 43u, 45u, 9u, 13u, 32u, 
+	9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
+	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
+	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
+	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
+	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
+	13u, 97u, 115u, 115u, 61u, 48u, 57u, 10u, 
+	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
+	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
+	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
+	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
+	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
+	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
+	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
+	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
+	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
+	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
+	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
+	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
+	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
+	13u, 32u, 99u, 9u, 13u, 111u, 114u, 101u, 
+	61u, 43u, 45u, 46u, 105u, 110u, 48u, 57u, 
+	46u, 105u, 48u, 57u, 48u, 57u, 10u, 32u, 
+	69u, 101u, 9u, 13u, 48u, 57u, 43u, 45u, 
+	48u, 57u, 48u, 57u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 46u, 69u, 101u, 9u, 
+	13u, 48u, 57u, 110u, 102u, 10u, 32u, 9u, 
+	13u, 97u, 110u, 99u, 10u, 32u, 9u, 13u, 
+	10u, 32u, 9u, 13u, 10u, 32u, 101u, 105u, 
+	113u, 115u, 9u, 13u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
+	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
+	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
+	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
+	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
+	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
+	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
+	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
+	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
+	48u, 57u, 10u, 32u, 9u, 13u, 10u, 32u, 
+	45u, 70u, 9u, 13u, 48u, 57u, 10u, 32u, 
+	9u, 13u, 0
+];
+
+static byte[] _maf_block_single_lengths = [
+	0, 1, 2, 4, 7, 1, 1, 1, 
+	1, 1, 1, 1, 3, 1, 1, 1, 
+	5, 1, 1, 1, 5, 1, 1, 1, 
+	5, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 3, 
+	1, 1, 1, 1, 1, 1, 1, 3, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 0, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 1, 1, 1, 1, 5, 2, 
+	0, 4, 2, 0, 2, 5, 1, 1, 
+	2, 1, 1, 1, 2, 2, 6, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 4, 2
+];
+
+static byte[] _maf_block_range_lengths = [
+	0, 0, 1, 1, 1, 1, 1, 1, 
+	2, 2, 2, 2, 1, 1, 2, 2, 
+	1, 1, 1, 1, 2, 1, 2, 2, 
+	2, 1, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 1, 1, 1, 1, 2, 
+	1, 1, 1, 2, 2, 2, 2, 1, 
+	1, 2, 2, 1, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 1, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 1, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 1, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 1, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	1, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 1, 0, 0, 0, 0, 1, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	1, 1, 0, 0, 0, 0, 1, 1, 
+	1, 2, 1, 1, 2, 2, 0, 0, 
+	1, 0, 0, 0, 1, 1, 1, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	1, 2, 1
+];
+
+static short[] _maf_block_index_offsets = [
+	0, 0, 2, 6, 12, 21, 24, 27, 
+	30, 34, 38, 42, 46, 51, 54, 58, 
+	62, 69, 72, 75, 78, 86, 89, 93, 
+	97, 105, 108, 112, 116, 120, 124, 128, 
+	132, 136, 140, 144, 148, 152, 156, 160, 
+	164, 168, 172, 176, 179, 182, 185, 188, 
+	194, 197, 200, 203, 207, 211, 215, 219, 
+	224, 227, 231, 235, 238, 242, 246, 250, 
+	254, 258, 262, 266, 270, 274, 278, 282, 
+	286, 290, 294, 298, 302, 305, 309, 313, 
+	317, 321, 325, 329, 333, 337, 341, 345, 
+	349, 353, 357, 361, 365, 369, 372, 376, 
+	380, 384, 388, 392, 396, 400, 404, 408, 
+	412, 416, 420, 424, 428, 432, 436, 439, 
+	443, 447, 451, 455, 459, 463, 467, 471, 
+	475, 479, 483, 487, 491, 495, 499, 503, 
+	506, 510, 514, 518, 522, 526, 530, 534, 
+	538, 542, 546, 550, 554, 558, 562, 566, 
+	570, 573, 577, 581, 585, 589, 593, 597, 
+	601, 605, 609, 613, 617, 621, 625, 629, 
+	633, 637, 640, 642, 644, 646, 648, 650, 
+	655, 660, 665, 670, 675, 680, 685, 690, 
+	695, 700, 705, 710, 715, 720, 725, 730, 
+	735, 739, 743, 745, 747, 749, 751, 758, 
+	762, 764, 771, 775, 777, 782, 790, 792, 
+	794, 798, 800, 802, 804, 808, 812, 820, 
+	825, 830, 835, 840, 845, 850, 855, 860, 
+	865, 870, 875, 880, 885, 890, 895, 900, 
+	905, 909, 916
+];
+
+static ubyte[] _maf_block_trans_targs = [
+	2, 0, 4, 3, 3, 0, 4, 3, 
+	162, 203, 3, 0, 4, 3, 5, 17, 
+	162, 44, 185, 3, 0, 6, 6, 0, 
+	6, 6, 7, 8, 8, 7, 8, 8, 
+	9, 0, 10, 10, 145, 0, 10, 10, 
+	11, 0, 12, 12, 128, 0, 12, 13, 
+	13, 12, 0, 14, 14, 0, 14, 14, 
+	15, 0, 16, 16, 111, 0, 16, 204, 
+	204, 204, 204, 16, 0, 18, 18, 0, 
+	18, 18, 19, 20, 20, 19, 20, 21, 
+	21, 21, 21, 20, 21, 0, 22, 22, 
+	0, 22, 22, 23, 0, 24, 24, 27, 
+	0, 24, 25, 25, 25, 25, 24, 25, 
+	0, 26, 26, 0, 26, 26, 207, 0, 
+	24, 24, 28, 0, 24, 24, 29, 0, 
+	24, 24, 30, 0, 24, 24, 31, 0, 
+	24, 24, 32, 0, 24, 24, 33, 0, 
+	24, 24, 34, 0, 24, 24, 35, 0, 
+	24, 24, 36, 0, 24, 24, 37, 0, 
+	24, 24, 38, 0, 24, 24, 39, 0, 
+	24, 24, 40, 0, 24, 24, 41, 0, 
+	24, 24, 42, 0, 24, 24, 43, 0, 
+	24, 24, 0, 45, 45, 0, 45, 45, 
+	46, 47, 47, 46, 47, 225, 225, 47, 
+	225, 0, 49, 49, 0, 49, 49, 50, 
+	51, 51, 50, 51, 51, 52, 0, 53, 
+	53, 94, 0, 53, 53, 54, 0, 55, 
+	55, 77, 0, 55, 56, 56, 55, 0, 
+	57, 57, 0, 57, 57, 58, 0, 59, 
+	59, 60, 0, 59, 59, 226, 59, 59, 
+	61, 0, 59, 59, 62, 0, 59, 59, 
+	63, 0, 59, 59, 64, 0, 59, 59, 
+	65, 0, 59, 59, 66, 0, 59, 59, 
+	67, 0, 59, 59, 68, 0, 59, 59, 
+	69, 0, 59, 59, 70, 0, 59, 59, 
+	71, 0, 59, 59, 72, 0, 59, 59, 
+	73, 0, 59, 59, 74, 0, 59, 59, 
+	75, 0, 59, 59, 76, 0, 59, 59, 
+	0, 55, 55, 78, 0, 55, 55, 79, 
+	0, 55, 55, 80, 0, 55, 55, 81, 
+	0, 55, 55, 82, 0, 55, 55, 83, 
+	0, 55, 55, 84, 0, 55, 55, 85, 
+	0, 55, 55, 86, 0, 55, 55, 87, 
+	0, 55, 55, 88, 0, 55, 55, 89, 
+	0, 55, 55, 90, 0, 55, 55, 91, 
+	0, 55, 55, 92, 0, 55, 55, 93, 
+	0, 55, 55, 0, 53, 53, 95, 0, 
+	53, 53, 96, 0, 53, 53, 97, 0, 
+	53, 53, 98, 0, 53, 53, 99, 0, 
+	53, 53, 100, 0, 53, 53, 101, 0, 
+	53, 53, 102, 0, 53, 53, 103, 0, 
+	53, 53, 104, 0, 53, 53, 105, 0, 
+	53, 53, 106, 0, 53, 53, 107, 0, 
+	53, 53, 108, 0, 53, 53, 109, 0, 
+	53, 53, 110, 0, 53, 53, 0, 16, 
+	16, 112, 0, 16, 16, 113, 0, 16, 
+	16, 114, 0, 16, 16, 115, 0, 16, 
+	16, 116, 0, 16, 16, 117, 0, 16, 
+	16, 118, 0, 16, 16, 119, 0, 16, 
+	16, 120, 0, 16, 16, 121, 0, 16, 
+	16, 122, 0, 16, 16, 123, 0, 16, 
+	16, 124, 0, 16, 16, 125, 0, 16, 
+	16, 126, 0, 16, 16, 127, 0, 16, 
+	16, 0, 12, 12, 129, 0, 12, 12, 
+	130, 0, 12, 12, 131, 0, 12, 12, 
+	132, 0, 12, 12, 133, 0, 12, 12, 
+	134, 0, 12, 12, 135, 0, 12, 12, 
+	136, 0, 12, 12, 137, 0, 12, 12, 
+	138, 0, 12, 12, 139, 0, 12, 12, 
+	140, 0, 12, 12, 141, 0, 12, 12, 
+	142, 0, 12, 12, 143, 0, 12, 12, 
+	144, 0, 12, 12, 0, 10, 10, 146, 
+	0, 10, 10, 147, 0, 10, 10, 148, 
+	0, 10, 10, 149, 0, 10, 10, 150, 
+	0, 10, 10, 151, 0, 10, 10, 152, 
+	0, 10, 10, 153, 0, 10, 10, 154, 
+	0, 10, 10, 155, 0, 10, 10, 156, 
+	0, 10, 10, 157, 0, 10, 10, 158, 
+	0, 10, 10, 159, 0, 10, 10, 160, 
+	0, 10, 10, 161, 0, 10, 10, 0, 
+	163, 0, 164, 0, 165, 0, 166, 0, 
+	167, 0, 4, 3, 3, 168, 0, 4, 
+	3, 3, 169, 0, 4, 3, 3, 170, 
+	0, 4, 3, 3, 171, 0, 4, 3, 
+	3, 172, 0, 4, 3, 3, 173, 0, 
+	4, 3, 3, 174, 0, 4, 3, 3, 
+	175, 0, 4, 3, 3, 176, 0, 4, 
+	3, 3, 177, 0, 4, 3, 3, 178, 
+	0, 4, 3, 3, 179, 0, 4, 3, 
+	3, 180, 0, 4, 3, 3, 181, 0, 
+	4, 3, 3, 182, 0, 4, 3, 3, 
+	183, 0, 4, 3, 3, 184, 0, 4, 
+	3, 3, 0, 49, 186, 49, 0, 187, 
+	0, 188, 0, 189, 0, 190, 0, 191, 
+	191, 192, 198, 201, 197, 0, 192, 198, 
+	197, 0, 193, 0, 4, 3, 194, 194, 
+	3, 193, 0, 195, 195, 196, 0, 196, 
+	0, 4, 3, 3, 196, 0, 4, 3, 
+	192, 194, 194, 3, 197, 0, 199, 0, 
+	200, 0, 4, 3, 3, 0, 202, 0, 
+	200, 0, 186, 0, 206, 205, 205, 0, 
+	206, 205, 205, 0, 206, 205, 5, 17, 
+	44, 48, 205, 0, 206, 205, 205, 208, 
+	0, 206, 205, 205, 209, 0, 206, 205, 
+	205, 210, 0, 206, 205, 205, 211, 0, 
+	206, 205, 205, 212, 0, 206, 205, 205, 
+	213, 0, 206, 205, 205, 214, 0, 206, 
+	205, 205, 215, 0, 206, 205, 205, 216, 
+	0, 206, 205, 205, 217, 0, 206, 205, 
+	205, 218, 0, 206, 205, 205, 219, 0, 
+	206, 205, 205, 220, 0, 206, 205, 205, 
+	221, 0, 206, 205, 205, 222, 0, 206, 
+	205, 205, 223, 0, 206, 205, 205, 224, 
+	0, 206, 205, 205, 0, 206, 205, 225, 
+	225, 205, 225, 0, 206, 205, 205, 226, 
+	0
+];
+
+static byte[] _maf_block_trans_actions = [
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 7, 9, 9, 0, 0, 0, 
+	37, 0, 11, 11, 1, 0, 0, 0, 
+	37, 0, 13, 13, 1, 0, 0, 15, 
+	15, 0, 0, 0, 0, 0, 0, 0, 
+	37, 0, 17, 17, 1, 0, 0, 31, 
+	31, 31, 31, 0, 0, 0, 0, 0, 
+	0, 0, 7, 43, 43, 0, 0, 23, 
+	23, 23, 23, 0, 23, 0, 0, 0, 
+	0, 0, 0, 37, 0, 25, 25, 1, 
+	0, 0, 27, 27, 27, 27, 0, 27, 
+	0, 0, 0, 0, 0, 0, 37, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 1, 0, 25, 25, 1, 0, 
+	25, 25, 0, 0, 0, 0, 0, 0, 
+	7, 43, 43, 0, 0, 33, 33, 0, 
+	33, 0, 0, 0, 0, 0, 0, 7, 
+	9, 9, 0, 0, 0, 37, 0, 11, 
+	11, 1, 0, 0, 0, 37, 0, 13, 
+	13, 1, 0, 0, 15, 15, 0, 0, 
+	0, 0, 0, 0, 0, 37, 0, 17, 
+	17, 1, 0, 0, 0, 21, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	1, 0, 17, 17, 1, 0, 17, 17, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 1, 0, 13, 13, 1, 
+	0, 13, 13, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 1, 0, 
+	11, 11, 1, 0, 11, 11, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 1, 0, 17, 17, 1, 0, 17, 
+	17, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 1, 0, 13, 13, 
+	1, 0, 13, 13, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 1, 
+	0, 11, 11, 1, 0, 11, 11, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	37, 0, 5, 5, 5, 1, 0, 5, 
+	5, 5, 1, 0, 5, 5, 5, 1, 
+	0, 5, 5, 5, 1, 0, 5, 5, 
+	5, 1, 0, 5, 5, 5, 1, 0, 
+	5, 5, 5, 1, 0, 5, 5, 5, 
+	1, 0, 5, 5, 5, 1, 0, 5, 
+	5, 5, 1, 0, 5, 5, 5, 1, 
+	0, 5, 5, 5, 1, 0, 5, 5, 
+	5, 1, 0, 5, 5, 5, 1, 0, 
+	5, 5, 5, 1, 0, 5, 5, 5, 
+	1, 0, 5, 5, 5, 1, 0, 5, 
+	5, 5, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 3, 
+	3, 3, 3, 3, 3, 0, 0, 0, 
+	0, 0, 0, 0, 40, 40, 0, 0, 
+	40, 0, 0, 0, 0, 0, 0, 0, 
+	0, 40, 40, 40, 0, 0, 40, 40, 
+	0, 0, 0, 40, 0, 0, 0, 0, 
+	0, 0, 40, 40, 40, 0, 0, 0, 
+	0, 0, 0, 0, 19, 19, 19, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 29, 29, 29, 1, 
+	0, 29, 29, 29, 1, 0, 29, 29, 
+	29, 1, 0, 29, 29, 29, 1, 0, 
+	29, 29, 29, 1, 0, 29, 29, 29, 
+	1, 0, 29, 29, 29, 1, 0, 29, 
+	29, 29, 1, 0, 29, 29, 29, 1, 
+	0, 29, 29, 29, 1, 0, 29, 29, 
+	29, 1, 0, 29, 29, 29, 1, 0, 
+	29, 29, 29, 1, 0, 29, 29, 29, 
+	1, 0, 29, 29, 29, 1, 0, 29, 
+	29, 29, 1, 0, 29, 29, 29, 1, 
+	0, 29, 29, 29, 0, 35, 35, 0, 
+	0, 35, 0, 0, 46, 46, 46, 0, 
+	0
+];
+
+static byte[] _maf_block_eof_actions = [
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 19, 0, 0, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 35, 46
+];
+
+static int maf_block_start = 1;
+static int maf_block_first_final = 204;
+static int maf_block_error = 0;
+
+static int maf_block_en_block = 1;
+
+
+#line 122 "maf_block.rl"
+
+
+MafBlock parseMafBlock(string line) {
+    char* p = cast(char*)line.ptr;
+    char* pe = p + line.length;
+    char* eof = pe;
+    int cs;
+
+    int current_sign;
+    int int_value;
+    double float_value;
+    size_t float_beg;
+
+    MafBlock block;
+    MafSequence sequence;
+    auto sequences = Appender!(MafSequence[])();
+
+    size_t src_beg;
+    size_t text_beg;
+    size_t qual_beg;
+
+    
+#line 604 "maf_block.d"
+	{
+	cs = maf_block_start;
+	}
+
+#line 144 "maf_block.rl"
+    
+#line 611 "maf_block.d"
+	{
+	int _klen;
+	uint _trans;
+	byte* _acts;
+	uint _nacts;
+	char* _keys;
+
+	if ( p == pe )
+		goto _test_eof;
+	if ( cs == 0 )
+		goto _out;
+_resume:
+	_keys = &_maf_block_trans_keys[_maf_block_key_offsets[cs]];
+	_trans = _maf_block_index_offsets[cs];
+
+	_klen = _maf_block_single_lengths[cs];
+	if ( _klen > 0 ) {
+		char* _lower = _keys;
+		char* _mid;
+		char* _upper = _keys + _klen - 1;
+		while (1) {
+			if ( _upper < _lower )
+				break;
+
+			_mid = _lower + ((_upper-_lower) >> 1);
+			if ( (*p) < *_mid )
+				_upper = _mid - 1;
+			else if ( (*p) > *_mid )
+				_lower = _mid + 1;
+			else {
+				_trans += cast(uint)(_mid - _keys);
+				goto _match;
+			}
+		}
+		_keys += _klen;
+		_trans += _klen;
+	}
+
+	_klen = _maf_block_range_lengths[cs];
+	if ( _klen > 0 ) {
+		char* _lower = _keys;
+		char* _mid;
+		char* _upper = _keys + (_klen<<1) - 2;
+		while (1) {
+			if ( _upper < _lower )
+				break;
+
+			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
+			if ( (*p) < _mid[0] )
+				_upper = _mid - 2;
+			else if ( (*p) > _mid[1] )
+				_lower = _mid + 2;
+			else {
+				_trans += cast(uint)((_mid - _keys)>>1);
+				goto _match;
+			}
+		}
+		_trans += _klen;
+	}
+
+_match:
+	cs = _maf_block_trans_targs[_trans];
+
+	if ( _maf_block_trans_actions[_trans] == 0 )
+		goto _again;
+
+	_acts = &_maf_block_actions[_maf_block_trans_actions[_trans]];
+	_nacts = cast(uint) *_acts++;
+	while ( _nacts-- > 0 )
+	{
+		switch ( *_acts++ )
+		{
+	case 0:
+#line 28 "maf_block.rl"
+	{ int_value = 0; }
+	break;
+	case 1:
+#line 29 "maf_block.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	break;
+	case 2:
+#line 37 "maf_block.rl"
+	{ float_beg = p - line.ptr; }
+	break;
+	case 3:
+#line 38 "maf_block.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+	break;
+	case 4:
+#line 46 "maf_block.rl"
+	{ block.score = float_value; }
+	break;
+	case 5:
+#line 47 "maf_block.rl"
+	{ block.pass = int_value; }
+	break;
+	case 6:
+#line 55 "maf_block.rl"
+	{ src_beg = p - line.ptr; }
+	break;
+	case 7:
+#line 56 "maf_block.rl"
+	{ sequence.source = line[src_beg .. p - line.ptr]; }
+	break;
+	case 8:
+#line 57 "maf_block.rl"
+	{ sequence.start = int_value; }
+	break;
+	case 9:
+#line 58 "maf_block.rl"
+	{ sequence.size = int_value; }
+	break;
+	case 10:
+#line 59 "maf_block.rl"
+	{ sequence.strand = (*p); }
+	break;
+	case 11:
+#line 60 "maf_block.rl"
+	{ sequence.source_size = int_value; }
+	break;
+	case 12:
+#line 61 "maf_block.rl"
+	{ sequences.put(sequence); sequence = MafSequence.init; }
+	break;
+	case 13:
+#line 62 "maf_block.rl"
+	{ assert(line[src_beg .. p - line.ptr] == sequences.data.back.source); }
+	break;
+	case 14:
+#line 70 "maf_block.rl"
+	{ text_beg = p - line.ptr; }
+	break;
+	case 15:
+#line 71 "maf_block.rl"
+	{ sequence.text = line[text_beg .. p - line.ptr]; }
+	break;
+	case 16:
+#line 82 "maf_block.rl"
+	{ sequences.data.back.left_status = (*p); }
+	break;
+	case 17:
+#line 83 "maf_block.rl"
+	{ sequences.data.back.left_count = int_value; }
+	break;
+	case 18:
+#line 84 "maf_block.rl"
+	{ sequences.data.back.right_status = (*p); }
+	break;
+	case 19:
+#line 85 "maf_block.rl"
+	{ sequences.data.back.right_count = int_value; }
+	break;
+	case 20:
+#line 99 "maf_block.rl"
+	{ sequence.empty_status = *p; }
+	break;
+	case 21:
+#line 110 "maf_block.rl"
+	{ qual_beg = p - line.ptr; }
+	break;
+	case 22:
+#line 111 "maf_block.rl"
+	{ sequences.data.back.quality = line[qual_beg .. p - line.ptr]; }
+	break;
+#line 778 "maf_block.d"
+		default: break;
+		}
+	}
+
+_again:
+	if ( cs == 0 )
+		goto _out;
+	if ( ++p != pe )
+		goto _resume;
+	_test_eof: {}
+	if ( p == eof )
+	{
+	byte* __acts = &_maf_block_actions[_maf_block_eof_actions[cs]];
+	uint __nacts = cast(uint) *__acts++;
+	while ( __nacts-- > 0 ) {
+		switch ( *__acts++ ) {
+	case 12:
+#line 61 "maf_block.rl"
+	{ sequences.put(sequence); sequence = MafSequence.init; }
+	break;
+	case 15:
+#line 71 "maf_block.rl"
+	{ sequence.text = line[text_beg .. p - line.ptr]; }
+	break;
+	case 19:
+#line 85 "maf_block.rl"
+	{ sequences.data.back.right_count = int_value; }
+	break;
+	case 22:
+#line 111 "maf_block.rl"
+	{ sequences.data.back.quality = line[qual_beg .. p - line.ptr]; }
+	break;
+#line 811 "maf_block.d"
+		default: break;
+		}
+	}
+	}
+
+	_out: {}
+	}
+
+#line 145 "maf_block.rl"
+
+    block.sequences = sequences.data;
+    return block;
+}
diff --git a/bio/maf/reader.d b/bio/maf/reader.d
new file mode 100644
index 0000000..708c5b3
--- /dev/null
+++ b/bio/maf/reader.d
@@ -0,0 +1,105 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.maf.reader;
+
+import bio.maf.block;
+import bio.maf.parser;
+
+import std.array;
+import std.string;
+import std.stdio;
+import std.algorithm;
+
+///
+struct MafBlockRange {
+    private {
+
+        alias File.ByLine!(char, char) LineRange;
+        File _f;
+        LineRange _lines;
+
+        bool _empty;
+        MafBlock _front;
+
+        void skipHeader() {
+            if (!_lines.empty && _lines.front.startsWith("##maf"))
+                _lines.popFront();
+        }
+    }
+
+    this(string fn) {
+        _f = File(fn);
+        _lines = _f.byLine(KeepTerminator.yes);
+        skipHeader();
+        popFront();
+    }
+
+    ///
+    bool empty() @property const {
+        return _empty;
+    }
+
+    ///
+    MafBlock front() @property {
+        return _front;
+    }
+
+    ///
+    void popFront() {
+        auto block_data = Appender!(char[])();
+        while (!_lines.empty && !_lines.front.chomp().empty) {
+            block_data.put(_lines.front.dup);
+            _lines.popFront();
+        }
+        if (block_data.data.empty) {
+            _empty = true;
+        } else {
+            _front = parseMafBlock(cast(string)(block_data.data));
+            if (!_lines.empty)
+                _lines.popFront();
+        }
+    }
+}
+
+
+///
+class MafReader {
+ 
+    private string _fn;
+
+    ///
+    this(string filename) {
+        _fn = filename;
+    }
+
+    ///
+    string filename() @property const {
+        return _fn;
+    }
+
+    ///
+    MafBlockRange blocks() @property {
+        return MafBlockRange(_fn);
+    }
+}
diff --git a/bio/sam/header.d b/bio/sam/header.d
new file mode 100644
index 0000000..b6ec094
--- /dev/null
+++ b/bio/sam/header.d
@@ -0,0 +1,800 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2015    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.sam.header;
+
+import bio.bam.thirdparty.msgpack;
+import bio.core.utils.format;
+
+import std.algorithm;
+import std.conv;
+import std.format;
+import std.json;
+import std.exception;
+import std.array;
+import std.range;
+import std.traits;
+import std.stdio : stderr;
+
+private {
+
+    struct Field(string _name, string _abbr, T = string) {
+        enum name = _name;
+        enum abbr = _abbr;
+        alias T FieldType;
+    }
+
+    mixin template structFields(T...) {
+        static if (!(T.length == 0)) {
+            mixin(T[0].FieldType.stringof ~ " " ~  T[0].name ~ ";");
+            mixin structFields!(T[1..$]);
+        }
+    }
+
+    string makeSwitchStatements(F...)() {
+        /* certain assumptions about variable names are being made here,
+         * namely, 'record' and 'contents'
+         */
+        char[] result;
+        foreach (t; F) {
+          static if (t.FieldType.stringof == "string")
+            result ~= `case "`~t.abbr~`":`~
+                        `record.`~t.name~`=cast(string)(contents);`~
+                      `break;`.dup;
+          else
+            result ~= `case "`~t.abbr~`":`~
+                        `record.`~t.name~`=to!(`~t.FieldType.stringof~`)(contents);`~
+                      `break;`.dup;
+        }
+        result ~= `default: break;`.dup;
+        return cast(string)result;
+    }
+
+    auto fields(string header_line) {
+        return splitter(header_line[3..$], '\t');
+    }
+
+    /*
+        generates 'parse' method which parses given string and
+        fills corresponding struct fields
+     */
+    mixin template parseStaticMethod(string struct_name, Field...) {
+
+        static auto parse(string line) {
+            mixin(struct_name ~ " record;");
+            foreach (field; fields(line)) {
+                if (field.length < 3) {
+                    continue;
+                }
+                if (field[2] != ':') {
+                    continue;
+                }
+                string contents = field[3..$];
+                switch (field[0..2]) {
+                    mixin(makeSwitchStatements!Field());
+                }
+            }
+            return record;
+        }
+    }
+
+    string serializeFields(Field...)() {
+        static if (Field.length > 0) {
+            char[] str = `if (`~Field[0].name~` != `~Field[0].FieldType.stringof~`.init) {`.dup;
+            str ~= `sink.write("\t` ~ Field[0].abbr ~ `:");`.dup;
+            str ~= `sink.write(`~Field[0].name~`);`.dup;
+            str ~= `}`.dup;
+            return str.idup ~ serializeFields!(Field[1..$])();
+        } else {
+            return "";
+        }
+    }
+
+    /*
+        generates 'toSam' method which converts a struct
+        to SAM header line
+     */
+    mixin template toSamMethod(string line_prefix, Field...) {
+        void toSam(Sink)(auto ref Sink sink) const if (isSomeSink!Sink) {
+            sink.write(line_prefix);
+            mixin(serializeFields!Field());    
+        }
+    }
+
+    string generateHashExpression(Field...)() {
+        char[] res;
+        foreach (t; Field) {
+            res ~= "result = 31 * result + " ~
+                   "typeid(" ~ t.name ~ ").getHash(&" ~ t.name ~ ");".dup;
+        }
+        return res.idup;
+    }
+
+    mixin template toHashMethod(string struct_name, string id_field, Field...) {
+        static if (id_field != null) {
+            hash_t toHash() const {
+                hash_t result = 1;
+                mixin(generateHashExpression!Field());    
+                return result;
+            }
+
+            mixin("int opCmp(const ref " ~ struct_name ~ " other) " ~
+                  "    const pure nothrow @safe" ~
+                  "{" ~
+                  "    return " ~ id_field ~ " < other." ~ id_field ~ " ? -1 : " ~
+                  "           " ~ id_field ~ " > other." ~ id_field ~ " ? 1 : 0;" ~
+                  "}");
+        }
+    }
+
+    string opEqualsExpression(Field...)() {
+        char[] result = Field[0].name ~ " == other.".dup ~ Field[0].name;
+        foreach (t; Field[1..$]) {
+            result ~= " && " ~ t.name ~ " == other.".dup ~ t.name;
+        }
+        return result.idup;
+    }
+
+    mixin template opEqualsMethod(string struct_name, Field...) {
+        mixin("bool opEquals(const ref " ~ struct_name ~ " other)" ~
+              "    pure const @safe nothrow" ~
+              "{" ~
+              "    return " ~ opEqualsExpression!Field() ~ ";" ~
+              "}");
+
+        mixin("bool opEquals(" ~ struct_name ~ " other)" ~
+              "    pure const @safe nothrow" ~
+              "{" ~
+              "    return " ~ opEqualsExpression!Field() ~ ";" ~
+              "}");
+    }
+
+    mixin template getSetIDMethods(string id_field) {
+        static if (id_field != null) {
+            auto getID() const pure nothrow @safe {
+                mixin("return " ~ id_field ~";");
+            }
+
+            mixin("void setID(typeof("~id_field~") id) pure nothrow @safe { " ~ id_field ~ " = id; }");
+        }
+    }
+
+    string generateToMsgpackMethod(Field...)() {
+        char[] method = "packer.beginMap(" ~ to!string(Field.length) ~ ");".dup;
+        foreach (t; Field) {
+            method ~= "packer.pack(`" ~ t.abbr ~ "`);".dup;
+            method ~= "packer.pack(" ~ t.name ~ ");".dup;
+        }
+        return method.idup;
+    }
+
+    mixin template toMsgpackMethod(Field...) {
+
+        void toMsgpack(Packer)(ref Packer packer) const {
+            mixin(generateToMsgpackMethod!Field());
+        }
+    }
+
+    mixin template HeaderLineStruct(string struct_name, 
+                                    string line_prefix,
+                                    string id_field,
+                                    Field...) 
+    {
+         mixin(`struct `~struct_name~`{ 
+                    mixin structFields!Field;
+                    mixin parseStaticMethod!(struct_name, Field);
+                    mixin toSamMethod!(line_prefix, Field);
+                    mixin toHashMethod!(struct_name, id_field, Field);
+                    mixin opEqualsMethod!(struct_name, Field);
+                    mixin getSetIDMethods!id_field;
+                    mixin toMsgpackMethod!Field;
+                }`);
+    }
+
+}
+
+mixin HeaderLineStruct!("HdLine", "@HD", null,
+          Field!("format_version", "VN"),
+          Field!("sorting_order", "SO"));
+
+mixin HeaderLineStruct!("SqLine", "@SQ", "name",
+          Field!("name", "SN"),
+          Field!("length", "LN", uint),
+          Field!("assembly", "AS"),
+          Field!("md5", "M5"),
+          Field!("species", "SP"),
+          Field!("uri", "UR"));
+
+mixin HeaderLineStruct!("RgLine", "@RG", "identifier",
+          Field!("identifier", "ID"),
+          Field!("sequencing_center", "CN"),
+          Field!("description", "DS"),
+          Field!("date", "DT"),
+          Field!("flow_order", "FO"),
+          Field!("key_sequence", "KS"),
+          Field!("library", "LB"),
+          Field!("programs", "PG"),
+          Field!("predicted_insert_size", "PI", int),
+          Field!("platform", "PL"),
+          Field!("platform_unit", "PU"),
+          Field!("sample", "SM"));
+
+mixin HeaderLineStruct!("PgLine", "@PG", "identifier",
+          Field!("identifier", "ID"),
+          Field!("name", "PN"),
+          Field!("command_line", "CL"),
+          Field!("previous_program", "PP"),
+          Field!("program_version", "VN")); // version is a keyword in D
+
+unittest {
+    import std.algorithm;
+    import std.stdio;
+
+    writeln("Testing @HD line parsing...");
+    auto hd_line = HdLine.parse("@HD\tVN:1.0\tSO:coordinate");
+    assert(hd_line.format_version == "1.0");
+    assert(hd_line.sorting_order == "coordinate");
+
+    writeln("Testing @SQ line parsing...");
+    auto sq_line = SqLine.parse("@SQ\tSN:NC_007605\tLN:171823\tM5:6743bd63b3ff2b5b8985d8933c53290a\tUR:ftp://.uk/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz\tAS:NCBI37\tSP:HUMAN");
+    assert(sq_line.name == "NC_007605");
+    assert(sq_line.length == 171823);
+    assert(sq_line.md5 == "6743bd63b3ff2b5b8985d8933c53290a");
+    assert(sq_line.uri.endsWith("hs37d5.fa.gz"));
+    assert(sq_line.assembly == "NCBI37");
+    assert(sq_line.species == "HUMAN");
+
+    writeln("Testing @RG line parsing...");
+    auto rg_line = RgLine.parse("@RG\tID:ERR016155\tLB:HUMgdtRAGDIAAPE\tSM:HG00125\tPI:488\tCN:BGI\tPL:ILLUMINA\tDS:SRP001294");
+    assert(rg_line.identifier == "ERR016155");
+    assert(rg_line.library == "HUMgdtRAGDIAAPE");
+    assert(rg_line.sample == "HG00125");
+    assert(rg_line.predicted_insert_size == 488);
+    assert(rg_line.sequencing_center == "BGI");
+    assert(rg_line.platform == "ILLUMINA");
+    assert(rg_line.description == "SRP001294");
+
+    writeln("Testing @PG line parsing...");
+    auto pg_line = PgLine.parse("@PG\tID:bam_calculate_bq\tPN:samtools\tPP:bam_recalibrate_quality_scores\tVN:0.1.17 (r973:277)\tCL:samtools calmd -Erb $bam_file $reference_fasta > $bq_bam_file");
+    assert(pg_line.identifier == "bam_calculate_bq");
+    assert(pg_line.name == "samtools");
+    assert(pg_line.previous_program == "bam_recalibrate_quality_scores");
+    assert(pg_line.program_version == "0.1.17 (r973:277)");
+    assert(pg_line.command_line.endsWith("$bq_bam_file"));
+}
+
+// workaround for LDC bug #217
+struct ValueRange(T) {
+    this(T[string] dict, string[] ids) {
+        _dict = dict;
+        _ids = ids;
+    }
+
+    private {
+        T[string] _dict;
+        string[] _ids;
+    }
+
+    ref T front() @property { return _dict[_ids[0]]; }
+    ref T back() @property { return _dict[_ids[$-1]]; }
+    bool empty() @property { return _ids.length == 0; }
+    void popFront() { _ids = _ids[1 .. $]; }
+    void popBack() { _ids = _ids[0 .. $ - 1]; }
+    ref T opIndex(size_t i) { return _dict[_ids[i]]; }
+    size_t length() @property { return _ids.length; }
+    ValueRange save() @property { return ValueRange(_dict, _ids[]); }
+}
+
+/// Common class for storing header lines
+class HeaderLineDictionary(T) {
+
+    invariant() {
+        assert(_index_to_id.length == _dict.length);
+        assert(_id_to_index.length == _dict.length);
+        /*
+        foreach(id, index; _id_to_index) {
+            assert(_index_to_id[index] == id);
+        }
+        */
+    }
+
+    ///
+    ref inout(T) opIndex(string id) inout {
+        return _dict[id];
+    }
+
+    ///
+    void opIndexAssign(T line, string id) {
+        _dict[id] = line;
+    }
+
+    ///
+    const(T)* opIn_r(string id) const {
+        return id in _dict;
+    }
+
+    /// Append a line
+    bool add(T line) {
+        auto id = line.getID();
+        if (id !in _dict) {
+            _dict[id] = line;
+            _id_to_index[id] = _index_to_id.length;
+            _index_to_id ~= id;
+            return true;
+        }
+        return false;
+    }
+
+    /// Remove a line with identifier $(D id).
+    bool remove(string id) {
+        if (id in _dict) {
+            auto old_len = _dict.length;
+
+            for (auto j = _id_to_index[id]; j < old_len - 1; ++j) {
+                _index_to_id[j] = _index_to_id[j + 1];
+                _id_to_index[_index_to_id[j]] = j;
+            }
+
+            _index_to_id.length = _index_to_id.length - 1;
+
+            _dict.remove(id);
+            _id_to_index.remove(id); 
+
+            return true;
+        }
+
+        return false;
+    }
+
+    ///
+    int opApply(scope int delegate(ref T line) dg) {
+        foreach (size_t i; 0 .. _dict.length) {
+            auto res = dg(_dict[_index_to_id[i]]);
+            if (res != 0) {
+                return res;
+            }
+        }
+        return 0;
+    }
+
+    ///
+    int opApply(scope int delegate(T line) dg) const {
+        foreach (size_t i; 0 .. _dict.length) {
+            auto res = dg(_dict[_index_to_id[i]]);
+            if (res != 0) {
+                return res;
+            }
+        }
+        return 0;
+    }
+
+    ///
+    int opApply(scope int delegate(ref size_t index, ref T line) dg) {
+        foreach (size_t i; 0 .. _dict.length) {
+            auto res = dg(i, _dict[_index_to_id[i]]);
+            if (res != 0) {
+                return res;
+            }
+        }
+        return 0;
+    }
+
+    /// Clear the dictionary
+    void clear() {
+        _dict = null;
+        _id_to_index = null;
+        _index_to_id.length = 0;
+    }
+
+    static assert(isRandomAccessRange!(ValueRange!T));
+
+    /// Returns: range of lines
+    ValueRange!T values() @property {
+        return ValueRange!T(_dict, _index_to_id);
+    }
+
+    /// Returns: number of stored lines
+    size_t length() @property const {
+        return _dict.length;
+    }
+
+    protected {
+        T[string] _dict;
+        string[] _index_to_id;
+        size_t[string] _id_to_index;
+    }
+}
+
+/// Dictionary of @SQ lines.
+final class SqLineDictionary : HeaderLineDictionary!SqLine
+{
+    ///
+    ref inout(SqLine) getSequence(size_t index) inout {
+        return _dict[_index_to_id[index]];
+    }
+
+    ///
+    int getSequenceIndex(string sequence_name) {
+        size_t* ind = sequence_name in _id_to_index;
+        return (ind is null) ? -1 : cast(int)(*ind);
+    }
+}
+
+/// Dictionary of @RG lines
+alias HeaderLineDictionary!RgLine RgLineDictionary;
+
+/// Dictionary of @PG lines
+alias HeaderLineDictionary!PgLine PgLineDictionary;
+
+/// Represents SAM header
+class SamHeader {
+
+    ///
+    enum DEFAULT_FORMAT_VERSION = "1.3";
+
+    /// Construct empty SAM header
+    this() {
+        sequences = new SqLineDictionary();
+        read_groups = new RgLineDictionary();
+        programs = new PgLineDictionary();
+
+        format_version = DEFAULT_FORMAT_VERSION;
+    }
+
+    /// Parse SAM header given in plain text.
+    this(string header_text) {
+        read_groups = new RgLineDictionary();
+        programs = new PgLineDictionary();
+        format_version = DEFAULT_FORMAT_VERSION;
+
+        import core.memory;
+        core.memory.GC.disable();
+
+        bool parsed_first_line = false;
+        size_t n_sq_lines = 0;
+
+        foreach (line; splitter(header_text, '\n')) {
+            if (line.length < 3) {
+                continue;
+            }
+            if (!parsed_first_line && line[0..3] == "@HD") {
+                auto header_line = HdLine.parse(line);
+                if (header_line.sorting_order.length > 0) {
+                    try {
+                        sorting_order = to!SortingOrder(header_line.sorting_order);
+                    } catch (ConvException e) {
+                        sorting_order = SortingOrder.unknown; 
+                        // FIXME: should we do that silently?
+                    }
+                } else {
+                    sorting_order = SortingOrder.unknown;
+                }
+                format_version = header_line.format_version;
+            }
+            enforce(line[0] == '@', "Header lines must start with @");
+            switch (line[1]) {
+                case 'S':
+                    enforce(line[2] == 'Q');
+                    ++n_sq_lines;
+                    break;
+                case 'R':
+                    enforce(line[2] == 'G');
+                    auto rg_line = RgLine.parse(line);
+                    if (!read_groups.add(rg_line)) {
+                        stderr.writeln("duplicating @RG line ",  rg_line.identifier);
+                    }
+                    break;
+                case 'P':
+                    enforce(line[2] == 'G');
+                    auto pg_line = PgLine.parse(line);
+                    if (!programs.add(pg_line)) {
+                        stderr.writeln("duplicating @PG line ", pg_line.identifier);
+                    }
+                    break;
+                case 'H':
+                    enforce(line[2] == 'D');
+                    break;
+                case 'C':
+                    enforce(line[2] == 'O');
+                    comments ~= line[4..$];
+                    break;
+                default:
+                    assert(0);
+            }
+
+            parsed_first_line = true;
+        }
+
+        if (!parsed_first_line) {
+            format_version = DEFAULT_FORMAT_VERSION;
+        }
+
+        _header_text = header_text;
+        if (n_sq_lines <= 1000000)
+            _parseSqLines(); // parse immediately for typical files
+
+        core.memory.GC.enable();
+    }
+       
+    /// Format version
+    string format_version;
+
+    /// Sorting order
+    SortingOrder sorting_order = SortingOrder.unknown;
+
+    /// Dictionary of @SQ lines. 
+    /// Removal is not allowed, you can only replace the whole dictionary.
+    SqLineDictionary sequences() @property {
+        if (_sequences is null)
+            _parseSqLines();
+        return _sequences;
+    }
+
+    void sequences(SqLineDictionary dict) @property {
+        _sequences = dict;
+    }
+
+    private SqLineDictionary _sequences;
+    private string _header_text;
+    private void _parseSqLines() {
+        import core.memory;
+        core.memory.GC.disable();
+
+        _sequences = new SqLineDictionary();
+
+        foreach (line; splitter(_header_text, '\n')) {
+            if (line.length < 3)
+                continue;
+            if (line[0 .. 3] != "@SQ")
+                continue;
+
+            auto sq_line = SqLine.parse(line);
+            if (!_sequences.add(sq_line)) {
+                stderr.writeln("duplicating @SQ line ",  sq_line.name);
+            }
+        }
+
+        _header_text = null;
+        core.memory.GC.enable();
+    }
+
+    /// Dictionary of @RG lines
+    RgLineDictionary read_groups;
+
+    /// Dictionary of @PG lines
+    PgLineDictionary programs;
+
+    /// Array of @CO lines
+    string[] comments;
+
+    /// Zero-based index of sequence.
+    /// If such sequence does not exist in the header, returns -1.
+    int getSequenceIndex(string sequence_name) {
+        return sequences.getSequenceIndex(sequence_name);
+    }
+
+    ///
+    SqLine getSequence(size_t index) {
+        return sequences.getSequence(index);
+    }
+
+    /// Get header text representation in SAM format (includes trailing '\n')
+    string text() @property {
+        return to!string(this);
+    }
+
+    /// Header text representation in SAM ("%s") or JSON format ("%j").
+    /// $(BR)
+    /// Includes trailing '\n'.
+    void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) {
+        if (fmt.spec == 's')
+            toSam(sink);
+        else if (fmt.spec == 'j')
+            toJson(sink);
+        else
+            throw new FormatException("unknown format specifier");
+    }
+
+    void toSam(Sink)(auto ref Sink sink) if (isSomeSink!Sink) {
+        sink.write("@HD\tVN:");
+        sink.write(format_version);
+        if (sorting_order != SortingOrder.unknown) {
+            sink.write("\tSO:");
+            sink.write(to!string(sorting_order));
+        }
+        sink.write('\n');
+       
+        for (size_t i = 0; i < sequences.length; i++) {
+            auto sq_line = getSequence(i);
+            sq_line.toSam(sink);
+            sink.write('\n');
+        }
+
+        foreach (rg_line; read_groups) {
+            rg_line.toSam(sink);
+            sink.write('\n');
+        }
+
+        foreach (pg_line; programs) {
+            pg_line.toSam(sink);
+            sink.write('\n');
+        }
+
+        foreach (comment; comments) {
+            sink.write("@CO\t");
+            sink.write(comment);
+            sink.write('\n');
+        }
+    }
+
+    void toJson(Sink)(auto ref Sink sink) if (isSomeSink!Sink) {
+        JSONValue[string] result;
+
+        result["format_version"].str = format_version;
+
+        if (sorting_order != SortingOrder.unknown) {
+            result["sorting_order"].str = sorting_order.to!string;
+        }
+
+        auto tmp = new JSONValue[sequences.length];
+
+        for (auto i = 0; i < sequences.length; i++) {
+            auto line = getSequence(i);
+            JSONValue[string] sq;
+            sq["sequence_name"].str = line.name;
+            sq["sequence_length"].uinteger = line.length;
+            sq["assembly"].str = line.assembly;
+            sq["md5"].str = line.md5;
+            sq["species"].str = line.species;
+            sq["uri"].str = line.uri;
+            tmp[i].object = sq;
+        }
+        result["sq_lines"].array = tmp.dup;
+
+        tmp.length = read_groups.length;
+        size_t i = 0;
+        foreach (line; read_groups) {
+            JSONValue[string] sq;
+            sq["identifier"].str = line.identifier;
+            sq["sequencing_center"].str = line.sequencing_center;
+            sq["description"].str = line.description;
+            sq["date"].str = line.date;
+            sq["flow_order"].str = line.flow_order;
+            sq["key_sequence"].str = line.key_sequence;
+            sq["library"].str = line.library;
+            sq["programs"].str = line.programs;
+            sq["predicted_insert_size"].integer = line.predicted_insert_size;
+            sq["platform"].str = line.platform;
+            sq["platform_unit"].str = line.platform_unit;
+            sq["sample"].str = line.sample;
+            tmp[i++].object = sq;
+        }
+        result["rg_lines"].array = tmp.dup;
+
+        tmp.length = programs.length;
+        i = 0;
+        foreach (line; programs) {
+            JSONValue[string] sq;
+            sq["identifier"].str = line.identifier;
+            sq["program_name"].str = line.name;
+            sq["command_line"].str = line.command_line;
+            sq["previous_program"].str = line.previous_program;
+            sq["program_version"].str = line.program_version;
+            tmp.array[i++].object = sq;
+        }
+        result["pg_lines"].array = tmp;
+
+        JSONValue json;
+        json.object = result;
+        sink.write(toJSON(&json));
+    }
+
+    /// Packs message in the following format:
+    /// $(BR)
+    /// MsgPack array with elements
+    ///   $(OL 
+    ///     $(LI format version - string)
+    ///     $(LI sorting order - string)
+    ///     $(LI @SQ lines - array of dictionaries)
+    ///     $(LI @RG lines - array of dictionaries)
+    ///     $(LI @PG lines - array of dictionaries))
+    /// $(BR)
+    /// Dictionary keys are the same as in SAM format.
+    void toMsgpack(Packer)(ref Packer packer) const {
+        enforce(_sequences !is null, "failed to call msgpack");
+        packer.beginArray(5);
+        packer.pack(format_version);
+        packer.pack(to!string(sorting_order));
+        packer.beginArray(_sequences.length);
+        foreach (sq; _sequences)
+            packer.pack(sq);
+        packer.beginArray(read_groups.length);
+        foreach (rg; read_groups)
+            packer.pack(rg);
+        packer.beginArray(programs.length);
+        foreach (pg; programs)
+            packer.pack(pg);
+    }
+}
+
+/// Sorting order
+enum SortingOrder {
+    unknown,    ///
+    unsorted,   ///
+    coordinate, ///
+    queryname   ///
+}
+
+unittest {
+    auto header = new SamHeader();
+    import std.stdio;
+    assert(header.text == "@HD\tVN:1.3\n");
+
+    auto sequence = SqLine("abc", 123123);
+    header.sequences.add(sequence);
+    assert(header.text == "@HD\tVN:1.3\n at SQ\tSN:abc\tLN:123123\n");
+
+    header.sorting_order = SortingOrder.coordinate;
+    header.format_version = "1.2";
+    assert(header.text == "@HD\tVN:1.2\tSO:coordinate\n at SQ\tSN:abc\tLN:123123\n");
+    assert(header.getSequenceIndex("abc") == 0);
+    assert(header.getSequenceIndex("bcd") == -1);
+
+    header.sequences.clear();
+    sequence = SqLine("bcd", 678);
+    sequence.uri = "http://lorem.ipsum";
+    header.sequences.add(sequence);
+    header.format_version = "1.4";
+    assert(header.text == "@HD\tVN:1.4\tSO:coordinate\n at SQ\tSN:bcd\tLN:678\tUR:http://lorem.ipsum\n");
+
+    header.sequences.add(SqLine("def", 321));
+    assert(header.getSequenceIndex("abc") == -1);
+    assert(header.getSequenceIndex("bcd") == 0);
+    assert(header.getSequenceIndex("def") == 1);
+
+    header.sequences.remove("bcd");
+    assert(header.getSequenceIndex("abc") == -1);
+    assert(header.getSequenceIndex("bcd") == -1);
+    assert(header.getSequenceIndex("def") == 0);
+
+    assert(header.text == "@HD\tVN:1.4\tSO:coordinate\n at SQ\tSN:def\tLN:321\n");
+
+    auto dict = new SqLineDictionary();
+    dict.add(SqLine("yay", 111));
+    dict.add(SqLine("zzz", 222));
+
+    auto zzz = dict["zzz"];     // TODO: make 'dict["zzz"].uri = ...' work
+    zzz.uri = "ftp://nyan.cat";
+    dict["zzz"] = zzz;
+    header.sequences = dict;
+
+    assert(header.text == 
+      "@HD\tVN:1.4\tSO:coordinate\n at SQ\tSN:yay\tLN:111\n at SQ\tSN:zzz\tLN:222\tUR:ftp://nyan.cat\n");
+    assert(header.sequences == dict);
+
+    header.sequences.remove("yay");
+    header.sequences.remove("zzz");
+    header.comments ~= "this is a comment";
+
+    assert(header.text == "@HD\tVN:1.4\tSO:coordinate\n at CO\tthis is a comment\n");
+}
diff --git a/bio/sam/reader.d b/bio/sam/reader.d
new file mode 100644
index 0000000..e7724ed
--- /dev/null
+++ b/bio/sam/reader.d
@@ -0,0 +1,222 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.sam.reader;
+
+import bio.bam.abstractreader;
+import bio.sam.header;
+import bio.bam.read;
+import bio.bam.reference;
+import bio.bam.referenceinfo;
+import bio.core.utils.outbuffer;
+import bio.core.utils.range;
+
+import bio.core.utils.bylinefast;
+alias ByLineFast _LineRange;
+
+version(DigitalMars) {
+    import bio.sam.utils.recordparser;
+} else {
+    import bio.sam.utils.fastrecordparser;
+}
+
+import std.stdio;
+import std.array;
+import std.string;
+import std.range;
+import std.algorithm;
+import std.typecons;
+import std.parallelism;
+import std.process;
+import std.exception;
+import std.c.string;
+
+BamRead _parseSamRecord(Tuple!(char[], SamReader, OutBuffer) t) {
+    auto r = parseAlignmentLine(cast(string)t[0], t[1]._header, t[2]);
+    BamRead result;
+    if (t[1]._seqprocmode) {
+        result = r;
+    } else {
+        auto storage = uninitializedArray!(ubyte[])(r.raw_data.length);
+        storage[] = r.raw_data[];
+        result.raw_data = storage;
+    }
+    result.associateWithReader(t[1]);
+    return result;
+}
+
+private {
+    extern(C) size_t lseek(int, size_t, int);
+    bool isSeekable(ref File file) {
+        return lseek(file.fileno(), 0, 0) != ~0;
+    }
+}
+
+///
+class SamReader : IBamSamReader {
+
+    private {
+        version(gzippedSamSupport) {
+        void checkGunzip() {
+            auto gunzip = executeShell("gunzip -V");
+            if (gunzip.status != 0)
+                throw new Exception("gunzip is not installed on this system, can't read gzipped SAM");
+        }
+
+        File openSamFile(string filename) {
+            if (filename.length < 4)
+                throw new Exception("invalid name for SAM file: " ~ filename);
+            if (filename[$ - 3 .. $] == ".gz") {
+                checkGunzip();
+                auto pipe = pipeShell("gunzip -c " ~ filename);
+                return pipe.stdout;
+            } else if (filename[$ - 4 .. $] == ".bam") {
+                throw new Exception("SAM reader can't read BAM file " ~ filename);
+            } else {
+                return File(filename);
+            }
+        }
+
+        } else {
+
+        File openSamFile(string filename) {
+            if (filename[$ - 4 .. $] == ".bam") {
+                throw new Exception("SAM reader can't read BAM file " ~ filename);
+            } else {
+                return File(filename);
+            }
+        }
+
+        }
+    }
+
+    ///
+    this(string filename) {
+        _file = openSamFile(filename);
+        _filename = filename;
+        _seekable = _file.isSeekable();
+        _initializeStream();
+    }
+
+    ///
+    bio.sam.header.SamHeader header() @property {
+        return _header;
+    }
+
+    ///
+    const(bio.bam.referenceinfo.ReferenceSequenceInfo)[] reference_sequences() @property const {
+        return _reference_sequences;
+    }
+
+    ///
+    bool hasReference(string reference) {
+        return null != (reference in _reference_sequence_dict);
+    }
+
+    ///
+    bio.bam.reference.ReferenceSequence opIndex(string ref_name) {
+        enforce(hasReference(ref_name), "Reference with name " ~ ref_name ~ " is not present in the header");
+        auto ref_id = _reference_sequence_dict[ref_name];
+        return ReferenceSequence(null, ref_id, _reference_sequences[ref_id]);
+    }
+
+    /// Reads in SAM file.
+    auto reads() @property {
+        
+        _LineRange lines = _lines;
+        if (_seekable) {
+            if (_filename !is null) {
+                auto file = openSamFile(_filename);
+                lines = ByLineFast(file);
+            } else {
+                _file.seek(0);
+                lines = ByLineFast(_file);
+            }
+            auto dummy = lines.front;
+            for (int i = 0; i < _lines_to_skip; i++)
+                lines.popFront();
+        }
+
+        auto b = new OutBuffer(262144);
+        return lines.zip(repeat(this), repeat(b)).map!_parseSamRecord();
+    }
+
+    ///
+    void assumeSequentialProcessing() {
+        _seqprocmode = true;
+    }
+
+    ///
+    std.range.InputRange!(bio.bam.read.BamRead) allReads() @property {
+        return inputRangeObject(reads);
+    }
+
+    /// Filename
+    string filename() @property const {
+        return _filename;
+    }
+private:
+
+    File _file;
+    bool _seekable;
+    string _filename;
+    _LineRange _lines;
+    ulong _lines_to_skip;
+
+    bool _seqprocmode;
+
+    SamHeader _header;
+    ReferenceSequenceInfo[] _reference_sequences;
+    int[string] _reference_sequence_dict;
+
+    void _initializeStream() {
+        auto header = Appender!(char[])(); 
+
+        _lines = ByLineFast(_file);
+
+        while (!_lines.empty) {
+            auto line = _lines.front;
+            if (line.length > 0 && line[0] == '@') {
+                header.put(line);
+                header.put('\n');
+                _lines_to_skip += 1;
+                _lines.popFront();
+            } else {
+                break;
+            }
+        }
+
+        import core.memory;
+        GC.disable();
+        _header = new SamHeader(cast(string)(header.data));
+        GC.enable();
+
+        _reference_sequences = new ReferenceSequenceInfo[_header.sequences.length];
+        foreach (sq; _header.sequences) {
+            auto seq = ReferenceSequenceInfo(sq.name, sq.length);
+            auto n = cast(int)_reference_sequences.length;
+            _reference_sequence_dict[sq.name] = n;
+            _reference_sequences[_header.getSequenceIndex(seq.name)] = seq;
+        }
+    }
+}
diff --git a/bio/sam/utils/fastrecordparser.d b/bio/sam/utils/fastrecordparser.d
new file mode 100644
index 0000000..04c8faf
--- /dev/null
+++ b/bio/sam/utils/fastrecordparser.d
@@ -0,0 +1,4711 @@
+module bio.sam.utils.fastrecordparser;
+
+#line 1 "sam_alignment.rl"
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+
+#line 28 "sam_alignment.d"
+static const int sam_alignment_start = 1;
+static const int sam_alignment_first_final = 191;
+static const int sam_alignment_error = 0;
+
+static const int sam_alignment_en_recover_from_invalid_qname = 169;
+static const int sam_alignment_en_recover_from_invalid_flag = 170;
+static const int sam_alignment_en_recover_from_invalid_rname = 171;
+static const int sam_alignment_en_recover_from_invalid_pos = 172;
+static const int sam_alignment_en_recover_from_invalid_mapq = 173;
+static const int sam_alignment_en_recover_from_invalid_cigar = 174;
+static const int sam_alignment_en_recover_from_invalid_rnext = 175;
+static const int sam_alignment_en_recover_from_invalid_pnext = 176;
+static const int sam_alignment_en_recover_from_invalid_tlen = 177;
+static const int sam_alignment_en_recover_from_invalid_seq = 178;
+static const int sam_alignment_en_recover_from_invalid_qual = 179;
+static const int sam_alignment_en_recover_from_invalid_tag = 180;
+static const int sam_alignment_en_alignment = 1;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_flag_parsing = 181;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_rname_parsing = 182;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_pos_parsing = 183;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_mapq_parsing = 184;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_cigar_parsing = 185;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_rnext_parsing = 186;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_pnext_parsing = 187;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_tlen_parsing = 188;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_seq_parsing = 189;
+static const int sam_alignment_en_alignment_field_parsing_mandatoryfields_qual_parsing = 190;
+static const int sam_alignment_en_alignment_tag_parsing = 251;
+
+
+#line 419 "sam_alignment.rl"
+
+
+import bio.sam.header;
+import bio.bam.read;
+import bio.bam.bai.bin;
+import bio.core.utils.outbuffer;
+import bio.core.base;
+import std.conv;
+import std.array;
+import std.exception;
+
+BamRead parseAlignmentLine(string line, SamHeader header, OutBuffer buffer=null) {
+    char* p = cast(char*)line.ptr;
+    char* pe = p + line.length;
+    char* eof = pe;
+    int cs;
+
+    if (buffer is null)
+        buffer = new OutBuffer(8192);
+    else
+        buffer.clear();
+
+    size_t rollback_size; // needed in case of invalid data
+    
+    byte current_sign = 1;
+
+    size_t read_name_beg; // position of beginning of QNAME
+
+    size_t sequence_beg; // position of SEQ start
+    int l_seq;           // sequence length
+
+    uint cigar_op_len;   // length of CIGAR operation
+    char cigar_op_chr;   // CIGAR operation
+
+    size_t quals_length;  // number of QUAL characters
+    char quals_last_char; // needed in order to handle '*' correctly
+
+    size_t cigar_op_len_start; // position of start of CIGAR operation
+    
+    long int_value;                      // for storing temporary integers
+    float float_value;                   // for storing temporary floats
+    size_t float_beg;                    // position of start of current float
+    char arraytype;                      // type of last array tag value
+    size_t tag_array_length_offset;      // where the length is stored in the buffer
+
+    string read_name;
+    ushort flag;
+    int pos = -1;
+    int end_pos; // for bin calculation
+    int mate_pos = -1;
+    ubyte mapping_quality = 255;
+    int template_length = 0;
+
+    size_t tag_key_beg, tagvalue_beg;
+    ubyte[] tag_key;
+    size_t rname_beg, rnext_beg;
+
+    int ref_id = -1;
+
+    
+#line 120 "sam_alignment.d"
+	{
+	cs = sam_alignment_start;
+	}
+
+#line 479 "sam_alignment.rl"
+    
+#line 127 "sam_alignment.d"
+	{
+	if ( p == pe )
+		goto _test_eof;
+	switch ( cs )
+	{
+goto case; case 1:
+	if ( (*p) == 9u )
+		goto tr1;
+	if ( (*p) > 63u ) {
+		if ( 65u <= (*p) && (*p) <= 126u )
+			goto tr2;
+	} else if ( (*p) >= 33u )
+		goto tr2;
+	goto tr0;
+tr0:
+#line 50 "sam_alignment.rl"
+	{ p--; {if (true) goto st169;} }
+	goto st0;
+tr3:
+#line 58 "sam_alignment.rl"
+	{ p--; {if (true) goto st170;} }
+	goto st0;
+tr7:
+#line 67 "sam_alignment.rl"
+	{ p--; {if (true) goto st171;} }
+	goto st0;
+tr12:
+#line 75 "sam_alignment.rl"
+	{ p--; {if (true) goto st172;} }
+	goto st0;
+tr16:
+#line 81 "sam_alignment.rl"
+	{ p--; {if (true) goto st173;} }
+	goto st0;
+tr20:
+#line 124 "sam_alignment.rl"
+	{
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) & 0xFFFF0000;
+        buffer.shrink(rollback_size);
+        end_pos = pos + 1;
+        p--; {if (true) goto st174;}
+    }
+	goto st0;
+tr24:
+#line 162 "sam_alignment.rl"
+	{ p--; {if (true) goto st175;} }
+	goto st0;
+tr30:
+#line 175 "sam_alignment.rl"
+	{ p--; {if (true) goto st176;} }
+	goto st0;
+tr34:
+#line 187 "sam_alignment.rl"
+	{ p--; {if (true) goto st177;} }
+	goto st0;
+tr39:
+#line 217 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+        p--; {if (true) goto st178;}
+    }
+	goto st0;
+tr43:
+#line 243 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size);
+        for (size_t i = 0; i < l_seq; ++i)
+            buffer.putUnsafe!ubyte(0xFF);
+        rollback_size = buffer.length;
+        p--; {if (true) goto st179;}
+    }
+	goto st0;
+tr49:
+#line 403 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size); 
+        p--; {if (true) goto st180;}
+    }
+	goto st0;
+#line 208 "sam_alignment.d"
+st0:
+cs = 0;
+	goto _out;
+tr1:
+#line 48 "sam_alignment.rl"
+	{ read_name_beg = p - line.ptr; }
+#line 49 "sam_alignment.rl"
+	{ read_name = line[read_name_beg .. p - line.ptr]; }
+	goto st2;
+tr206:
+#line 49 "sam_alignment.rl"
+	{ read_name = line[read_name_beg .. p - line.ptr]; }
+	goto st2;
+st2:
+	if ( ++p == pe )
+		goto _test_eof2;
+goto case; case 2:
+#line 226 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr4;
+	goto tr3;
+tr4:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st3;
+st3:
+	if ( ++p == pe )
+		goto _test_eof3;
+goto case; case 3:
+#line 240 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr6;
+	goto tr3;
+tr5:
+#line 56 "sam_alignment.rl"
+	{ flag = to!ushort(int_value); }
+	goto st4;
+st4:
+	if ( ++p == pe )
+		goto _test_eof4;
+goto case; case 4:
+#line 254 "sam_alignment.d"
+	if ( (*p) == 42u )
+		goto st150;
+	if ( (*p) > 60u ) {
+		if ( 62u <= (*p) && (*p) <= 126u )
+			goto tr8;
+	} else if ( (*p) >= 33u )
+		goto tr8;
+	goto tr7;
+tr8:
+#line 62 "sam_alignment.rl"
+	{ rname_beg = p - line.ptr; }
+	goto st5;
+st5:
+	if ( ++p == pe )
+		goto _test_eof5;
+goto case; case 5:
+#line 271 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr10;
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto st5;
+	goto tr7;
+tr10:
+#line 63 "sam_alignment.rl"
+	{
+        ref_id = header.getSequenceIndex(line[rname_beg .. p - line.ptr]); 
+    }
+	goto st6;
+st6:
+	if ( ++p == pe )
+		goto _test_eof6;
+goto case; case 6:
+#line 287 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr13;
+	goto tr12;
+tr13:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st7;
+st7:
+	if ( ++p == pe )
+		goto _test_eof7;
+goto case; case 7:
+#line 301 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr15;
+	goto tr12;
+tr14:
+#line 73 "sam_alignment.rl"
+	{ end_pos = pos = to!uint(int_value); }
+	goto st8;
+st8:
+	if ( ++p == pe )
+		goto _test_eof8;
+goto case; case 8:
+#line 315 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr17;
+	goto tr16;
+tr17:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st9;
+st9:
+	if ( ++p == pe )
+		goto _test_eof9;
+goto case; case 9:
+#line 329 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr19;
+	goto tr16;
+tr18:
+#line 79 "sam_alignment.rl"
+	{ mapping_quality = to!ubyte(int_value); }
+#line 85 "sam_alignment.rl"
+	{
+        buffer.capacity = 32 + read_name.length + 1;
+        buffer.putUnsafe!int(ref_id);
+        buffer.putUnsafe!int(pos - 1);
+
+        enforce(read_name.length + 1 <= 255, "Read name " ~ read_name ~ " is too long!");
+
+        // bin will be set later
+        auto bin_mq_nl = ((cast(uint)mapping_quality) << 8) | (read_name.length + 1);
+        buffer.putUnsafe(cast(uint)bin_mq_nl);
+
+        // number of CIGAR operations will be set later
+        buffer.putUnsafe!uint(flag << 16);
+
+        buffer.putUnsafe!int(0);
+        buffer.putUnsafe!int(-1); // mate ref. id
+        buffer.putUnsafe!int(-1); // mate pos
+        buffer.putUnsafe!int(0);  // tlen
+
+        buffer.putUnsafe(cast(ubyte[])read_name);
+        buffer.putUnsafe!ubyte(0);
+
+        rollback_size = buffer.length;
+    }
+	goto st10;
+tr235:
+#line 85 "sam_alignment.rl"
+	{
+        buffer.capacity = 32 + read_name.length + 1;
+        buffer.putUnsafe!int(ref_id);
+        buffer.putUnsafe!int(pos - 1);
+
+        enforce(read_name.length + 1 <= 255, "Read name " ~ read_name ~ " is too long!");
+
+        // bin will be set later
+        auto bin_mq_nl = ((cast(uint)mapping_quality) << 8) | (read_name.length + 1);
+        buffer.putUnsafe(cast(uint)bin_mq_nl);
+
+        // number of CIGAR operations will be set later
+        buffer.putUnsafe!uint(flag << 16);
+
+        buffer.putUnsafe!int(0);
+        buffer.putUnsafe!int(-1); // mate ref. id
+        buffer.putUnsafe!int(-1); // mate pos
+        buffer.putUnsafe!int(0);  // tlen
+
+        buffer.putUnsafe(cast(ubyte[])read_name);
+        buffer.putUnsafe!ubyte(0);
+
+        rollback_size = buffer.length;
+    }
+	goto st10;
+st10:
+	if ( ++p == pe )
+		goto _test_eof10;
+goto case; case 10:
+#line 395 "sam_alignment.d"
+	if ( (*p) == 42u )
+		goto st11;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr22;
+	goto tr20;
+st11:
+	if ( ++p == pe )
+		goto _test_eof11;
+goto case; case 11:
+	if ( (*p) == 9u )
+		goto tr23;
+	goto tr20;
+tr23:
+#line 137 "sam_alignment.rl"
+	{
+        if (end_pos == pos)
+            ++end_pos;
+        {
+        auto bin = reg2bin(pos - 1, end_pos - 1); // 0-based [) interval
+        auto ptr = cast(uint*)(buffer.data.ptr + 2 * uint.sizeof);
+        *ptr = (*ptr) | ((cast(uint)bin) << 16);
+        }
+    }
+	goto st12;
+tr155:
+#line 113 "sam_alignment.rl"
+	{ 
+        auto op = CigarOperation(cigar_op_len, cigar_op_chr);
+        if (op.is_reference_consuming)
+            end_pos += op.length;
+        buffer.put!CigarOperation(op); 
+        {
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) + 1;
+        }
+    }
+#line 137 "sam_alignment.rl"
+	{
+        if (end_pos == pos)
+            ++end_pos;
+        {
+        auto bin = reg2bin(pos - 1, end_pos - 1); // 0-based [) interval
+        auto ptr = cast(uint*)(buffer.data.ptr + 2 * uint.sizeof);
+        *ptr = (*ptr) | ((cast(uint)bin) << 16);
+        }
+    }
+	goto st12;
+st12:
+	if ( ++p == pe )
+		goto _test_eof12;
+goto case; case 12:
+#line 447 "sam_alignment.d"
+	switch( (*p) ) {
+		case 42u: goto st95;
+		case 61u: goto st96;
+		default: break;
+	}
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto tr25;
+	goto tr24;
+tr25:
+#line 155 "sam_alignment.rl"
+	{ rnext_beg = p - line.ptr; }
+	goto st13;
+st13:
+	if ( ++p == pe )
+		goto _test_eof13;
+goto case; case 13:
+#line 464 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr28;
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto st13;
+	goto tr24;
+tr28:
+#line 156 "sam_alignment.rl"
+	{
+        { 
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = header.getSequenceIndex(line[rnext_beg .. p - line.ptr]);
+        }
+    }
+	goto st14;
+tr136:
+#line 148 "sam_alignment.rl"
+	{
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = ref_id;
+        }
+    }
+	goto st14;
+st14:
+	if ( ++p == pe )
+		goto _test_eof14;
+goto case; case 14:
+#line 492 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr31;
+	goto tr30;
+tr31:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st15;
+st15:
+	if ( ++p == pe )
+		goto _test_eof15;
+goto case; case 15:
+#line 506 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr33;
+	goto tr30;
+tr32:
+#line 169 "sam_alignment.rl"
+	{ 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 6 * int.sizeof);
+        *ptr = to!int(int_value) - 1;
+        }
+    }
+	goto st16;
+st16:
+	if ( ++p == pe )
+		goto _test_eof16;
+goto case; case 16:
+#line 525 "sam_alignment.d"
+	switch( (*p) ) {
+		case 43u: goto tr35;
+		case 45u: goto tr35;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr36;
+	goto tr34;
+tr35:
+#line 27 "sam_alignment.rl"
+	{ current_sign = (*p) == '-' ? -1 : 1; }
+	goto st17;
+st17:
+	if ( ++p == pe )
+		goto _test_eof17;
+goto case; case 17:
+#line 542 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr36;
+	goto tr34;
+tr36:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st18;
+st18:
+	if ( ++p == pe )
+		goto _test_eof18;
+goto case; case 18:
+#line 556 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr38;
+	goto tr34;
+tr37:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 181 "sam_alignment.rl"
+	{ 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 7 * int.sizeof);
+        *ptr = to!int(int_value);
+        }
+    }
+	goto st19;
+st19:
+	if ( ++p == pe )
+		goto _test_eof19;
+goto case; case 19:
+#line 577 "sam_alignment.d"
+	switch( (*p) ) {
+		case 42u: goto st20;
+		case 46u: goto tr41;
+		case 61u: goto tr41;
+		default: break;
+	}
+	if ( (*p) > 90u ) {
+		if ( 97u <= (*p) && (*p) <= 122u )
+			goto tr41;
+	} else if ( (*p) >= 65u )
+		goto tr41;
+	goto tr39;
+st20:
+	if ( ++p == pe )
+		goto _test_eof20;
+goto case; case 20:
+	if ( (*p) == 9u )
+		goto tr42;
+	goto tr39;
+tr42:
+#line 223 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+    }
+	goto st21;
+tr101:
+#line 194 "sam_alignment.rl"
+	{ 
+        auto data = cast(ubyte[])line[sequence_beg .. p - line.ptr];
+        l_seq = cast(int)data.length;
+        auto raw_len = (l_seq + 1) / 2;
+
+        // reserve space for base qualities, too
+        buffer.capacity = buffer.length + raw_len + l_seq;
+
+        for (size_t i = 0; i < raw_len; ++i) {
+            auto b = cast(ubyte)(Base(data[2 * i]).internal_code << 4);
+            if (2 * i + 1 < l_seq)
+                b |= cast(ubyte)(Base(data[2 * i + 1]).internal_code);
+            buffer.putUnsafe!ubyte(b);
+        }
+
+        // set l_seq
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 4 * int.sizeof);
+        *ptr = l_seq;
+        }
+
+        rollback_size = buffer.length;
+    }
+	goto st21;
+st21:
+	if ( ++p == pe )
+		goto _test_eof21;
+goto case; case 21:
+#line 633 "sam_alignment.d"
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto tr44;
+	goto tr43;
+tr44:
+#line 230 "sam_alignment.rl"
+	{
+        ++quals_length;
+        quals_last_char = (*p);
+        buffer.putUnsafe!ubyte(cast(ubyte)((*p) - 33));
+    }
+	goto st191;
+st191:
+	if ( ++p == pe )
+		goto _test_eof191;
+goto case; case 191:
+#line 649 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr239;
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto tr44;
+	goto tr43;
+tr239:
+#line 236 "sam_alignment.rl"
+	{
+        // '*' may correspond either to a one-base long sequence
+        // or to absence of information
+        if (quals_length == 1 && quals_last_char == '*' && l_seq == 0)
+            buffer.shrink(rollback_size);
+    }
+#line 253 "sam_alignment.rl"
+	{
+        if (buffer.length - rollback_size != l_seq) {
+            buffer.shrink(rollback_size);
+            for (size_t i = 0; i < l_seq; ++i)
+                buffer.putUnsafe!ubyte(0xFF);
+        }
+        rollback_size = buffer.length;
+    }
+	goto st22;
+tr240:
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr241:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 362 "sam_alignment.rl"
+	{
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr260:
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+#line 379 "sam_alignment.rl"
+	{ 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr263:
+#line 337 "sam_alignment.rl"
+	{
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('H');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr265:
+#line 326 "sam_alignment.rl"
+	{ 
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('Z');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr267:
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+#line 319 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('f');
+        buffer.putUnsafe!float(float_value);
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+tr269:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 285 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        if (int_value < 0) {
+            if (int_value >= byte.min) {
+                buffer.putUnsafe!char('c');
+                buffer.putUnsafe(cast(byte)int_value);
+            } else if (int_value >= short.min) {
+                buffer.putUnsafe!char('s');
+                buffer.putUnsafe(cast(short)int_value);
+            } else if (int_value >= int.min) {
+                buffer.putUnsafe!char('i');
+                buffer.putUnsafe(cast(int)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        } else {
+            if (int_value <= ubyte.max) {
+                buffer.putUnsafe!char('C');
+                buffer.putUnsafe(cast(ubyte)int_value);
+            } else if (int_value <= ushort.max) {
+                buffer.putUnsafe!char('S');
+                buffer.putUnsafe(cast(ushort)int_value);
+            } else if (int_value <= uint.max) {
+                buffer.putUnsafe!char('I');
+                buffer.putUnsafe(cast(uint)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	goto st22;
+st22:
+	if ( ++p == pe )
+		goto _test_eof22;
+goto case; case 22:
+#line 803 "sam_alignment.d"
+	if ( (*p) > 90u ) {
+		if ( 97u <= (*p) && (*p) <= 122u )
+			goto tr45;
+	} else if ( (*p) >= 65u )
+		goto tr45;
+	goto st0;
+tr45:
+#line 400 "sam_alignment.rl"
+	{ tag_key_beg = p - line.ptr; }
+	goto st23;
+st23:
+	if ( ++p == pe )
+		goto _test_eof23;
+goto case; case 23:
+#line 818 "sam_alignment.d"
+	if ( (*p) < 65u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto st24;
+	} else if ( (*p) > 90u ) {
+		if ( 97u <= (*p) && (*p) <= 122u )
+			goto st24;
+	} else
+		goto st24;
+	goto st0;
+st24:
+	if ( ++p == pe )
+		goto _test_eof24;
+goto case; case 24:
+	if ( (*p) == 58u )
+		goto tr48;
+	goto st0;
+tr48:
+#line 401 "sam_alignment.rl"
+	{ tag_key = cast(ubyte[])(line[tag_key_beg .. p - line.ptr]); }
+	goto st25;
+st25:
+	if ( ++p == pe )
+		goto _test_eof25;
+goto case; case 25:
+#line 843 "sam_alignment.d"
+	switch( (*p) ) {
+		case 65u: goto st26;
+		case 66u: goto st28;
+		case 72u: goto st43;
+		case 90u: goto st45;
+		case 102u: goto st47;
+		case 105u: goto st57;
+		default: break;
+	}
+	goto tr49;
+st26:
+	if ( ++p == pe )
+		goto _test_eof26;
+goto case; case 26:
+	if ( (*p) == 58u )
+		goto st27;
+	goto tr49;
+st27:
+	if ( ++p == pe )
+		goto _test_eof27;
+goto case; case 27:
+	if ( 33u <= (*p) && (*p) <= 126u )
+		goto tr57;
+	goto tr49;
+tr57:
+#line 278 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 4;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('A');
+        buffer.putUnsafe!char((*p)); 
+    }
+	goto st192;
+st192:
+	if ( ++p == pe )
+		goto _test_eof192;
+goto case; case 192:
+#line 881 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr240;
+	goto tr49;
+st28:
+	if ( ++p == pe )
+		goto _test_eof28;
+goto case; case 28:
+	if ( (*p) == 58u )
+		goto st29;
+	goto tr49;
+st29:
+	if ( ++p == pe )
+		goto _test_eof29;
+goto case; case 29:
+	switch( (*p) ) {
+		case 67u: goto tr59;
+		case 73u: goto tr59;
+		case 83u: goto tr59;
+		case 99u: goto tr59;
+		case 102u: goto tr60;
+		case 105u: goto tr59;
+		case 115u: goto tr59;
+		default: break;
+	}
+	goto tr49;
+tr59:
+#line 352 "sam_alignment.rl"
+	{
+        arraytype = (*p);
+        buffer.capacity = buffer.length + 8;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('B');
+        buffer.putUnsafe!char(arraytype);
+        buffer.putUnsafe!uint(0);
+        tag_array_length_offset = buffer.length - uint.sizeof;
+    }
+	goto st30;
+st30:
+	if ( ++p == pe )
+		goto _test_eof30;
+goto case; case 30:
+#line 923 "sam_alignment.d"
+	if ( (*p) == 44u )
+		goto st31;
+	goto tr49;
+tr242:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 362 "sam_alignment.rl"
+	{
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	goto st31;
+st31:
+	if ( ++p == pe )
+		goto _test_eof31;
+goto case; case 31:
+#line 952 "sam_alignment.d"
+	switch( (*p) ) {
+		case 43u: goto tr62;
+		case 45u: goto tr62;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr63;
+	goto tr49;
+tr62:
+#line 27 "sam_alignment.rl"
+	{ current_sign = (*p) == '-' ? -1 : 1; }
+	goto st32;
+st32:
+	if ( ++p == pe )
+		goto _test_eof32;
+goto case; case 32:
+#line 969 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr63;
+	goto tr49;
+tr63:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st193;
+st193:
+	if ( ++p == pe )
+		goto _test_eof193;
+goto case; case 193:
+#line 983 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr243;
+	goto tr49;
+tr243:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st194;
+st194:
+	if ( ++p == pe )
+		goto _test_eof194;
+goto case; case 194:
+#line 1000 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr244;
+	goto tr49;
+tr244:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st195;
+st195:
+	if ( ++p == pe )
+		goto _test_eof195;
+goto case; case 195:
+#line 1017 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr245;
+	goto tr49;
+tr245:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st196;
+st196:
+	if ( ++p == pe )
+		goto _test_eof196;
+goto case; case 196:
+#line 1034 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr246;
+	goto tr49;
+tr246:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st197;
+st197:
+	if ( ++p == pe )
+		goto _test_eof197;
+goto case; case 197:
+#line 1051 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr247;
+	goto tr49;
+tr247:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st198;
+st198:
+	if ( ++p == pe )
+		goto _test_eof198;
+goto case; case 198:
+#line 1068 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr248;
+	goto tr49;
+tr248:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st199;
+st199:
+	if ( ++p == pe )
+		goto _test_eof199;
+goto case; case 199:
+#line 1085 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr249;
+	goto tr49;
+tr249:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st200;
+st200:
+	if ( ++p == pe )
+		goto _test_eof200;
+goto case; case 200:
+#line 1102 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr250;
+	goto tr49;
+tr250:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st201;
+st201:
+	if ( ++p == pe )
+		goto _test_eof201;
+goto case; case 201:
+#line 1119 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr251;
+	goto tr49;
+tr251:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st202;
+st202:
+	if ( ++p == pe )
+		goto _test_eof202;
+goto case; case 202:
+#line 1136 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr252;
+	goto tr49;
+tr252:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st203;
+st203:
+	if ( ++p == pe )
+		goto _test_eof203;
+goto case; case 203:
+#line 1153 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr253;
+	goto tr49;
+tr253:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st204;
+st204:
+	if ( ++p == pe )
+		goto _test_eof204;
+goto case; case 204:
+#line 1170 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr254;
+	goto tr49;
+tr254:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st205;
+st205:
+	if ( ++p == pe )
+		goto _test_eof205;
+goto case; case 205:
+#line 1187 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr255;
+	goto tr49;
+tr255:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st206;
+st206:
+	if ( ++p == pe )
+		goto _test_eof206;
+goto case; case 206:
+#line 1204 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr256;
+	goto tr49;
+tr256:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st207;
+st207:
+	if ( ++p == pe )
+		goto _test_eof207;
+goto case; case 207:
+#line 1221 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr257;
+	goto tr49;
+tr257:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st208;
+st208:
+	if ( ++p == pe )
+		goto _test_eof208;
+goto case; case 208:
+#line 1238 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr258;
+	goto tr49;
+tr258:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st209;
+st209:
+	if ( ++p == pe )
+		goto _test_eof209;
+goto case; case 209:
+#line 1255 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr259;
+	goto tr49;
+tr259:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st210;
+st210:
+	if ( ++p == pe )
+		goto _test_eof210;
+goto case; case 210:
+#line 1272 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr241;
+		case 44u: goto tr242;
+		default: break;
+	}
+	goto tr49;
+tr60:
+#line 352 "sam_alignment.rl"
+	{
+        arraytype = (*p);
+        buffer.capacity = buffer.length + 8;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('B');
+        buffer.putUnsafe!char(arraytype);
+        buffer.putUnsafe!uint(0);
+        tag_array_length_offset = buffer.length - uint.sizeof;
+    }
+	goto st33;
+st33:
+	if ( ++p == pe )
+		goto _test_eof33;
+goto case; case 33:
+#line 1295 "sam_alignment.d"
+	if ( (*p) == 44u )
+		goto st34;
+	goto tr49;
+tr261:
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+#line 379 "sam_alignment.rl"
+	{ 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	goto st34;
+st34:
+	if ( ++p == pe )
+		goto _test_eof34;
+goto case; case 34:
+#line 1317 "sam_alignment.d"
+	switch( (*p) ) {
+		case 43u: goto tr65;
+		case 45u: goto tr65;
+		case 46u: goto tr66;
+		case 105u: goto tr68;
+		case 110u: goto tr69;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr67;
+	goto tr49;
+tr65:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st35;
+st35:
+	if ( ++p == pe )
+		goto _test_eof35;
+goto case; case 35:
+#line 1337 "sam_alignment.d"
+	switch( (*p) ) {
+		case 46u: goto st36;
+		case 105u: goto st39;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st213;
+	goto tr49;
+tr66:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st36;
+st36:
+	if ( ++p == pe )
+		goto _test_eof36;
+goto case; case 36:
+#line 1354 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st211;
+	goto tr49;
+st211:
+	if ( ++p == pe )
+		goto _test_eof211;
+goto case; case 211:
+	switch( (*p) ) {
+		case 9u: goto tr260;
+		case 44u: goto tr261;
+		case 69u: goto st37;
+		case 101u: goto st37;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st211;
+	goto tr49;
+st37:
+	if ( ++p == pe )
+		goto _test_eof37;
+goto case; case 37:
+	switch( (*p) ) {
+		case 43u: goto st38;
+		case 45u: goto st38;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st212;
+	goto tr49;
+st38:
+	if ( ++p == pe )
+		goto _test_eof38;
+goto case; case 38:
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st212;
+	goto tr49;
+st212:
+	if ( ++p == pe )
+		goto _test_eof212;
+goto case; case 212:
+	switch( (*p) ) {
+		case 9u: goto tr260;
+		case 44u: goto tr261;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st212;
+	goto tr49;
+tr67:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st213;
+st213:
+	if ( ++p == pe )
+		goto _test_eof213;
+goto case; case 213:
+#line 1411 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr260;
+		case 44u: goto tr261;
+		case 46u: goto st36;
+		case 69u: goto st37;
+		case 101u: goto st37;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st213;
+	goto tr49;
+tr68:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st39;
+st39:
+	if ( ++p == pe )
+		goto _test_eof39;
+goto case; case 39:
+#line 1431 "sam_alignment.d"
+	if ( (*p) == 110u )
+		goto st40;
+	goto tr49;
+st40:
+	if ( ++p == pe )
+		goto _test_eof40;
+goto case; case 40:
+	if ( (*p) == 102u )
+		goto st214;
+	goto tr49;
+st214:
+	if ( ++p == pe )
+		goto _test_eof214;
+goto case; case 214:
+	switch( (*p) ) {
+		case 9u: goto tr260;
+		case 44u: goto tr261;
+		default: break;
+	}
+	goto tr49;
+tr69:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st41;
+st41:
+	if ( ++p == pe )
+		goto _test_eof41;
+goto case; case 41:
+#line 1460 "sam_alignment.d"
+	if ( (*p) == 97u )
+		goto st42;
+	goto tr49;
+st42:
+	if ( ++p == pe )
+		goto _test_eof42;
+goto case; case 42:
+	if ( (*p) == 110u )
+		goto st214;
+	goto tr49;
+st43:
+	if ( ++p == pe )
+		goto _test_eof43;
+goto case; case 43:
+	if ( (*p) == 58u )
+		goto st44;
+	goto tr49;
+st44:
+	if ( ++p == pe )
+		goto _test_eof44;
+goto case; case 44:
+	if ( (*p) < 65u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr80;
+	} else if ( (*p) > 70u ) {
+		if ( 97u <= (*p) && (*p) <= 102u )
+			goto tr80;
+	} else
+		goto tr80;
+	goto tr49;
+tr80:
+#line 317 "sam_alignment.rl"
+	{ tagvalue_beg = p - line.ptr; }
+	goto st215;
+st215:
+	if ( ++p == pe )
+		goto _test_eof215;
+goto case; case 215:
+#line 1499 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr263;
+	if ( (*p) < 65u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto st215;
+	} else if ( (*p) > 70u ) {
+		if ( 97u <= (*p) && (*p) <= 102u )
+			goto st215;
+	} else
+		goto st215;
+	goto tr49;
+st45:
+	if ( ++p == pe )
+		goto _test_eof45;
+goto case; case 45:
+	if ( (*p) == 58u )
+		goto st46;
+	goto tr49;
+st46:
+	if ( ++p == pe )
+		goto _test_eof46;
+goto case; case 46:
+	if ( 32u <= (*p) && (*p) <= 126u )
+		goto tr82;
+	goto tr49;
+tr82:
+#line 317 "sam_alignment.rl"
+	{ tagvalue_beg = p - line.ptr; }
+	goto st216;
+st216:
+	if ( ++p == pe )
+		goto _test_eof216;
+goto case; case 216:
+#line 1533 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr265;
+	if ( 32u <= (*p) && (*p) <= 126u )
+		goto st216;
+	goto tr49;
+st47:
+	if ( ++p == pe )
+		goto _test_eof47;
+goto case; case 47:
+	if ( (*p) == 58u )
+		goto st48;
+	goto tr49;
+st48:
+	if ( ++p == pe )
+		goto _test_eof48;
+goto case; case 48:
+	switch( (*p) ) {
+		case 43u: goto tr84;
+		case 45u: goto tr84;
+		case 46u: goto tr85;
+		case 105u: goto tr87;
+		case 110u: goto tr88;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr86;
+	goto tr49;
+tr84:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st49;
+st49:
+	if ( ++p == pe )
+		goto _test_eof49;
+goto case; case 49:
+#line 1569 "sam_alignment.d"
+	switch( (*p) ) {
+		case 46u: goto st50;
+		case 105u: goto st53;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st219;
+	goto tr49;
+tr85:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st50;
+st50:
+	if ( ++p == pe )
+		goto _test_eof50;
+goto case; case 50:
+#line 1586 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st217;
+	goto tr49;
+st217:
+	if ( ++p == pe )
+		goto _test_eof217;
+goto case; case 217:
+	switch( (*p) ) {
+		case 9u: goto tr267;
+		case 69u: goto st51;
+		case 101u: goto st51;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st217;
+	goto tr49;
+st51:
+	if ( ++p == pe )
+		goto _test_eof51;
+goto case; case 51:
+	switch( (*p) ) {
+		case 43u: goto st52;
+		case 45u: goto st52;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st218;
+	goto tr49;
+st52:
+	if ( ++p == pe )
+		goto _test_eof52;
+goto case; case 52:
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st218;
+	goto tr49;
+st218:
+	if ( ++p == pe )
+		goto _test_eof218;
+goto case; case 218:
+	if ( (*p) == 9u )
+		goto tr267;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st218;
+	goto tr49;
+tr86:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st219;
+st219:
+	if ( ++p == pe )
+		goto _test_eof219;
+goto case; case 219:
+#line 1639 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr267;
+		case 46u: goto st50;
+		case 69u: goto st51;
+		case 101u: goto st51;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto st219;
+	goto tr49;
+tr87:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st53;
+st53:
+	if ( ++p == pe )
+		goto _test_eof53;
+goto case; case 53:
+#line 1658 "sam_alignment.d"
+	if ( (*p) == 110u )
+		goto st54;
+	goto tr49;
+st54:
+	if ( ++p == pe )
+		goto _test_eof54;
+goto case; case 54:
+	if ( (*p) == 102u )
+		goto st220;
+	goto tr49;
+st220:
+	if ( ++p == pe )
+		goto _test_eof220;
+goto case; case 220:
+	if ( (*p) == 9u )
+		goto tr267;
+	goto tr49;
+tr88:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	goto st55;
+st55:
+	if ( ++p == pe )
+		goto _test_eof55;
+goto case; case 55:
+#line 1684 "sam_alignment.d"
+	if ( (*p) == 97u )
+		goto st56;
+	goto tr49;
+st56:
+	if ( ++p == pe )
+		goto _test_eof56;
+goto case; case 56:
+	if ( (*p) == 110u )
+		goto st220;
+	goto tr49;
+st57:
+	if ( ++p == pe )
+		goto _test_eof57;
+goto case; case 57:
+	if ( (*p) == 58u )
+		goto st58;
+	goto tr49;
+st58:
+	if ( ++p == pe )
+		goto _test_eof58;
+goto case; case 58:
+	switch( (*p) ) {
+		case 43u: goto tr99;
+		case 45u: goto tr99;
+		default: break;
+	}
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr100;
+	goto tr49;
+tr99:
+#line 27 "sam_alignment.rl"
+	{ current_sign = (*p) == '-' ? -1 : 1; }
+	goto st59;
+st59:
+	if ( ++p == pe )
+		goto _test_eof59;
+goto case; case 59:
+#line 1722 "sam_alignment.d"
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr100;
+	goto tr49;
+tr100:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st221;
+st221:
+	if ( ++p == pe )
+		goto _test_eof221;
+goto case; case 221:
+#line 1736 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr270;
+	goto tr49;
+tr270:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st222;
+st222:
+	if ( ++p == pe )
+		goto _test_eof222;
+goto case; case 222:
+#line 1750 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr271;
+	goto tr49;
+tr271:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st223;
+st223:
+	if ( ++p == pe )
+		goto _test_eof223;
+goto case; case 223:
+#line 1764 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr272;
+	goto tr49;
+tr272:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st224;
+st224:
+	if ( ++p == pe )
+		goto _test_eof224;
+goto case; case 224:
+#line 1778 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr273;
+	goto tr49;
+tr273:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st225;
+st225:
+	if ( ++p == pe )
+		goto _test_eof225;
+goto case; case 225:
+#line 1792 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr274;
+	goto tr49;
+tr274:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st226;
+st226:
+	if ( ++p == pe )
+		goto _test_eof226;
+goto case; case 226:
+#line 1806 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr275;
+	goto tr49;
+tr275:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st227;
+st227:
+	if ( ++p == pe )
+		goto _test_eof227;
+goto case; case 227:
+#line 1820 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr276;
+	goto tr49;
+tr276:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st228;
+st228:
+	if ( ++p == pe )
+		goto _test_eof228;
+goto case; case 228:
+#line 1834 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr277;
+	goto tr49;
+tr277:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st229;
+st229:
+	if ( ++p == pe )
+		goto _test_eof229;
+goto case; case 229:
+#line 1848 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr278;
+	goto tr49;
+tr278:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st230;
+st230:
+	if ( ++p == pe )
+		goto _test_eof230;
+goto case; case 230:
+#line 1862 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr279;
+	goto tr49;
+tr279:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st231;
+st231:
+	if ( ++p == pe )
+		goto _test_eof231;
+goto case; case 231:
+#line 1876 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr280;
+	goto tr49;
+tr280:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st232;
+st232:
+	if ( ++p == pe )
+		goto _test_eof232;
+goto case; case 232:
+#line 1890 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr281;
+	goto tr49;
+tr281:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st233;
+st233:
+	if ( ++p == pe )
+		goto _test_eof233;
+goto case; case 233:
+#line 1904 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr282;
+	goto tr49;
+tr282:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st234;
+st234:
+	if ( ++p == pe )
+		goto _test_eof234;
+goto case; case 234:
+#line 1918 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr283;
+	goto tr49;
+tr283:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st235;
+st235:
+	if ( ++p == pe )
+		goto _test_eof235;
+goto case; case 235:
+#line 1932 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr284;
+	goto tr49;
+tr284:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st236;
+st236:
+	if ( ++p == pe )
+		goto _test_eof236;
+goto case; case 236:
+#line 1946 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr285;
+	goto tr49;
+tr285:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st237;
+st237:
+	if ( ++p == pe )
+		goto _test_eof237;
+goto case; case 237:
+#line 1960 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr286;
+	goto tr49;
+tr286:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st238;
+st238:
+	if ( ++p == pe )
+		goto _test_eof238;
+goto case; case 238:
+#line 1974 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr269;
+	goto tr49;
+tr41:
+#line 193 "sam_alignment.rl"
+	{ sequence_beg = p - line.ptr; }
+	goto st60;
+st60:
+	if ( ++p == pe )
+		goto _test_eof60;
+goto case; case 60:
+#line 1986 "sam_alignment.d"
+	switch( (*p) ) {
+		case 9u: goto tr101;
+		case 46u: goto st60;
+		case 61u: goto st60;
+		default: break;
+	}
+	if ( (*p) > 90u ) {
+		if ( 97u <= (*p) && (*p) <= 122u )
+			goto st60;
+	} else if ( (*p) >= 65u )
+		goto st60;
+	goto tr39;
+tr38:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st61;
+st61:
+	if ( ++p == pe )
+		goto _test_eof61;
+goto case; case 61:
+#line 2007 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr103;
+	goto tr34;
+tr103:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st62;
+st62:
+	if ( ++p == pe )
+		goto _test_eof62;
+goto case; case 62:
+#line 2021 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr104;
+	goto tr34;
+tr104:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st63;
+st63:
+	if ( ++p == pe )
+		goto _test_eof63;
+goto case; case 63:
+#line 2035 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr105;
+	goto tr34;
+tr105:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st64;
+st64:
+	if ( ++p == pe )
+		goto _test_eof64;
+goto case; case 64:
+#line 2049 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr106;
+	goto tr34;
+tr106:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st65;
+st65:
+	if ( ++p == pe )
+		goto _test_eof65;
+goto case; case 65:
+#line 2063 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr107;
+	goto tr34;
+tr107:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st66;
+st66:
+	if ( ++p == pe )
+		goto _test_eof66;
+goto case; case 66:
+#line 2077 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr108;
+	goto tr34;
+tr108:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st67;
+st67:
+	if ( ++p == pe )
+		goto _test_eof67;
+goto case; case 67:
+#line 2091 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr109;
+	goto tr34;
+tr109:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st68;
+st68:
+	if ( ++p == pe )
+		goto _test_eof68;
+goto case; case 68:
+#line 2105 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr110;
+	goto tr34;
+tr110:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st69;
+st69:
+	if ( ++p == pe )
+		goto _test_eof69;
+goto case; case 69:
+#line 2119 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr111;
+	goto tr34;
+tr111:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st70;
+st70:
+	if ( ++p == pe )
+		goto _test_eof70;
+goto case; case 70:
+#line 2133 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr112;
+	goto tr34;
+tr112:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st71;
+st71:
+	if ( ++p == pe )
+		goto _test_eof71;
+goto case; case 71:
+#line 2147 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr113;
+	goto tr34;
+tr113:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st72;
+st72:
+	if ( ++p == pe )
+		goto _test_eof72;
+goto case; case 72:
+#line 2161 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr114;
+	goto tr34;
+tr114:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st73;
+st73:
+	if ( ++p == pe )
+		goto _test_eof73;
+goto case; case 73:
+#line 2175 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr115;
+	goto tr34;
+tr115:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st74;
+st74:
+	if ( ++p == pe )
+		goto _test_eof74;
+goto case; case 74:
+#line 2189 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr116;
+	goto tr34;
+tr116:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st75;
+st75:
+	if ( ++p == pe )
+		goto _test_eof75;
+goto case; case 75:
+#line 2203 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr117;
+	goto tr34;
+tr117:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st76;
+st76:
+	if ( ++p == pe )
+		goto _test_eof76;
+goto case; case 76:
+#line 2217 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr118;
+	goto tr34;
+tr118:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st77;
+st77:
+	if ( ++p == pe )
+		goto _test_eof77;
+goto case; case 77:
+#line 2231 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr37;
+	goto tr34;
+tr33:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st78;
+st78:
+	if ( ++p == pe )
+		goto _test_eof78;
+goto case; case 78:
+#line 2243 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr119;
+	goto tr30;
+tr119:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st79;
+st79:
+	if ( ++p == pe )
+		goto _test_eof79;
+goto case; case 79:
+#line 2257 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr120;
+	goto tr30;
+tr120:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st80;
+st80:
+	if ( ++p == pe )
+		goto _test_eof80;
+goto case; case 80:
+#line 2271 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr121;
+	goto tr30;
+tr121:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st81;
+st81:
+	if ( ++p == pe )
+		goto _test_eof81;
+goto case; case 81:
+#line 2285 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr122;
+	goto tr30;
+tr122:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st82;
+st82:
+	if ( ++p == pe )
+		goto _test_eof82;
+goto case; case 82:
+#line 2299 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr123;
+	goto tr30;
+tr123:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st83;
+st83:
+	if ( ++p == pe )
+		goto _test_eof83;
+goto case; case 83:
+#line 2313 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr124;
+	goto tr30;
+tr124:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st84;
+st84:
+	if ( ++p == pe )
+		goto _test_eof84;
+goto case; case 84:
+#line 2327 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr125;
+	goto tr30;
+tr125:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st85;
+st85:
+	if ( ++p == pe )
+		goto _test_eof85;
+goto case; case 85:
+#line 2341 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr126;
+	goto tr30;
+tr126:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st86;
+st86:
+	if ( ++p == pe )
+		goto _test_eof86;
+goto case; case 86:
+#line 2355 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr127;
+	goto tr30;
+tr127:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st87;
+st87:
+	if ( ++p == pe )
+		goto _test_eof87;
+goto case; case 87:
+#line 2369 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr128;
+	goto tr30;
+tr128:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st88;
+st88:
+	if ( ++p == pe )
+		goto _test_eof88;
+goto case; case 88:
+#line 2383 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr129;
+	goto tr30;
+tr129:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st89;
+st89:
+	if ( ++p == pe )
+		goto _test_eof89;
+goto case; case 89:
+#line 2397 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr130;
+	goto tr30;
+tr130:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st90;
+st90:
+	if ( ++p == pe )
+		goto _test_eof90;
+goto case; case 90:
+#line 2411 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr131;
+	goto tr30;
+tr131:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st91;
+st91:
+	if ( ++p == pe )
+		goto _test_eof91;
+goto case; case 91:
+#line 2425 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr132;
+	goto tr30;
+tr132:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st92;
+st92:
+	if ( ++p == pe )
+		goto _test_eof92;
+goto case; case 92:
+#line 2439 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr133;
+	goto tr30;
+tr133:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st93;
+st93:
+	if ( ++p == pe )
+		goto _test_eof93;
+goto case; case 93:
+#line 2453 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr134;
+	goto tr30;
+tr134:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st94;
+st94:
+	if ( ++p == pe )
+		goto _test_eof94;
+goto case; case 94:
+#line 2467 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr32;
+	goto tr30;
+st95:
+	if ( ++p == pe )
+		goto _test_eof95;
+goto case; case 95:
+	if ( (*p) == 9u )
+		goto st14;
+	goto tr24;
+st96:
+	if ( ++p == pe )
+		goto _test_eof96;
+goto case; case 96:
+	if ( (*p) == 9u )
+		goto tr136;
+	goto tr24;
+tr22:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st97;
+tr156:
+#line 113 "sam_alignment.rl"
+	{ 
+        auto op = CigarOperation(cigar_op_len, cigar_op_chr);
+        if (op.is_reference_consuming)
+            end_pos += op.length;
+        buffer.put!CigarOperation(op); 
+        {
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) + 1;
+        }
+    }
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st97;
+st97:
+	if ( ++p == pe )
+		goto _test_eof97;
+goto case; case 97:
+#line 2512 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr137;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr137:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st98;
+st98:
+	if ( ++p == pe )
+		goto _test_eof98;
+goto case; case 98:
+#line 2538 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr139;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr139:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st99;
+st99:
+	if ( ++p == pe )
+		goto _test_eof99;
+goto case; case 99:
+#line 2564 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr140;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr140:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st100;
+st100:
+	if ( ++p == pe )
+		goto _test_eof100;
+goto case; case 100:
+#line 2590 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr141;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr141:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st101;
+st101:
+	if ( ++p == pe )
+		goto _test_eof101;
+goto case; case 101:
+#line 2616 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr142;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr142:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st102;
+st102:
+	if ( ++p == pe )
+		goto _test_eof102;
+goto case; case 102:
+#line 2642 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr143;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr143:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st103;
+st103:
+	if ( ++p == pe )
+		goto _test_eof103;
+goto case; case 103:
+#line 2668 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr144;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr144:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st104;
+st104:
+	if ( ++p == pe )
+		goto _test_eof104;
+goto case; case 104:
+#line 2694 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr145;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr145:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st105;
+st105:
+	if ( ++p == pe )
+		goto _test_eof105;
+goto case; case 105:
+#line 2720 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr146;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr146:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st106;
+st106:
+	if ( ++p == pe )
+		goto _test_eof106;
+goto case; case 106:
+#line 2746 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr147;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr147:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st107;
+st107:
+	if ( ++p == pe )
+		goto _test_eof107;
+goto case; case 107:
+#line 2772 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr148;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr148:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st108;
+st108:
+	if ( ++p == pe )
+		goto _test_eof108;
+goto case; case 108:
+#line 2798 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr149;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr149:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st109;
+st109:
+	if ( ++p == pe )
+		goto _test_eof109;
+goto case; case 109:
+#line 2824 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr150;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr150:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st110;
+st110:
+	if ( ++p == pe )
+		goto _test_eof110;
+goto case; case 110:
+#line 2850 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr151;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr151:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st111;
+st111:
+	if ( ++p == pe )
+		goto _test_eof111;
+goto case; case 111:
+#line 2876 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr152;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr152:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st112;
+st112:
+	if ( ++p == pe )
+		goto _test_eof112;
+goto case; case 112:
+#line 2902 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr153;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr153:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st113;
+st113:
+	if ( ++p == pe )
+		goto _test_eof113;
+goto case; case 113:
+#line 2928 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) < 72u ) {
+		if ( 48u <= (*p) && (*p) <= 57u )
+			goto tr154;
+	} else if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else
+		goto tr138;
+	goto tr20;
+tr154:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st114;
+st114:
+	if ( ++p == pe )
+		goto _test_eof114;
+goto case; case 114:
+#line 2954 "sam_alignment.d"
+	switch( (*p) ) {
+		case 61u: goto tr138;
+		case 68u: goto tr138;
+		case 80u: goto tr138;
+		case 83u: goto tr138;
+		case 88u: goto tr138;
+		default: break;
+	}
+	if ( (*p) > 73u ) {
+		if ( 77u <= (*p) && (*p) <= 78u )
+			goto tr138;
+	} else if ( (*p) >= 72u )
+		goto tr138;
+	goto tr20;
+tr138:
+#line 111 "sam_alignment.rl"
+	{ cigar_op_len = to!uint(int_value); }
+#line 112 "sam_alignment.rl"
+	{ cigar_op_chr = (*p); }
+	goto st115;
+st115:
+	if ( ++p == pe )
+		goto _test_eof115;
+goto case; case 115:
+#line 2979 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr155;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr156;
+	goto tr20;
+tr19:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st116;
+st116:
+	if ( ++p == pe )
+		goto _test_eof116;
+goto case; case 116:
+#line 2993 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr157;
+	goto tr16;
+tr157:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st117;
+st117:
+	if ( ++p == pe )
+		goto _test_eof117;
+goto case; case 117:
+#line 3007 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr158;
+	goto tr16;
+tr158:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st118;
+st118:
+	if ( ++p == pe )
+		goto _test_eof118;
+goto case; case 118:
+#line 3021 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr159;
+	goto tr16;
+tr159:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st119;
+st119:
+	if ( ++p == pe )
+		goto _test_eof119;
+goto case; case 119:
+#line 3035 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr160;
+	goto tr16;
+tr160:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st120;
+st120:
+	if ( ++p == pe )
+		goto _test_eof120;
+goto case; case 120:
+#line 3049 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr161;
+	goto tr16;
+tr161:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st121;
+st121:
+	if ( ++p == pe )
+		goto _test_eof121;
+goto case; case 121:
+#line 3063 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr162;
+	goto tr16;
+tr162:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st122;
+st122:
+	if ( ++p == pe )
+		goto _test_eof122;
+goto case; case 122:
+#line 3077 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr163;
+	goto tr16;
+tr163:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st123;
+st123:
+	if ( ++p == pe )
+		goto _test_eof123;
+goto case; case 123:
+#line 3091 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr164;
+	goto tr16;
+tr164:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st124;
+st124:
+	if ( ++p == pe )
+		goto _test_eof124;
+goto case; case 124:
+#line 3105 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr165;
+	goto tr16;
+tr165:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st125;
+st125:
+	if ( ++p == pe )
+		goto _test_eof125;
+goto case; case 125:
+#line 3119 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr166;
+	goto tr16;
+tr166:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st126;
+st126:
+	if ( ++p == pe )
+		goto _test_eof126;
+goto case; case 126:
+#line 3133 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr167;
+	goto tr16;
+tr167:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st127;
+st127:
+	if ( ++p == pe )
+		goto _test_eof127;
+goto case; case 127:
+#line 3147 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr168;
+	goto tr16;
+tr168:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st128;
+st128:
+	if ( ++p == pe )
+		goto _test_eof128;
+goto case; case 128:
+#line 3161 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr169;
+	goto tr16;
+tr169:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st129;
+st129:
+	if ( ++p == pe )
+		goto _test_eof129;
+goto case; case 129:
+#line 3175 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr170;
+	goto tr16;
+tr170:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st130;
+st130:
+	if ( ++p == pe )
+		goto _test_eof130;
+goto case; case 130:
+#line 3189 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr171;
+	goto tr16;
+tr171:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st131;
+st131:
+	if ( ++p == pe )
+		goto _test_eof131;
+goto case; case 131:
+#line 3203 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr172;
+	goto tr16;
+tr172:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st132;
+st132:
+	if ( ++p == pe )
+		goto _test_eof132;
+goto case; case 132:
+#line 3217 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr18;
+	goto tr16;
+tr15:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st133;
+st133:
+	if ( ++p == pe )
+		goto _test_eof133;
+goto case; case 133:
+#line 3229 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr173;
+	goto tr12;
+tr173:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st134;
+st134:
+	if ( ++p == pe )
+		goto _test_eof134;
+goto case; case 134:
+#line 3243 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr174;
+	goto tr12;
+tr174:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st135;
+st135:
+	if ( ++p == pe )
+		goto _test_eof135;
+goto case; case 135:
+#line 3257 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr175;
+	goto tr12;
+tr175:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st136;
+st136:
+	if ( ++p == pe )
+		goto _test_eof136;
+goto case; case 136:
+#line 3271 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr176;
+	goto tr12;
+tr176:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st137;
+st137:
+	if ( ++p == pe )
+		goto _test_eof137;
+goto case; case 137:
+#line 3285 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr177;
+	goto tr12;
+tr177:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st138;
+st138:
+	if ( ++p == pe )
+		goto _test_eof138;
+goto case; case 138:
+#line 3299 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr178;
+	goto tr12;
+tr178:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st139;
+st139:
+	if ( ++p == pe )
+		goto _test_eof139;
+goto case; case 139:
+#line 3313 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr179;
+	goto tr12;
+tr179:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st140;
+st140:
+	if ( ++p == pe )
+		goto _test_eof140;
+goto case; case 140:
+#line 3327 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr180;
+	goto tr12;
+tr180:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st141;
+st141:
+	if ( ++p == pe )
+		goto _test_eof141;
+goto case; case 141:
+#line 3341 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr181;
+	goto tr12;
+tr181:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st142;
+st142:
+	if ( ++p == pe )
+		goto _test_eof142;
+goto case; case 142:
+#line 3355 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr182;
+	goto tr12;
+tr182:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st143;
+st143:
+	if ( ++p == pe )
+		goto _test_eof143;
+goto case; case 143:
+#line 3369 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr183;
+	goto tr12;
+tr183:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st144;
+st144:
+	if ( ++p == pe )
+		goto _test_eof144;
+goto case; case 144:
+#line 3383 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr184;
+	goto tr12;
+tr184:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st145;
+st145:
+	if ( ++p == pe )
+		goto _test_eof145;
+goto case; case 145:
+#line 3397 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr185;
+	goto tr12;
+tr185:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st146;
+st146:
+	if ( ++p == pe )
+		goto _test_eof146;
+goto case; case 146:
+#line 3411 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr186;
+	goto tr12;
+tr186:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st147;
+st147:
+	if ( ++p == pe )
+		goto _test_eof147;
+goto case; case 147:
+#line 3425 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr187;
+	goto tr12;
+tr187:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st148;
+st148:
+	if ( ++p == pe )
+		goto _test_eof148;
+goto case; case 148:
+#line 3439 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr188;
+	goto tr12;
+tr188:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st149;
+st149:
+	if ( ++p == pe )
+		goto _test_eof149;
+goto case; case 149:
+#line 3453 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr14;
+	goto tr12;
+st150:
+	if ( ++p == pe )
+		goto _test_eof150;
+goto case; case 150:
+	if ( (*p) == 9u )
+		goto st6;
+	goto tr7;
+tr6:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st151;
+st151:
+	if ( ++p == pe )
+		goto _test_eof151;
+goto case; case 151:
+#line 3472 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr190;
+	goto tr3;
+tr190:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st152;
+st152:
+	if ( ++p == pe )
+		goto _test_eof152;
+goto case; case 152:
+#line 3486 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr191;
+	goto tr3;
+tr191:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st153;
+st153:
+	if ( ++p == pe )
+		goto _test_eof153;
+goto case; case 153:
+#line 3500 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr192;
+	goto tr3;
+tr192:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st154;
+st154:
+	if ( ++p == pe )
+		goto _test_eof154;
+goto case; case 154:
+#line 3514 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr193;
+	goto tr3;
+tr193:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st155;
+st155:
+	if ( ++p == pe )
+		goto _test_eof155;
+goto case; case 155:
+#line 3528 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr194;
+	goto tr3;
+tr194:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st156;
+st156:
+	if ( ++p == pe )
+		goto _test_eof156;
+goto case; case 156:
+#line 3542 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr195;
+	goto tr3;
+tr195:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st157;
+st157:
+	if ( ++p == pe )
+		goto _test_eof157;
+goto case; case 157:
+#line 3556 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr196;
+	goto tr3;
+tr196:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st158;
+st158:
+	if ( ++p == pe )
+		goto _test_eof158;
+goto case; case 158:
+#line 3570 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr197;
+	goto tr3;
+tr197:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st159;
+st159:
+	if ( ++p == pe )
+		goto _test_eof159;
+goto case; case 159:
+#line 3584 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr198;
+	goto tr3;
+tr198:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st160;
+st160:
+	if ( ++p == pe )
+		goto _test_eof160;
+goto case; case 160:
+#line 3598 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr199;
+	goto tr3;
+tr199:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st161;
+st161:
+	if ( ++p == pe )
+		goto _test_eof161;
+goto case; case 161:
+#line 3612 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr200;
+	goto tr3;
+tr200:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st162;
+st162:
+	if ( ++p == pe )
+		goto _test_eof162;
+goto case; case 162:
+#line 3626 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr201;
+	goto tr3;
+tr201:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st163;
+st163:
+	if ( ++p == pe )
+		goto _test_eof163;
+goto case; case 163:
+#line 3640 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr202;
+	goto tr3;
+tr202:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st164;
+st164:
+	if ( ++p == pe )
+		goto _test_eof164;
+goto case; case 164:
+#line 3654 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr203;
+	goto tr3;
+tr203:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st165;
+st165:
+	if ( ++p == pe )
+		goto _test_eof165;
+goto case; case 165:
+#line 3668 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr204;
+	goto tr3;
+tr204:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st166;
+st166:
+	if ( ++p == pe )
+		goto _test_eof166;
+goto case; case 166:
+#line 3682 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	if ( 48u <= (*p) && (*p) <= 57u )
+		goto tr205;
+	goto tr3;
+tr205:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	goto st167;
+st167:
+	if ( ++p == pe )
+		goto _test_eof167;
+goto case; case 167:
+#line 3696 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr5;
+	goto tr3;
+tr2:
+#line 48 "sam_alignment.rl"
+	{ read_name_beg = p - line.ptr; }
+	goto st168;
+st168:
+	if ( ++p == pe )
+		goto _test_eof168;
+goto case; case 168:
+#line 3708 "sam_alignment.d"
+	if ( (*p) == 9u )
+		goto tr206;
+	if ( (*p) > 63u ) {
+		if ( 65u <= (*p) && (*p) <= 126u )
+			goto st168;
+	} else if ( (*p) >= 33u )
+		goto st168;
+	goto tr0;
+st169:
+	if ( ++p == pe )
+		goto _test_eof169;
+goto case; case 169:
+	if ( (*p) == 9u )
+		goto tr209;
+	goto st169;
+tr209:
+#line 51 "sam_alignment.rl"
+	{ p--; {if (true) goto st181;} }
+	goto st239;
+st239:
+	if ( ++p == pe )
+		goto _test_eof239;
+goto case; case 239:
+#line 3732 "sam_alignment.d"
+	goto st0;
+st170:
+	if ( ++p == pe )
+		goto _test_eof170;
+goto case; case 170:
+	if ( (*p) == 9u )
+		goto tr211;
+	goto st170;
+tr211:
+#line 59 "sam_alignment.rl"
+	{ p--; {if (true) goto st182;} }
+	goto st240;
+st240:
+	if ( ++p == pe )
+		goto _test_eof240;
+goto case; case 240:
+#line 3749 "sam_alignment.d"
+	goto st0;
+st171:
+	if ( ++p == pe )
+		goto _test_eof171;
+goto case; case 171:
+	if ( (*p) == 9u )
+		goto tr213;
+	goto st171;
+tr213:
+#line 68 "sam_alignment.rl"
+	{ p--; {if (true) goto st183;} }
+	goto st241;
+st241:
+	if ( ++p == pe )
+		goto _test_eof241;
+goto case; case 241:
+#line 3766 "sam_alignment.d"
+	goto st0;
+st172:
+	if ( ++p == pe )
+		goto _test_eof172;
+goto case; case 172:
+	if ( (*p) == 9u )
+		goto tr215;
+	goto st172;
+tr215:
+#line 76 "sam_alignment.rl"
+	{ p--; {if (true) goto st184;} }
+	goto st242;
+st242:
+	if ( ++p == pe )
+		goto _test_eof242;
+goto case; case 242:
+#line 3783 "sam_alignment.d"
+	goto st0;
+st173:
+	if ( ++p == pe )
+		goto _test_eof173;
+goto case; case 173:
+	if ( (*p) == 9u )
+		goto tr217;
+	goto st173;
+tr217:
+#line 82 "sam_alignment.rl"
+	{ p--; {if (true) goto st185;} }
+	goto st243;
+st243:
+	if ( ++p == pe )
+		goto _test_eof243;
+goto case; case 243:
+#line 3800 "sam_alignment.d"
+	goto st0;
+st174:
+	if ( ++p == pe )
+		goto _test_eof174;
+goto case; case 174:
+	if ( (*p) == 9u )
+		goto tr219;
+	goto st174;
+tr219:
+#line 131 "sam_alignment.rl"
+	{ p--; {if (true) goto st186;} }
+	goto st244;
+st244:
+	if ( ++p == pe )
+		goto _test_eof244;
+goto case; case 244:
+#line 3817 "sam_alignment.d"
+	goto st0;
+st175:
+	if ( ++p == pe )
+		goto _test_eof175;
+goto case; case 175:
+	if ( (*p) == 9u )
+		goto tr221;
+	goto st175;
+tr221:
+#line 163 "sam_alignment.rl"
+	{ p--; {if (true) goto st187;} }
+	goto st245;
+st245:
+	if ( ++p == pe )
+		goto _test_eof245;
+goto case; case 245:
+#line 3834 "sam_alignment.d"
+	goto st0;
+st176:
+	if ( ++p == pe )
+		goto _test_eof176;
+goto case; case 176:
+	if ( (*p) == 9u )
+		goto tr223;
+	goto st176;
+tr223:
+#line 176 "sam_alignment.rl"
+	{ p--; {if (true) goto st188;} }
+	goto st246;
+st246:
+	if ( ++p == pe )
+		goto _test_eof246;
+goto case; case 246:
+#line 3851 "sam_alignment.d"
+	goto st0;
+st177:
+	if ( ++p == pe )
+		goto _test_eof177;
+goto case; case 177:
+	if ( (*p) == 9u )
+		goto tr225;
+	goto st177;
+tr225:
+#line 188 "sam_alignment.rl"
+	{ p--; {if (true) goto st189;} }
+	goto st247;
+st247:
+	if ( ++p == pe )
+		goto _test_eof247;
+goto case; case 247:
+#line 3868 "sam_alignment.d"
+	goto st0;
+st178:
+	if ( ++p == pe )
+		goto _test_eof178;
+goto case; case 178:
+	if ( (*p) == 9u )
+		goto tr227;
+	goto st178;
+tr227:
+#line 221 "sam_alignment.rl"
+	{ p--; {if (true) goto st190;} }
+	goto st248;
+st248:
+	if ( ++p == pe )
+		goto _test_eof248;
+goto case; case 248:
+#line 3885 "sam_alignment.d"
+	goto st0;
+st179:
+	if ( ++p == pe )
+		goto _test_eof179;
+goto case; case 179:
+	if ( (*p) == 9u )
+		goto tr229;
+	goto st179;
+tr229:
+#line 251 "sam_alignment.rl"
+	{ p--; {if (true) goto st251;} }
+	goto st249;
+st249:
+	if ( ++p == pe )
+		goto _test_eof249;
+goto case; case 249:
+#line 3902 "sam_alignment.d"
+	goto st0;
+st180:
+	if ( ++p == pe )
+		goto _test_eof180;
+goto case; case 180:
+	if ( (*p) == 9u )
+		goto tr231;
+	goto st180;
+tr231:
+#line 408 "sam_alignment.rl"
+	{ p--; {if (true) goto st251;} }
+	goto st250;
+st250:
+	if ( ++p == pe )
+		goto _test_eof250;
+goto case; case 250:
+#line 3919 "sam_alignment.d"
+	goto st0;
+st181:
+	if ( ++p == pe )
+		goto _test_eof181;
+goto case; case 181:
+	if ( (*p) == 9u )
+		goto st2;
+	goto st0;
+st182:
+	if ( ++p == pe )
+		goto _test_eof182;
+goto case; case 182:
+	if ( (*p) == 9u )
+		goto st4;
+	goto st0;
+st183:
+	if ( ++p == pe )
+		goto _test_eof183;
+goto case; case 183:
+	if ( (*p) == 9u )
+		goto st6;
+	goto st0;
+st184:
+	if ( ++p == pe )
+		goto _test_eof184;
+goto case; case 184:
+	if ( (*p) == 9u )
+		goto st8;
+	goto st0;
+st185:
+	if ( ++p == pe )
+		goto _test_eof185;
+goto case; case 185:
+	if ( (*p) == 9u )
+		goto tr235;
+	goto st0;
+st186:
+	if ( ++p == pe )
+		goto _test_eof186;
+goto case; case 186:
+	if ( (*p) == 9u )
+		goto tr23;
+	goto st0;
+st187:
+	if ( ++p == pe )
+		goto _test_eof187;
+goto case; case 187:
+	if ( (*p) == 9u )
+		goto st14;
+	goto st0;
+st188:
+	if ( ++p == pe )
+		goto _test_eof188;
+goto case; case 188:
+	if ( (*p) == 9u )
+		goto st16;
+	goto st0;
+st189:
+	if ( ++p == pe )
+		goto _test_eof189;
+goto case; case 189:
+	if ( (*p) == 9u )
+		goto st19;
+	goto st0;
+st190:
+	if ( ++p == pe )
+		goto _test_eof190;
+goto case; case 190:
+	if ( (*p) == 9u )
+		goto st21;
+	goto st0;
+st251:
+	if ( ++p == pe )
+		goto _test_eof251;
+goto case; case 251:
+	if ( (*p) == 9u )
+		goto st22;
+	goto st0;
+		default: break;
+	}
+	_test_eof2: cs = 2; goto _test_eof; 
+	_test_eof3: cs = 3; goto _test_eof; 
+	_test_eof4: cs = 4; goto _test_eof; 
+	_test_eof5: cs = 5; goto _test_eof; 
+	_test_eof6: cs = 6; goto _test_eof; 
+	_test_eof7: cs = 7; goto _test_eof; 
+	_test_eof8: cs = 8; goto _test_eof; 
+	_test_eof9: cs = 9; goto _test_eof; 
+	_test_eof10: cs = 10; goto _test_eof; 
+	_test_eof11: cs = 11; goto _test_eof; 
+	_test_eof12: cs = 12; goto _test_eof; 
+	_test_eof13: cs = 13; goto _test_eof; 
+	_test_eof14: cs = 14; goto _test_eof; 
+	_test_eof15: cs = 15; goto _test_eof; 
+	_test_eof16: cs = 16; goto _test_eof; 
+	_test_eof17: cs = 17; goto _test_eof; 
+	_test_eof18: cs = 18; goto _test_eof; 
+	_test_eof19: cs = 19; goto _test_eof; 
+	_test_eof20: cs = 20; goto _test_eof; 
+	_test_eof21: cs = 21; goto _test_eof; 
+	_test_eof191: cs = 191; goto _test_eof; 
+	_test_eof22: cs = 22; goto _test_eof; 
+	_test_eof23: cs = 23; goto _test_eof; 
+	_test_eof24: cs = 24; goto _test_eof; 
+	_test_eof25: cs = 25; goto _test_eof; 
+	_test_eof26: cs = 26; goto _test_eof; 
+	_test_eof27: cs = 27; goto _test_eof; 
+	_test_eof192: cs = 192; goto _test_eof; 
+	_test_eof28: cs = 28; goto _test_eof; 
+	_test_eof29: cs = 29; goto _test_eof; 
+	_test_eof30: cs = 30; goto _test_eof; 
+	_test_eof31: cs = 31; goto _test_eof; 
+	_test_eof32: cs = 32; goto _test_eof; 
+	_test_eof193: cs = 193; goto _test_eof; 
+	_test_eof194: cs = 194; goto _test_eof; 
+	_test_eof195: cs = 195; goto _test_eof; 
+	_test_eof196: cs = 196; goto _test_eof; 
+	_test_eof197: cs = 197; goto _test_eof; 
+	_test_eof198: cs = 198; goto _test_eof; 
+	_test_eof199: cs = 199; goto _test_eof; 
+	_test_eof200: cs = 200; goto _test_eof; 
+	_test_eof201: cs = 201; goto _test_eof; 
+	_test_eof202: cs = 202; goto _test_eof; 
+	_test_eof203: cs = 203; goto _test_eof; 
+	_test_eof204: cs = 204; goto _test_eof; 
+	_test_eof205: cs = 205; goto _test_eof; 
+	_test_eof206: cs = 206; goto _test_eof; 
+	_test_eof207: cs = 207; goto _test_eof; 
+	_test_eof208: cs = 208; goto _test_eof; 
+	_test_eof209: cs = 209; goto _test_eof; 
+	_test_eof210: cs = 210; goto _test_eof; 
+	_test_eof33: cs = 33; goto _test_eof; 
+	_test_eof34: cs = 34; goto _test_eof; 
+	_test_eof35: cs = 35; goto _test_eof; 
+	_test_eof36: cs = 36; goto _test_eof; 
+	_test_eof211: cs = 211; goto _test_eof; 
+	_test_eof37: cs = 37; goto _test_eof; 
+	_test_eof38: cs = 38; goto _test_eof; 
+	_test_eof212: cs = 212; goto _test_eof; 
+	_test_eof213: cs = 213; goto _test_eof; 
+	_test_eof39: cs = 39; goto _test_eof; 
+	_test_eof40: cs = 40; goto _test_eof; 
+	_test_eof214: cs = 214; goto _test_eof; 
+	_test_eof41: cs = 41; goto _test_eof; 
+	_test_eof42: cs = 42; goto _test_eof; 
+	_test_eof43: cs = 43; goto _test_eof; 
+	_test_eof44: cs = 44; goto _test_eof; 
+	_test_eof215: cs = 215; goto _test_eof; 
+	_test_eof45: cs = 45; goto _test_eof; 
+	_test_eof46: cs = 46; goto _test_eof; 
+	_test_eof216: cs = 216; goto _test_eof; 
+	_test_eof47: cs = 47; goto _test_eof; 
+	_test_eof48: cs = 48; goto _test_eof; 
+	_test_eof49: cs = 49; goto _test_eof; 
+	_test_eof50: cs = 50; goto _test_eof; 
+	_test_eof217: cs = 217; goto _test_eof; 
+	_test_eof51: cs = 51; goto _test_eof; 
+	_test_eof52: cs = 52; goto _test_eof; 
+	_test_eof218: cs = 218; goto _test_eof; 
+	_test_eof219: cs = 219; goto _test_eof; 
+	_test_eof53: cs = 53; goto _test_eof; 
+	_test_eof54: cs = 54; goto _test_eof; 
+	_test_eof220: cs = 220; goto _test_eof; 
+	_test_eof55: cs = 55; goto _test_eof; 
+	_test_eof56: cs = 56; goto _test_eof; 
+	_test_eof57: cs = 57; goto _test_eof; 
+	_test_eof58: cs = 58; goto _test_eof; 
+	_test_eof59: cs = 59; goto _test_eof; 
+	_test_eof221: cs = 221; goto _test_eof; 
+	_test_eof222: cs = 222; goto _test_eof; 
+	_test_eof223: cs = 223; goto _test_eof; 
+	_test_eof224: cs = 224; goto _test_eof; 
+	_test_eof225: cs = 225; goto _test_eof; 
+	_test_eof226: cs = 226; goto _test_eof; 
+	_test_eof227: cs = 227; goto _test_eof; 
+	_test_eof228: cs = 228; goto _test_eof; 
+	_test_eof229: cs = 229; goto _test_eof; 
+	_test_eof230: cs = 230; goto _test_eof; 
+	_test_eof231: cs = 231; goto _test_eof; 
+	_test_eof232: cs = 232; goto _test_eof; 
+	_test_eof233: cs = 233; goto _test_eof; 
+	_test_eof234: cs = 234; goto _test_eof; 
+	_test_eof235: cs = 235; goto _test_eof; 
+	_test_eof236: cs = 236; goto _test_eof; 
+	_test_eof237: cs = 237; goto _test_eof; 
+	_test_eof238: cs = 238; goto _test_eof; 
+	_test_eof60: cs = 60; goto _test_eof; 
+	_test_eof61: cs = 61; goto _test_eof; 
+	_test_eof62: cs = 62; goto _test_eof; 
+	_test_eof63: cs = 63; goto _test_eof; 
+	_test_eof64: cs = 64; goto _test_eof; 
+	_test_eof65: cs = 65; goto _test_eof; 
+	_test_eof66: cs = 66; goto _test_eof; 
+	_test_eof67: cs = 67; goto _test_eof; 
+	_test_eof68: cs = 68; goto _test_eof; 
+	_test_eof69: cs = 69; goto _test_eof; 
+	_test_eof70: cs = 70; goto _test_eof; 
+	_test_eof71: cs = 71; goto _test_eof; 
+	_test_eof72: cs = 72; goto _test_eof; 
+	_test_eof73: cs = 73; goto _test_eof; 
+	_test_eof74: cs = 74; goto _test_eof; 
+	_test_eof75: cs = 75; goto _test_eof; 
+	_test_eof76: cs = 76; goto _test_eof; 
+	_test_eof77: cs = 77; goto _test_eof; 
+	_test_eof78: cs = 78; goto _test_eof; 
+	_test_eof79: cs = 79; goto _test_eof; 
+	_test_eof80: cs = 80; goto _test_eof; 
+	_test_eof81: cs = 81; goto _test_eof; 
+	_test_eof82: cs = 82; goto _test_eof; 
+	_test_eof83: cs = 83; goto _test_eof; 
+	_test_eof84: cs = 84; goto _test_eof; 
+	_test_eof85: cs = 85; goto _test_eof; 
+	_test_eof86: cs = 86; goto _test_eof; 
+	_test_eof87: cs = 87; goto _test_eof; 
+	_test_eof88: cs = 88; goto _test_eof; 
+	_test_eof89: cs = 89; goto _test_eof; 
+	_test_eof90: cs = 90; goto _test_eof; 
+	_test_eof91: cs = 91; goto _test_eof; 
+	_test_eof92: cs = 92; goto _test_eof; 
+	_test_eof93: cs = 93; goto _test_eof; 
+	_test_eof94: cs = 94; goto _test_eof; 
+	_test_eof95: cs = 95; goto _test_eof; 
+	_test_eof96: cs = 96; goto _test_eof; 
+	_test_eof97: cs = 97; goto _test_eof; 
+	_test_eof98: cs = 98; goto _test_eof; 
+	_test_eof99: cs = 99; goto _test_eof; 
+	_test_eof100: cs = 100; goto _test_eof; 
+	_test_eof101: cs = 101; goto _test_eof; 
+	_test_eof102: cs = 102; goto _test_eof; 
+	_test_eof103: cs = 103; goto _test_eof; 
+	_test_eof104: cs = 104; goto _test_eof; 
+	_test_eof105: cs = 105; goto _test_eof; 
+	_test_eof106: cs = 106; goto _test_eof; 
+	_test_eof107: cs = 107; goto _test_eof; 
+	_test_eof108: cs = 108; goto _test_eof; 
+	_test_eof109: cs = 109; goto _test_eof; 
+	_test_eof110: cs = 110; goto _test_eof; 
+	_test_eof111: cs = 111; goto _test_eof; 
+	_test_eof112: cs = 112; goto _test_eof; 
+	_test_eof113: cs = 113; goto _test_eof; 
+	_test_eof114: cs = 114; goto _test_eof; 
+	_test_eof115: cs = 115; goto _test_eof; 
+	_test_eof116: cs = 116; goto _test_eof; 
+	_test_eof117: cs = 117; goto _test_eof; 
+	_test_eof118: cs = 118; goto _test_eof; 
+	_test_eof119: cs = 119; goto _test_eof; 
+	_test_eof120: cs = 120; goto _test_eof; 
+	_test_eof121: cs = 121; goto _test_eof; 
+	_test_eof122: cs = 122; goto _test_eof; 
+	_test_eof123: cs = 123; goto _test_eof; 
+	_test_eof124: cs = 124; goto _test_eof; 
+	_test_eof125: cs = 125; goto _test_eof; 
+	_test_eof126: cs = 126; goto _test_eof; 
+	_test_eof127: cs = 127; goto _test_eof; 
+	_test_eof128: cs = 128; goto _test_eof; 
+	_test_eof129: cs = 129; goto _test_eof; 
+	_test_eof130: cs = 130; goto _test_eof; 
+	_test_eof131: cs = 131; goto _test_eof; 
+	_test_eof132: cs = 132; goto _test_eof; 
+	_test_eof133: cs = 133; goto _test_eof; 
+	_test_eof134: cs = 134; goto _test_eof; 
+	_test_eof135: cs = 135; goto _test_eof; 
+	_test_eof136: cs = 136; goto _test_eof; 
+	_test_eof137: cs = 137; goto _test_eof; 
+	_test_eof138: cs = 138; goto _test_eof; 
+	_test_eof139: cs = 139; goto _test_eof; 
+	_test_eof140: cs = 140; goto _test_eof; 
+	_test_eof141: cs = 141; goto _test_eof; 
+	_test_eof142: cs = 142; goto _test_eof; 
+	_test_eof143: cs = 143; goto _test_eof; 
+	_test_eof144: cs = 144; goto _test_eof; 
+	_test_eof145: cs = 145; goto _test_eof; 
+	_test_eof146: cs = 146; goto _test_eof; 
+	_test_eof147: cs = 147; goto _test_eof; 
+	_test_eof148: cs = 148; goto _test_eof; 
+	_test_eof149: cs = 149; goto _test_eof; 
+	_test_eof150: cs = 150; goto _test_eof; 
+	_test_eof151: cs = 151; goto _test_eof; 
+	_test_eof152: cs = 152; goto _test_eof; 
+	_test_eof153: cs = 153; goto _test_eof; 
+	_test_eof154: cs = 154; goto _test_eof; 
+	_test_eof155: cs = 155; goto _test_eof; 
+	_test_eof156: cs = 156; goto _test_eof; 
+	_test_eof157: cs = 157; goto _test_eof; 
+	_test_eof158: cs = 158; goto _test_eof; 
+	_test_eof159: cs = 159; goto _test_eof; 
+	_test_eof160: cs = 160; goto _test_eof; 
+	_test_eof161: cs = 161; goto _test_eof; 
+	_test_eof162: cs = 162; goto _test_eof; 
+	_test_eof163: cs = 163; goto _test_eof; 
+	_test_eof164: cs = 164; goto _test_eof; 
+	_test_eof165: cs = 165; goto _test_eof; 
+	_test_eof166: cs = 166; goto _test_eof; 
+	_test_eof167: cs = 167; goto _test_eof; 
+	_test_eof168: cs = 168; goto _test_eof; 
+	_test_eof169: cs = 169; goto _test_eof; 
+	_test_eof239: cs = 239; goto _test_eof; 
+	_test_eof170: cs = 170; goto _test_eof; 
+	_test_eof240: cs = 240; goto _test_eof; 
+	_test_eof171: cs = 171; goto _test_eof; 
+	_test_eof241: cs = 241; goto _test_eof; 
+	_test_eof172: cs = 172; goto _test_eof; 
+	_test_eof242: cs = 242; goto _test_eof; 
+	_test_eof173: cs = 173; goto _test_eof; 
+	_test_eof243: cs = 243; goto _test_eof; 
+	_test_eof174: cs = 174; goto _test_eof; 
+	_test_eof244: cs = 244; goto _test_eof; 
+	_test_eof175: cs = 175; goto _test_eof; 
+	_test_eof245: cs = 245; goto _test_eof; 
+	_test_eof176: cs = 176; goto _test_eof; 
+	_test_eof246: cs = 246; goto _test_eof; 
+	_test_eof177: cs = 177; goto _test_eof; 
+	_test_eof247: cs = 247; goto _test_eof; 
+	_test_eof178: cs = 178; goto _test_eof; 
+	_test_eof248: cs = 248; goto _test_eof; 
+	_test_eof179: cs = 179; goto _test_eof; 
+	_test_eof249: cs = 249; goto _test_eof; 
+	_test_eof180: cs = 180; goto _test_eof; 
+	_test_eof250: cs = 250; goto _test_eof; 
+	_test_eof181: cs = 181; goto _test_eof; 
+	_test_eof182: cs = 182; goto _test_eof; 
+	_test_eof183: cs = 183; goto _test_eof; 
+	_test_eof184: cs = 184; goto _test_eof; 
+	_test_eof185: cs = 185; goto _test_eof; 
+	_test_eof186: cs = 186; goto _test_eof; 
+	_test_eof187: cs = 187; goto _test_eof; 
+	_test_eof188: cs = 188; goto _test_eof; 
+	_test_eof189: cs = 189; goto _test_eof; 
+	_test_eof190: cs = 190; goto _test_eof; 
+	_test_eof251: cs = 251; goto _test_eof; 
+
+	_test_eof: {}
+	if ( p == eof )
+	{
+	switch ( cs ) {
+	case 1: 
+	case 168: 
+#line 50 "sam_alignment.rl"
+	{ p--; {if (true) goto st169;} }
+	break;
+	case 2: 
+	case 3: 
+	case 151: 
+	case 152: 
+	case 153: 
+	case 154: 
+	case 155: 
+	case 156: 
+	case 157: 
+	case 158: 
+	case 159: 
+	case 160: 
+	case 161: 
+	case 162: 
+	case 163: 
+	case 164: 
+	case 165: 
+	case 166: 
+	case 167: 
+#line 58 "sam_alignment.rl"
+	{ p--; {if (true) goto st170;} }
+	break;
+	case 4: 
+	case 5: 
+	case 150: 
+#line 67 "sam_alignment.rl"
+	{ p--; {if (true) goto st171;} }
+	break;
+	case 6: 
+	case 7: 
+	case 133: 
+	case 134: 
+	case 135: 
+	case 136: 
+	case 137: 
+	case 138: 
+	case 139: 
+	case 140: 
+	case 141: 
+	case 142: 
+	case 143: 
+	case 144: 
+	case 145: 
+	case 146: 
+	case 147: 
+	case 148: 
+	case 149: 
+#line 75 "sam_alignment.rl"
+	{ p--; {if (true) goto st172;} }
+	break;
+	case 8: 
+	case 9: 
+	case 116: 
+	case 117: 
+	case 118: 
+	case 119: 
+	case 120: 
+	case 121: 
+	case 122: 
+	case 123: 
+	case 124: 
+	case 125: 
+	case 126: 
+	case 127: 
+	case 128: 
+	case 129: 
+	case 130: 
+	case 131: 
+	case 132: 
+#line 81 "sam_alignment.rl"
+	{ p--; {if (true) goto st173;} }
+	break;
+	case 10: 
+	case 11: 
+	case 97: 
+	case 98: 
+	case 99: 
+	case 100: 
+	case 101: 
+	case 102: 
+	case 103: 
+	case 104: 
+	case 105: 
+	case 106: 
+	case 107: 
+	case 108: 
+	case 109: 
+	case 110: 
+	case 111: 
+	case 112: 
+	case 113: 
+	case 114: 
+	case 115: 
+#line 124 "sam_alignment.rl"
+	{
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) & 0xFFFF0000;
+        buffer.shrink(rollback_size);
+        end_pos = pos + 1;
+        p--; {if (true) goto st174;}
+    }
+	break;
+	case 12: 
+	case 13: 
+	case 95: 
+	case 96: 
+#line 162 "sam_alignment.rl"
+	{ p--; {if (true) goto st175;} }
+	break;
+	case 14: 
+	case 15: 
+	case 78: 
+	case 79: 
+	case 80: 
+	case 81: 
+	case 82: 
+	case 83: 
+	case 84: 
+	case 85: 
+	case 86: 
+	case 87: 
+	case 88: 
+	case 89: 
+	case 90: 
+	case 91: 
+	case 92: 
+	case 93: 
+	case 94: 
+#line 175 "sam_alignment.rl"
+	{ p--; {if (true) goto st176;} }
+	break;
+	case 16: 
+	case 17: 
+	case 18: 
+	case 61: 
+	case 62: 
+	case 63: 
+	case 64: 
+	case 65: 
+	case 66: 
+	case 67: 
+	case 68: 
+	case 69: 
+	case 70: 
+	case 71: 
+	case 72: 
+	case 73: 
+	case 74: 
+	case 75: 
+	case 76: 
+	case 77: 
+#line 187 "sam_alignment.rl"
+	{ p--; {if (true) goto st177;} }
+	break;
+	case 19: 
+	case 20: 
+	case 60: 
+#line 217 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+        p--; {if (true) goto st178;}
+    }
+	break;
+	case 21: 
+#line 243 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size);
+        for (size_t i = 0; i < l_seq; ++i)
+            buffer.putUnsafe!ubyte(0xFF);
+        rollback_size = buffer.length;
+        p--; {if (true) goto st179;}
+    }
+	break;
+	case 25: 
+	case 26: 
+	case 27: 
+	case 28: 
+	case 29: 
+	case 30: 
+	case 31: 
+	case 32: 
+	case 33: 
+	case 34: 
+	case 35: 
+	case 36: 
+	case 37: 
+	case 38: 
+	case 39: 
+	case 40: 
+	case 41: 
+	case 42: 
+	case 43: 
+	case 44: 
+	case 45: 
+	case 46: 
+	case 47: 
+	case 48: 
+	case 49: 
+	case 50: 
+	case 51: 
+	case 52: 
+	case 53: 
+	case 54: 
+	case 55: 
+	case 56: 
+	case 57: 
+	case 58: 
+	case 59: 
+#line 403 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size); 
+        p--; {if (true) goto st180;}
+    }
+	break;
+	case 192: 
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 191: 
+#line 236 "sam_alignment.rl"
+	{
+        // '*' may correspond either to a one-base long sequence
+        // or to absence of information
+        if (quals_length == 1 && quals_last_char == '*' && l_seq == 0)
+            buffer.shrink(rollback_size);
+    }
+#line 253 "sam_alignment.rl"
+	{
+        if (buffer.length - rollback_size != l_seq) {
+            buffer.shrink(rollback_size);
+            for (size_t i = 0; i < l_seq; ++i)
+                buffer.putUnsafe!ubyte(0xFF);
+        }
+        rollback_size = buffer.length;
+    }
+	break;
+	case 216: 
+#line 326 "sam_alignment.rl"
+	{ 
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('Z');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 215: 
+#line 337 "sam_alignment.rl"
+	{
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('H');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 221: 
+	case 222: 
+	case 223: 
+	case 224: 
+	case 225: 
+	case 226: 
+	case 227: 
+	case 228: 
+	case 229: 
+	case 230: 
+	case 231: 
+	case 232: 
+	case 233: 
+	case 234: 
+	case 235: 
+	case 236: 
+	case 237: 
+	case 238: 
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 285 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        if (int_value < 0) {
+            if (int_value >= byte.min) {
+                buffer.putUnsafe!char('c');
+                buffer.putUnsafe(cast(byte)int_value);
+            } else if (int_value >= short.min) {
+                buffer.putUnsafe!char('s');
+                buffer.putUnsafe(cast(short)int_value);
+            } else if (int_value >= int.min) {
+                buffer.putUnsafe!char('i');
+                buffer.putUnsafe(cast(int)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        } else {
+            if (int_value <= ubyte.max) {
+                buffer.putUnsafe!char('C');
+                buffer.putUnsafe(cast(ubyte)int_value);
+            } else if (int_value <= ushort.max) {
+                buffer.putUnsafe!char('S');
+                buffer.putUnsafe(cast(ushort)int_value);
+            } else if (int_value <= uint.max) {
+                buffer.putUnsafe!char('I');
+                buffer.putUnsafe(cast(uint)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 193: 
+	case 194: 
+	case 195: 
+	case 196: 
+	case 197: 
+	case 198: 
+	case 199: 
+	case 200: 
+	case 201: 
+	case 202: 
+	case 203: 
+	case 204: 
+	case 205: 
+	case 206: 
+	case 207: 
+	case 208: 
+	case 209: 
+	case 210: 
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+#line 362 "sam_alignment.rl"
+	{
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 217: 
+	case 218: 
+	case 219: 
+	case 220: 
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+#line 319 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('f');
+        buffer.putUnsafe!float(float_value);
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+	case 211: 
+	case 212: 
+	case 213: 
+	case 214: 
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+#line 379 "sam_alignment.rl"
+	{ 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+#line 4658 "sam_alignment.d"
+		default: break;
+	}
+	}
+
+	_out: {}
+	}
+
+#line 480 "sam_alignment.rl"
+
+    BamRead read;
+    read.raw_data = buffer.data[];
+    return read;
+}
+
+unittest {
+    import std.algorithm;
+    import std.math;
+
+    auto line = "ERR016155.15021091\t185\t20\t60033\t25\t66S35M\t=\t60033\t0\tAGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC\t#####################################################################################################\tX0:i:1\tX1:i:0\tXC:i:35\tMD:Z:17A8A8\tRG:Z:ERR016155\tAM:i:0\tNM:i:2\tSM:i:25\tXT:A:U\tBQ:Z:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\tY0:B:c,1,2,3\ [...]
+
+    auto header = new SamHeader("@SQ\tSN:20\tLN:1234567");
+    auto alignment = parseAlignmentLine(line, header);
+    assert(alignment.name == "ERR016155.15021091");
+    assert(equal(alignment.sequence(), "AGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC"));
+    assert(alignment.cigarString() == "66S35M");
+    assert(alignment.flag == 185);
+    assert(alignment.position == 60032);
+    assert(alignment.mapping_quality == 25);
+    assert(alignment.mate_position == 60032);
+    assert(alignment.ref_id == 0);
+    assert(alignment.mate_ref_id == 0);
+    assert(to!ubyte(alignment["AM"]) == 0);
+    assert(to!ubyte(alignment["SM"]) == 25);
+    assert(to!string(alignment["MD"]) == "17A8A8");
+    assert(equal(to!(byte[])(alignment["Y0"]), [1, 2, 3]));
+    assert(equal!approxEqual(to!(float[])(alignment["Y1"]), [13.263, -3.1415, 52.63461]));
+    assert(to!char(alignment["XT"]) == 'U');
+
+    import bio.bam.reference;
+
+    auto info = ReferenceSequenceInfo("20", 1234567);
+
+    auto invalid_cigar_string = "1\t100\t20\t50000\t30\tMZABC\t=\t50000\t0\tACGT\t####";
+    alignment = parseAlignmentLine(invalid_cigar_string, header);
+    assert(equal(alignment.sequence(), "ACGT"));
+
+    auto invalid_tag_and_qual = "2\t100\t20\t5\t40\t27M30X5D\t=\t3\t10\tACT\t !\n\tX1:i:7\tX3:i:zzz\tX4:i:5";
+    alignment = parseAlignmentLine(invalid_tag_and_qual, header);
+    assert(alignment.base_qualities == [255, 255, 255]); // i.e. invalid
+    assert(to!ubyte(alignment["X1"]) == 7);
+    assert(alignment["X3"].is_nothing);
+    assert(to!ubyte(alignment["X4"]) == 5);
+}
diff --git a/bio/sam/utils/recordparser.d b/bio/sam/utils/recordparser.d
new file mode 100644
index 0000000..2b38044
--- /dev/null
+++ b/bio/sam/utils/recordparser.d
@@ -0,0 +1,1457 @@
+module bio.sam.utils.recordparser;
+
+#line 1 "sam_alignment.rl"
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+
+#line 28 "sam_alignment.d"
+static byte[] _sam_alignment_actions = [
+	0, 1, 0, 1, 2, 1, 4, 1, 
+	6, 1, 7, 1, 8, 1, 9, 1, 
+	10, 1, 11, 1, 12, 1, 13, 1, 
+	14, 1, 15, 1, 16, 1, 17, 1, 
+	18, 1, 19, 1, 21, 1, 22, 1, 
+	23, 1, 27, 1, 28, 1, 29, 1, 
+	30, 1, 31, 1, 32, 1, 33, 1, 
+	34, 1, 35, 1, 36, 1, 37, 1, 
+	39, 1, 40, 1, 41, 1, 42, 1, 
+	43, 1, 44, 1, 45, 1, 46, 1, 
+	48, 1, 49, 1, 51, 1, 53, 1, 
+	57, 1, 60, 1, 61, 1, 62, 1, 
+	63, 1, 64, 2, 1, 2, 2, 3, 
+	38, 2, 3, 58, 2, 5, 59, 2, 
+	6, 7, 2, 20, 23, 2, 24, 25, 
+	2, 26, 29, 2, 47, 50, 2, 55, 
+	64, 2, 56, 64, 3, 3, 52, 64, 
+	3, 3, 58, 64, 3, 5, 54, 64, 
+	3, 5, 59, 64, 3, 26, 1, 2
+	
+];
+
+static short[] _sam_alignment_key_offsets = [
+	0, 0, 5, 7, 10, 15, 18, 20, 
+	23, 25, 28, 31, 32, 36, 39, 41, 
+	44, 48, 50, 53, 60, 61, 63, 67, 
+	73, 74, 80, 81, 83, 84, 91, 92, 
+	96, 98, 99, 106, 110, 112, 116, 118, 
+	119, 120, 121, 122, 123, 129, 130, 132, 
+	133, 140, 144, 146, 150, 152, 153, 154, 
+	155, 156, 157, 161, 163, 170, 173, 176, 
+	179, 182, 185, 188, 191, 194, 197, 200, 
+	203, 206, 209, 212, 215, 218, 219, 222, 
+	225, 228, 231, 234, 237, 240, 243, 246, 
+	249, 252, 255, 258, 261, 264, 267, 268, 
+	269, 270, 281, 292, 303, 314, 325, 336, 
+	347, 358, 369, 380, 391, 402, 413, 424, 
+	435, 446, 457, 466, 469, 472, 475, 478, 
+	481, 484, 487, 490, 493, 496, 499, 502, 
+	505, 508, 511, 514, 517, 518, 521, 524, 
+	527, 530, 533, 536, 539, 542, 545, 548, 
+	551, 554, 557, 560, 563, 566, 567, 568, 
+	571, 574, 577, 580, 583, 586, 589, 592, 
+	595, 598, 601, 604, 607, 610, 613, 616, 
+	617, 622, 623, 624, 625, 626, 627, 628, 
+	629, 630, 631, 632, 633, 634, 635, 636, 
+	637, 638, 639, 640, 641, 642, 643, 644, 
+	647, 648, 652, 656, 660, 664, 668, 672, 
+	676, 680, 684, 688, 692, 696, 700, 704, 
+	708, 712, 716, 718, 724, 728, 735, 737, 
+	744, 747, 752, 755, 761, 762, 765, 768, 
+	771, 774, 777, 780, 783, 786, 789, 792, 
+	795, 798, 801, 804, 807, 810, 813, 814, 
+	814, 814, 814, 814, 814, 814, 814, 814, 
+	814, 814, 814, 814
+];
+
+static char[] _sam_alignment_trans_keys = [
+	9u, 33u, 63u, 65u, 126u, 48u, 57u, 9u, 
+	48u, 57u, 42u, 33u, 60u, 62u, 126u, 9u, 
+	33u, 126u, 48u, 57u, 9u, 48u, 57u, 48u, 
+	57u, 9u, 48u, 57u, 42u, 48u, 57u, 9u, 
+	42u, 61u, 33u, 126u, 9u, 33u, 126u, 48u, 
+	57u, 9u, 48u, 57u, 43u, 45u, 48u, 57u, 
+	48u, 57u, 9u, 48u, 57u, 42u, 46u, 61u, 
+	65u, 90u, 97u, 122u, 9u, 33u, 126u, 65u, 
+	90u, 97u, 122u, 48u, 57u, 65u, 90u, 97u, 
+	122u, 58u, 65u, 66u, 72u, 90u, 102u, 105u, 
+	58u, 33u, 126u, 58u, 67u, 73u, 83u, 99u, 
+	102u, 105u, 115u, 44u, 43u, 45u, 48u, 57u, 
+	48u, 57u, 44u, 43u, 45u, 46u, 105u, 110u, 
+	48u, 57u, 46u, 105u, 48u, 57u, 48u, 57u, 
+	43u, 45u, 48u, 57u, 48u, 57u, 110u, 102u, 
+	97u, 110u, 58u, 48u, 57u, 65u, 70u, 97u, 
+	102u, 58u, 32u, 126u, 58u, 43u, 45u, 46u, 
+	105u, 110u, 48u, 57u, 46u, 105u, 48u, 57u, 
+	48u, 57u, 43u, 45u, 48u, 57u, 48u, 57u, 
+	110u, 102u, 97u, 110u, 58u, 43u, 45u, 48u, 
+	57u, 48u, 57u, 9u, 46u, 61u, 65u, 90u, 
+	97u, 122u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 9u, 9u, 61u, 68u, 
+	80u, 83u, 88u, 48u, 57u, 72u, 73u, 77u, 
+	78u, 61u, 68u, 80u, 83u, 88u, 48u, 57u, 
+	72u, 73u, 77u, 78u, 61u, 68u, 80u, 83u, 
+	88u, 48u, 57u, 72u, 73u, 77u, 78u, 61u, 
+	68u, 80u, 83u, 88u, 48u, 57u, 72u, 73u, 
+	77u, 78u, 61u, 68u, 80u, 83u, 88u, 48u, 
+	57u, 72u, 73u, 77u, 78u, 61u, 68u, 80u, 
+	83u, 88u, 48u, 57u, 72u, 73u, 77u, 78u, 
+	61u, 68u, 80u, 83u, 88u, 48u, 57u, 72u, 
+	73u, 77u, 78u, 61u, 68u, 80u, 83u, 88u, 
+	48u, 57u, 72u, 73u, 77u, 78u, 61u, 68u, 
+	80u, 83u, 88u, 48u, 57u, 72u, 73u, 77u, 
+	78u, 61u, 68u, 80u, 83u, 88u, 48u, 57u, 
+	72u, 73u, 77u, 78u, 61u, 68u, 80u, 83u, 
+	88u, 48u, 57u, 72u, 73u, 77u, 78u, 61u, 
+	68u, 80u, 83u, 88u, 48u, 57u, 72u, 73u, 
+	77u, 78u, 61u, 68u, 80u, 83u, 88u, 48u, 
+	57u, 72u, 73u, 77u, 78u, 61u, 68u, 80u, 
+	83u, 88u, 48u, 57u, 72u, 73u, 77u, 78u, 
+	61u, 68u, 80u, 83u, 88u, 48u, 57u, 72u, 
+	73u, 77u, 78u, 61u, 68u, 80u, 83u, 88u, 
+	48u, 57u, 72u, 73u, 77u, 78u, 61u, 68u, 
+	80u, 83u, 88u, 48u, 57u, 72u, 73u, 77u, 
+	78u, 61u, 68u, 80u, 83u, 88u, 72u, 73u, 
+	77u, 78u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 9u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 9u, 33u, 63u, 65u, 126u, 9u, 9u, 
+	9u, 9u, 9u, 9u, 9u, 9u, 9u, 9u, 
+	9u, 9u, 9u, 9u, 9u, 9u, 9u, 9u, 
+	9u, 9u, 9u, 9u, 9u, 33u, 126u, 9u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 48u, 57u, 9u, 44u, 9u, 44u, 
+	69u, 101u, 48u, 57u, 9u, 44u, 48u, 57u, 
+	9u, 44u, 46u, 69u, 101u, 48u, 57u, 9u, 
+	44u, 9u, 48u, 57u, 65u, 70u, 97u, 102u, 
+	9u, 32u, 126u, 9u, 69u, 101u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 46u, 69u, 101u, 48u, 
+	57u, 9u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 48u, 57u, 
+	9u, 48u, 57u, 9u, 48u, 57u, 9u, 48u, 
+	57u, 9u, 48u, 57u, 9u, 48u, 57u, 9u, 
+	48u, 57u, 9u, 48u, 57u, 9u, 9u, 0
+];
+
+static byte[] _sam_alignment_single_lengths = [
+	0, 1, 0, 1, 1, 1, 0, 1, 
+	0, 1, 1, 1, 2, 1, 0, 1, 
+	2, 0, 1, 3, 1, 0, 0, 0, 
+	1, 6, 1, 0, 1, 7, 1, 2, 
+	0, 1, 5, 2, 0, 2, 0, 1, 
+	1, 1, 1, 1, 0, 1, 0, 1, 
+	5, 2, 0, 2, 0, 1, 1, 1, 
+	1, 1, 2, 0, 3, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 5, 5, 5, 5, 5, 5, 5, 
+	5, 5, 5, 5, 5, 5, 5, 5, 
+	5, 5, 5, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 2, 4, 2, 5, 2, 1, 
+	1, 3, 1, 4, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 1
+];
+
+static byte[] _sam_alignment_range_lengths = [
+	0, 2, 1, 1, 2, 1, 1, 1, 
+	1, 1, 1, 0, 1, 1, 1, 1, 
+	1, 1, 1, 2, 0, 1, 2, 3, 
+	0, 0, 0, 1, 0, 0, 0, 1, 
+	1, 0, 1, 1, 1, 1, 1, 0, 
+	0, 0, 0, 0, 3, 0, 1, 0, 
+	1, 1, 1, 1, 1, 0, 0, 0, 
+	0, 0, 1, 1, 2, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 0, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 0, 0, 
+	0, 3, 3, 3, 3, 3, 3, 3, 
+	3, 3, 3, 3, 3, 3, 3, 3, 
+	3, 3, 2, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 0, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 0, 0, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 0, 
+	2, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 1, 
+	0, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 0, 1, 1, 1, 0, 3, 
+	1, 1, 1, 1, 0, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 1, 1, 
+	1, 1, 1, 1, 1, 1, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0
+];
+
+static short[] _sam_alignment_index_offsets = [
+	0, 0, 4, 6, 9, 13, 16, 18, 
+	21, 23, 26, 29, 31, 35, 38, 40, 
+	43, 47, 49, 52, 58, 60, 62, 65, 
+	69, 71, 78, 80, 82, 84, 92, 94, 
+	98, 100, 102, 109, 113, 115, 119, 121, 
+	123, 125, 127, 129, 131, 135, 137, 139, 
+	141, 148, 152, 154, 158, 160, 162, 164, 
+	166, 168, 170, 174, 176, 182, 185, 188, 
+	191, 194, 197, 200, 203, 206, 209, 212, 
+	215, 218, 221, 224, 227, 230, 232, 235, 
+	238, 241, 244, 247, 250, 253, 256, 259, 
+	262, 265, 268, 271, 274, 277, 280, 282, 
+	284, 286, 295, 304, 313, 322, 331, 340, 
+	349, 358, 367, 376, 385, 394, 403, 412, 
+	421, 430, 439, 447, 450, 453, 456, 459, 
+	462, 465, 468, 471, 474, 477, 480, 483, 
+	486, 489, 492, 495, 498, 500, 503, 506, 
+	509, 512, 515, 518, 521, 524, 527, 530, 
+	533, 536, 539, 542, 545, 548, 550, 552, 
+	555, 558, 561, 564, 567, 570, 573, 576, 
+	579, 582, 585, 588, 591, 594, 597, 600, 
+	602, 606, 608, 610, 612, 614, 616, 618, 
+	620, 622, 624, 626, 628, 630, 632, 634, 
+	636, 638, 640, 642, 644, 646, 648, 650, 
+	653, 655, 659, 663, 667, 671, 675, 679, 
+	683, 687, 691, 695, 699, 703, 707, 711, 
+	715, 719, 723, 726, 732, 736, 743, 746, 
+	751, 754, 759, 762, 768, 770, 773, 776, 
+	779, 782, 785, 788, 791, 794, 797, 800, 
+	803, 806, 809, 812, 815, 818, 821, 823, 
+	824, 825, 826, 827, 828, 829, 830, 831, 
+	832, 833, 834, 835
+];
+
+static ubyte[] _sam_alignment_trans_targs = [
+	2, 168, 168, 0, 3, 0, 4, 151, 
+	0, 150, 5, 5, 0, 6, 5, 0, 
+	7, 0, 8, 133, 0, 9, 0, 10, 
+	116, 0, 11, 97, 0, 12, 0, 95, 
+	96, 13, 0, 14, 13, 0, 15, 0, 
+	16, 78, 0, 17, 17, 18, 0, 18, 
+	0, 19, 61, 0, 20, 60, 60, 60, 
+	60, 0, 21, 0, 191, 0, 23, 23, 
+	0, 24, 24, 24, 0, 25, 0, 26, 
+	28, 43, 45, 47, 57, 0, 27, 0, 
+	192, 0, 29, 0, 30, 30, 30, 30, 
+	33, 30, 30, 0, 31, 0, 32, 32, 
+	193, 0, 193, 0, 34, 0, 35, 35, 
+	36, 39, 41, 213, 0, 36, 39, 213, 
+	0, 211, 0, 38, 38, 212, 0, 212, 
+	0, 40, 0, 214, 0, 42, 0, 214, 
+	0, 44, 0, 215, 215, 215, 0, 46, 
+	0, 216, 0, 48, 0, 49, 49, 50, 
+	53, 55, 219, 0, 50, 53, 219, 0, 
+	217, 0, 52, 52, 218, 0, 218, 0, 
+	54, 0, 220, 0, 56, 0, 220, 0, 
+	58, 0, 59, 59, 221, 0, 221, 0, 
+	21, 60, 60, 60, 60, 0, 19, 62, 
+	0, 19, 63, 0, 19, 64, 0, 19, 
+	65, 0, 19, 66, 0, 19, 67, 0, 
+	19, 68, 0, 19, 69, 0, 19, 70, 
+	0, 19, 71, 0, 19, 72, 0, 19, 
+	73, 0, 19, 74, 0, 19, 75, 0, 
+	19, 76, 0, 19, 77, 0, 19, 0, 
+	16, 79, 0, 16, 80, 0, 16, 81, 
+	0, 16, 82, 0, 16, 83, 0, 16, 
+	84, 0, 16, 85, 0, 16, 86, 0, 
+	16, 87, 0, 16, 88, 0, 16, 89, 
+	0, 16, 90, 0, 16, 91, 0, 16, 
+	92, 0, 16, 93, 0, 16, 94, 0, 
+	16, 0, 14, 0, 14, 0, 115, 115, 
+	115, 115, 115, 98, 115, 115, 0, 115, 
+	115, 115, 115, 115, 99, 115, 115, 0, 
+	115, 115, 115, 115, 115, 100, 115, 115, 
+	0, 115, 115, 115, 115, 115, 101, 115, 
+	115, 0, 115, 115, 115, 115, 115, 102, 
+	115, 115, 0, 115, 115, 115, 115, 115, 
+	103, 115, 115, 0, 115, 115, 115, 115, 
+	115, 104, 115, 115, 0, 115, 115, 115, 
+	115, 115, 105, 115, 115, 0, 115, 115, 
+	115, 115, 115, 106, 115, 115, 0, 115, 
+	115, 115, 115, 115, 107, 115, 115, 0, 
+	115, 115, 115, 115, 115, 108, 115, 115, 
+	0, 115, 115, 115, 115, 115, 109, 115, 
+	115, 0, 115, 115, 115, 115, 115, 110, 
+	115, 115, 0, 115, 115, 115, 115, 115, 
+	111, 115, 115, 0, 115, 115, 115, 115, 
+	115, 112, 115, 115, 0, 115, 115, 115, 
+	115, 115, 113, 115, 115, 0, 115, 115, 
+	115, 115, 115, 114, 115, 115, 0, 115, 
+	115, 115, 115, 115, 115, 115, 0, 12, 
+	97, 0, 10, 117, 0, 10, 118, 0, 
+	10, 119, 0, 10, 120, 0, 10, 121, 
+	0, 10, 122, 0, 10, 123, 0, 10, 
+	124, 0, 10, 125, 0, 10, 126, 0, 
+	10, 127, 0, 10, 128, 0, 10, 129, 
+	0, 10, 130, 0, 10, 131, 0, 10, 
+	132, 0, 10, 0, 8, 134, 0, 8, 
+	135, 0, 8, 136, 0, 8, 137, 0, 
+	8, 138, 0, 8, 139, 0, 8, 140, 
+	0, 8, 141, 0, 8, 142, 0, 8, 
+	143, 0, 8, 144, 0, 8, 145, 0, 
+	8, 146, 0, 8, 147, 0, 8, 148, 
+	0, 8, 149, 0, 8, 0, 6, 0, 
+	4, 152, 0, 4, 153, 0, 4, 154, 
+	0, 4, 155, 0, 4, 156, 0, 4, 
+	157, 0, 4, 158, 0, 4, 159, 0, 
+	4, 160, 0, 4, 161, 0, 4, 162, 
+	0, 4, 163, 0, 4, 164, 0, 4, 
+	165, 0, 4, 166, 0, 4, 167, 0, 
+	4, 0, 2, 168, 168, 0, 239, 169, 
+	240, 170, 241, 171, 242, 172, 243, 173, 
+	244, 174, 245, 175, 246, 176, 247, 177, 
+	248, 178, 249, 179, 250, 180, 2, 0, 
+	4, 0, 6, 0, 8, 0, 10, 0, 
+	12, 0, 14, 0, 16, 0, 19, 0, 
+	21, 0, 22, 191, 0, 22, 0, 22, 
+	31, 194, 0, 22, 31, 195, 0, 22, 
+	31, 196, 0, 22, 31, 197, 0, 22, 
+	31, 198, 0, 22, 31, 199, 0, 22, 
+	31, 200, 0, 22, 31, 201, 0, 22, 
+	31, 202, 0, 22, 31, 203, 0, 22, 
+	31, 204, 0, 22, 31, 205, 0, 22, 
+	31, 206, 0, 22, 31, 207, 0, 22, 
+	31, 208, 0, 22, 31, 209, 0, 22, 
+	31, 210, 0, 22, 31, 0, 22, 34, 
+	37, 37, 211, 0, 22, 34, 212, 0, 
+	22, 34, 36, 37, 37, 213, 0, 22, 
+	34, 0, 22, 215, 215, 215, 0, 22, 
+	216, 0, 22, 51, 51, 217, 0, 22, 
+	218, 0, 22, 50, 51, 51, 219, 0, 
+	22, 0, 22, 222, 0, 22, 223, 0, 
+	22, 224, 0, 22, 225, 0, 22, 226, 
+	0, 22, 227, 0, 22, 228, 0, 22, 
+	229, 0, 22, 230, 0, 22, 231, 0, 
+	22, 232, 0, 22, 233, 0, 22, 234, 
+	0, 22, 235, 0, 22, 236, 0, 22, 
+	237, 0, 22, 238, 0, 22, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 22, 0, 0
+];
+
+static ubyte[] _sam_alignment_trans_actions = [
+	111, 7, 7, 11, 99, 17, 15, 3, 
+	17, 0, 21, 21, 25, 23, 0, 25, 
+	99, 31, 29, 3, 31, 99, 35, 114, 
+	3, 35, 0, 99, 41, 45, 41, 0, 
+	0, 49, 53, 51, 0, 53, 99, 59, 
+	57, 3, 59, 1, 1, 99, 63, 99, 
+	63, 102, 3, 63, 0, 67, 67, 67, 
+	67, 71, 75, 71, 77, 79, 89, 89, 
+	0, 0, 0, 0, 0, 91, 0, 0, 
+	0, 0, 0, 0, 0, 93, 0, 93, 
+	83, 93, 0, 93, 87, 87, 87, 87, 
+	87, 87, 87, 93, 0, 93, 1, 1, 
+	99, 93, 99, 93, 0, 93, 5, 5, 
+	5, 5, 5, 5, 93, 0, 0, 0, 
+	93, 0, 93, 0, 0, 0, 93, 0, 
+	93, 0, 93, 0, 93, 0, 93, 0, 
+	93, 0, 93, 85, 85, 85, 93, 0, 
+	93, 85, 93, 0, 93, 5, 5, 5, 
+	5, 5, 5, 93, 0, 0, 0, 93, 
+	0, 93, 0, 0, 0, 93, 0, 93, 
+	0, 93, 0, 93, 0, 93, 0, 93, 
+	0, 93, 1, 1, 99, 93, 99, 93, 
+	69, 0, 0, 0, 0, 71, 102, 3, 
+	63, 102, 3, 63, 102, 3, 63, 102, 
+	3, 63, 102, 3, 63, 102, 3, 63, 
+	102, 3, 63, 102, 3, 63, 102, 3, 
+	63, 102, 3, 63, 102, 3, 63, 102, 
+	3, 63, 102, 3, 63, 102, 3, 63, 
+	102, 3, 63, 102, 3, 63, 102, 63, 
+	57, 3, 59, 57, 3, 59, 57, 3, 
+	59, 57, 3, 59, 57, 3, 59, 57, 
+	3, 59, 57, 3, 59, 57, 3, 59, 
+	57, 3, 59, 57, 3, 59, 57, 3, 
+	59, 57, 3, 59, 57, 3, 59, 57, 
+	3, 59, 57, 3, 59, 57, 3, 59, 
+	57, 59, 0, 53, 47, 53, 117, 117, 
+	117, 117, 117, 3, 117, 117, 41, 117, 
+	117, 117, 117, 117, 3, 117, 117, 41, 
+	117, 117, 117, 117, 117, 3, 117, 117, 
+	41, 117, 117, 117, 117, 117, 3, 117, 
+	117, 41, 117, 117, 117, 117, 117, 3, 
+	117, 117, 41, 117, 117, 117, 117, 117, 
+	3, 117, 117, 41, 117, 117, 117, 117, 
+	117, 3, 117, 117, 41, 117, 117, 117, 
+	117, 117, 3, 117, 117, 41, 117, 117, 
+	117, 117, 117, 3, 117, 117, 41, 117, 
+	117, 117, 117, 117, 3, 117, 117, 41, 
+	117, 117, 117, 117, 117, 3, 117, 117, 
+	41, 117, 117, 117, 117, 117, 3, 117, 
+	117, 41, 117, 117, 117, 117, 117, 3, 
+	117, 117, 41, 117, 117, 117, 117, 117, 
+	3, 117, 117, 41, 117, 117, 117, 117, 
+	117, 3, 117, 117, 41, 117, 117, 117, 
+	117, 117, 3, 117, 117, 41, 117, 117, 
+	117, 117, 117, 3, 117, 117, 41, 117, 
+	117, 117, 117, 117, 117, 117, 41, 120, 
+	148, 41, 114, 3, 35, 114, 3, 35, 
+	114, 3, 35, 114, 3, 35, 114, 3, 
+	35, 114, 3, 35, 114, 3, 35, 114, 
+	3, 35, 114, 3, 35, 114, 3, 35, 
+	114, 3, 35, 114, 3, 35, 114, 3, 
+	35, 114, 3, 35, 114, 3, 35, 114, 
+	3, 35, 114, 35, 29, 3, 31, 29, 
+	3, 31, 29, 3, 31, 29, 3, 31, 
+	29, 3, 31, 29, 3, 31, 29, 3, 
+	31, 29, 3, 31, 29, 3, 31, 29, 
+	3, 31, 29, 3, 31, 29, 3, 31, 
+	29, 3, 31, 29, 3, 31, 29, 3, 
+	31, 29, 3, 31, 29, 31, 0, 25, 
+	15, 3, 17, 15, 3, 17, 15, 3, 
+	17, 15, 3, 17, 15, 3, 17, 15, 
+	3, 17, 15, 3, 17, 15, 3, 17, 
+	15, 3, 17, 15, 3, 17, 15, 3, 
+	17, 15, 3, 17, 15, 3, 17, 15, 
+	3, 17, 15, 3, 17, 15, 3, 17, 
+	15, 17, 9, 0, 0, 11, 13, 0, 
+	19, 0, 27, 0, 33, 0, 37, 0, 
+	43, 0, 55, 0, 61, 0, 65, 0, 
+	73, 0, 81, 0, 95, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 39, 0, 
+	45, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 123, 77, 79, 97, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 3, 93, 136, 
+	105, 3, 93, 136, 105, 93, 144, 108, 
+	0, 0, 0, 93, 144, 108, 0, 93, 
+	144, 108, 0, 0, 0, 0, 93, 144, 
+	108, 93, 129, 0, 0, 0, 93, 126, 
+	0, 93, 140, 0, 0, 0, 93, 140, 
+	0, 93, 140, 0, 0, 0, 0, 93, 
+	140, 93, 132, 3, 93, 132, 3, 93, 
+	132, 3, 93, 132, 3, 93, 132, 3, 
+	93, 132, 3, 93, 132, 3, 93, 132, 
+	3, 93, 132, 3, 93, 132, 3, 93, 
+	132, 3, 93, 132, 3, 93, 132, 3, 
+	93, 132, 3, 93, 132, 3, 93, 132, 
+	3, 93, 132, 3, 93, 132, 93, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0
+];
+
+static ubyte[] _sam_alignment_eof_actions = [
+	0, 11, 17, 17, 25, 25, 31, 31, 
+	35, 35, 41, 41, 53, 53, 59, 59, 
+	63, 63, 63, 71, 71, 79, 0, 0, 
+	0, 93, 93, 93, 93, 93, 93, 93, 
+	93, 93, 93, 93, 93, 93, 93, 93, 
+	93, 93, 93, 93, 93, 93, 93, 93, 
+	93, 93, 93, 93, 93, 93, 93, 93, 
+	93, 93, 93, 93, 71, 63, 63, 63, 
+	63, 63, 63, 63, 63, 63, 63, 63, 
+	63, 63, 63, 63, 63, 63, 59, 59, 
+	59, 59, 59, 59, 59, 59, 59, 59, 
+	59, 59, 59, 59, 59, 59, 59, 53, 
+	53, 41, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 35, 35, 35, 35, 
+	35, 35, 35, 35, 35, 35, 35, 35, 
+	35, 35, 35, 35, 35, 31, 31, 31, 
+	31, 31, 31, 31, 31, 31, 31, 31, 
+	31, 31, 31, 31, 31, 31, 25, 17, 
+	17, 17, 17, 17, 17, 17, 17, 17, 
+	17, 17, 17, 17, 17, 17, 17, 17, 
+	11, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 123, 
+	97, 136, 136, 136, 136, 136, 136, 136, 
+	136, 136, 136, 136, 136, 136, 136, 136, 
+	136, 136, 136, 144, 144, 144, 144, 129, 
+	126, 140, 140, 140, 140, 132, 132, 132, 
+	132, 132, 132, 132, 132, 132, 132, 132, 
+	132, 132, 132, 132, 132, 132, 132, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0
+];
+
+static int sam_alignment_start = 1;
+static int sam_alignment_first_final = 191;
+static int sam_alignment_error = 0;
+
+static int sam_alignment_en_recover_from_invalid_qname = 169;
+static int sam_alignment_en_recover_from_invalid_flag = 170;
+static int sam_alignment_en_recover_from_invalid_rname = 171;
+static int sam_alignment_en_recover_from_invalid_pos = 172;
+static int sam_alignment_en_recover_from_invalid_mapq = 173;
+static int sam_alignment_en_recover_from_invalid_cigar = 174;
+static int sam_alignment_en_recover_from_invalid_rnext = 175;
+static int sam_alignment_en_recover_from_invalid_pnext = 176;
+static int sam_alignment_en_recover_from_invalid_tlen = 177;
+static int sam_alignment_en_recover_from_invalid_seq = 178;
+static int sam_alignment_en_recover_from_invalid_qual = 179;
+static int sam_alignment_en_recover_from_invalid_tag = 180;
+static int sam_alignment_en_alignment = 1;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_flag_parsing = 181;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_rname_parsing = 182;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_pos_parsing = 183;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_mapq_parsing = 184;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_cigar_parsing = 185;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_rnext_parsing = 186;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_pnext_parsing = 187;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_tlen_parsing = 188;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_seq_parsing = 189;
+static int sam_alignment_en_alignment_field_parsing_mandatoryfields_qual_parsing = 190;
+static int sam_alignment_en_alignment_tag_parsing = 251;
+
+
+#line 419 "sam_alignment.rl"
+
+
+import bio.sam.header;
+import bio.bam.read;
+import bio.bam.bai.bin;
+import bio.core.utils.outbuffer;
+import bio.core.base;
+import std.conv;
+import std.array;
+import std.exception;
+
+BamRead parseAlignmentLine(string line, SamHeader header, OutBuffer buffer=null) {
+    char* p = cast(char*)line.ptr;
+    char* pe = p + line.length;
+    char* eof = pe;
+    int cs;
+
+    if (buffer is null)
+        buffer = new OutBuffer(8192);
+    else
+        buffer.clear();
+
+    size_t rollback_size; // needed in case of invalid data
+    
+    byte current_sign = 1;
+
+    size_t read_name_beg; // position of beginning of QNAME
+
+    size_t sequence_beg; // position of SEQ start
+    int l_seq;           // sequence length
+
+    uint cigar_op_len;   // length of CIGAR operation
+    char cigar_op_chr;   // CIGAR operation
+
+    size_t quals_length;  // number of QUAL characters
+    char quals_last_char; // needed in order to handle '*' correctly
+
+    size_t cigar_op_len_start; // position of start of CIGAR operation
+    
+    long int_value;                      // for storing temporary integers
+    float float_value;                   // for storing temporary floats
+    size_t float_beg;                    // position of start of current float
+    char arraytype;                      // type of last array tag value
+    size_t tag_array_length_offset;      // where the length is stored in the buffer
+
+    string read_name;
+    ushort flag;
+    int pos = -1;
+    int end_pos; // for bin calculation
+    int mate_pos = -1;
+    ubyte mapping_quality = 255;
+    int template_length = 0;
+
+    size_t tag_key_beg, tagvalue_beg;
+    ubyte[] tag_key;
+    size_t rname_beg, rnext_beg;
+
+    int ref_id = -1;
+
+    
+#line 639 "sam_alignment.d"
+	{
+	cs = sam_alignment_start;
+	}
+
+#line 479 "sam_alignment.rl"
+    
+#line 646 "sam_alignment.d"
+	{
+	int _klen;
+	uint _trans;
+	byte* _acts;
+	uint _nacts;
+	char* _keys;
+
+	if ( p == pe )
+		goto _test_eof;
+	if ( cs == 0 )
+		goto _out;
+_resume:
+	_keys = &_sam_alignment_trans_keys[_sam_alignment_key_offsets[cs]];
+	_trans = _sam_alignment_index_offsets[cs];
+
+	_klen = _sam_alignment_single_lengths[cs];
+	if ( _klen > 0 ) {
+		char* _lower = _keys;
+		char* _mid;
+		char* _upper = _keys + _klen - 1;
+		while (1) {
+			if ( _upper < _lower )
+				break;
+
+			_mid = _lower + ((_upper-_lower) >> 1);
+			if ( (*p) < *_mid )
+				_upper = _mid - 1;
+			else if ( (*p) > *_mid )
+				_lower = _mid + 1;
+			else {
+				_trans += cast(uint)(_mid - _keys);
+				goto _match;
+			}
+		}
+		_keys += _klen;
+		_trans += _klen;
+	}
+
+	_klen = _sam_alignment_range_lengths[cs];
+	if ( _klen > 0 ) {
+		char* _lower = _keys;
+		char* _mid;
+		char* _upper = _keys + (_klen<<1) - 2;
+		while (1) {
+			if ( _upper < _lower )
+				break;
+
+			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
+			if ( (*p) < _mid[0] )
+				_upper = _mid - 2;
+			else if ( (*p) > _mid[1] )
+				_lower = _mid + 2;
+			else {
+				_trans += cast(uint)((_mid - _keys)>>1);
+				goto _match;
+			}
+		}
+		_trans += _klen;
+	}
+
+_match:
+	cs = _sam_alignment_trans_targs[_trans];
+
+	if ( _sam_alignment_trans_actions[_trans] == 0 )
+		goto _again;
+
+	_acts = &_sam_alignment_actions[_sam_alignment_trans_actions[_trans]];
+	_nacts = cast(uint) *_acts++;
+	while ( _nacts-- > 0 )
+	{
+		switch ( *_acts++ )
+		{
+	case 0:
+#line 27 "sam_alignment.rl"
+	{ current_sign = (*p) == '-' ? -1 : 1; }
+	break;
+	case 1:
+#line 28 "sam_alignment.rl"
+	{ int_value = 0; }
+	break;
+	case 2:
+#line 29 "sam_alignment.rl"
+	{ int_value *= 10; int_value += (*p) - '0'; }
+	break;
+	case 3:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+	break;
+	case 4:
+#line 37 "sam_alignment.rl"
+	{ float_beg = p - line.ptr; }
+	break;
+	case 5:
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+	break;
+	case 6:
+#line 48 "sam_alignment.rl"
+	{ read_name_beg = p - line.ptr; }
+	break;
+	case 7:
+#line 49 "sam_alignment.rl"
+	{ read_name = line[read_name_beg .. p - line.ptr]; }
+	break;
+	case 8:
+#line 50 "sam_alignment.rl"
+	{ p--; {cs = 169; if (true) goto _again;} }
+	break;
+	case 9:
+#line 51 "sam_alignment.rl"
+	{ p--; {cs = 181; if (true) goto _again;} }
+	break;
+	case 10:
+#line 56 "sam_alignment.rl"
+	{ flag = to!ushort(int_value); }
+	break;
+	case 11:
+#line 58 "sam_alignment.rl"
+	{ p--; {cs = 170; if (true) goto _again;} }
+	break;
+	case 12:
+#line 59 "sam_alignment.rl"
+	{ p--; {cs = 182; if (true) goto _again;} }
+	break;
+	case 13:
+#line 62 "sam_alignment.rl"
+	{ rname_beg = p - line.ptr; }
+	break;
+	case 14:
+#line 63 "sam_alignment.rl"
+	{
+        ref_id = header.getSequenceIndex(line[rname_beg .. p - line.ptr]); 
+    }
+	break;
+	case 15:
+#line 67 "sam_alignment.rl"
+	{ p--; {cs = 171; if (true) goto _again;} }
+	break;
+	case 16:
+#line 68 "sam_alignment.rl"
+	{ p--; {cs = 183; if (true) goto _again;} }
+	break;
+	case 17:
+#line 73 "sam_alignment.rl"
+	{ end_pos = pos = to!uint(int_value); }
+	break;
+	case 18:
+#line 75 "sam_alignment.rl"
+	{ p--; {cs = 172; if (true) goto _again;} }
+	break;
+	case 19:
+#line 76 "sam_alignment.rl"
+	{ p--; {cs = 184; if (true) goto _again;} }
+	break;
+	case 20:
+#line 79 "sam_alignment.rl"
+	{ mapping_quality = to!ubyte(int_value); }
+	break;
+	case 21:
+#line 81 "sam_alignment.rl"
+	{ p--; {cs = 173; if (true) goto _again;} }
+	break;
+	case 22:
+#line 82 "sam_alignment.rl"
+	{ p--; {cs = 185; if (true) goto _again;} }
+	break;
+	case 23:
+#line 85 "sam_alignment.rl"
+	{
+        buffer.capacity = 32 + read_name.length + 1;
+        buffer.putUnsafe!int(ref_id);
+        buffer.putUnsafe!int(pos - 1);
+
+        enforce(read_name.length + 1 <= 255, "Read name " ~ read_name ~ " is too long!");
+
+        // bin will be set later
+        auto bin_mq_nl = ((cast(uint)mapping_quality) << 8) | (read_name.length + 1);
+        buffer.putUnsafe(cast(uint)bin_mq_nl);
+
+        // number of CIGAR operations will be set later
+        buffer.putUnsafe!uint(flag << 16);
+
+        buffer.putUnsafe!int(0);
+        buffer.putUnsafe!int(-1); // mate ref. id
+        buffer.putUnsafe!int(-1); // mate pos
+        buffer.putUnsafe!int(0);  // tlen
+
+        buffer.putUnsafe(cast(ubyte[])read_name);
+        buffer.putUnsafe!ubyte(0);
+
+        rollback_size = buffer.length;
+    }
+	break;
+	case 24:
+#line 111 "sam_alignment.rl"
+	{ cigar_op_len = to!uint(int_value); }
+	break;
+	case 25:
+#line 112 "sam_alignment.rl"
+	{ cigar_op_chr = (*p); }
+	break;
+	case 26:
+#line 113 "sam_alignment.rl"
+	{ 
+        auto op = CigarOperation(cigar_op_len, cigar_op_chr);
+        if (op.is_reference_consuming)
+            end_pos += op.length;
+        buffer.put!CigarOperation(op); 
+        {
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) + 1;
+        }
+    }
+	break;
+	case 27:
+#line 124 "sam_alignment.rl"
+	{
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) & 0xFFFF0000;
+        buffer.shrink(rollback_size);
+        end_pos = pos + 1;
+        p--; {cs = 174; if (true) goto _again;}
+    }
+	break;
+	case 28:
+#line 131 "sam_alignment.rl"
+	{ p--; {cs = 186; if (true) goto _again;} }
+	break;
+	case 29:
+#line 137 "sam_alignment.rl"
+	{
+        if (end_pos == pos)
+            ++end_pos;
+        {
+        auto bin = reg2bin(pos - 1, end_pos - 1); // 0-based [) interval
+        auto ptr = cast(uint*)(buffer.data.ptr + 2 * uint.sizeof);
+        *ptr = (*ptr) | ((cast(uint)bin) << 16);
+        }
+    }
+	break;
+	case 30:
+#line 148 "sam_alignment.rl"
+	{
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = ref_id;
+        }
+    }
+	break;
+	case 31:
+#line 155 "sam_alignment.rl"
+	{ rnext_beg = p - line.ptr; }
+	break;
+	case 32:
+#line 156 "sam_alignment.rl"
+	{
+        { 
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = header.getSequenceIndex(line[rnext_beg .. p - line.ptr]);
+        }
+    }
+	break;
+	case 33:
+#line 162 "sam_alignment.rl"
+	{ p--; {cs = 175; if (true) goto _again;} }
+	break;
+	case 34:
+#line 163 "sam_alignment.rl"
+	{ p--; {cs = 187; if (true) goto _again;} }
+	break;
+	case 35:
+#line 169 "sam_alignment.rl"
+	{ 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 6 * int.sizeof);
+        *ptr = to!int(int_value) - 1;
+        }
+    }
+	break;
+	case 36:
+#line 175 "sam_alignment.rl"
+	{ p--; {cs = 176; if (true) goto _again;} }
+	break;
+	case 37:
+#line 176 "sam_alignment.rl"
+	{ p--; {cs = 188; if (true) goto _again;} }
+	break;
+	case 38:
+#line 181 "sam_alignment.rl"
+	{ 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 7 * int.sizeof);
+        *ptr = to!int(int_value);
+        }
+    }
+	break;
+	case 39:
+#line 187 "sam_alignment.rl"
+	{ p--; {cs = 177; if (true) goto _again;} }
+	break;
+	case 40:
+#line 188 "sam_alignment.rl"
+	{ p--; {cs = 189; if (true) goto _again;} }
+	break;
+	case 41:
+#line 193 "sam_alignment.rl"
+	{ sequence_beg = p - line.ptr; }
+	break;
+	case 42:
+#line 194 "sam_alignment.rl"
+	{ 
+        auto data = cast(ubyte[])line[sequence_beg .. p - line.ptr];
+        l_seq = cast(int)data.length;
+        auto raw_len = (l_seq + 1) / 2;
+
+        // reserve space for base qualities, too
+        buffer.capacity = buffer.length + raw_len + l_seq;
+
+        for (size_t i = 0; i < raw_len; ++i) {
+            auto b = cast(ubyte)(Base(data[2 * i]).internal_code << 4);
+            if (2 * i + 1 < l_seq)
+                b |= cast(ubyte)(Base(data[2 * i + 1]).internal_code);
+            buffer.putUnsafe!ubyte(b);
+        }
+
+        // set l_seq
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 4 * int.sizeof);
+        *ptr = l_seq;
+        }
+
+        rollback_size = buffer.length;
+    }
+	break;
+	case 43:
+#line 217 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+        p--; {cs = 178; if (true) goto _again;}
+    }
+	break;
+	case 44:
+#line 221 "sam_alignment.rl"
+	{ p--; {cs = 190; if (true) goto _again;} }
+	break;
+	case 45:
+#line 223 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+    }
+	break;
+	case 46:
+#line 230 "sam_alignment.rl"
+	{
+        ++quals_length;
+        quals_last_char = (*p);
+        buffer.putUnsafe!ubyte(cast(ubyte)((*p) - 33));
+    }
+	break;
+	case 47:
+#line 236 "sam_alignment.rl"
+	{
+        // '*' may correspond either to a one-base long sequence
+        // or to absence of information
+        if (quals_length == 1 && quals_last_char == '*' && l_seq == 0)
+            buffer.shrink(rollback_size);
+    }
+	break;
+	case 48:
+#line 243 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size);
+        for (size_t i = 0; i < l_seq; ++i)
+            buffer.putUnsafe!ubyte(0xFF);
+        rollback_size = buffer.length;
+        p--; {cs = 179; if (true) goto _again;}
+    }
+	break;
+	case 49:
+#line 251 "sam_alignment.rl"
+	{ p--; {cs = 251; if (true) goto _again;} }
+	break;
+	case 50:
+#line 253 "sam_alignment.rl"
+	{
+        if (buffer.length - rollback_size != l_seq) {
+            buffer.shrink(rollback_size);
+            for (size_t i = 0; i < l_seq; ++i)
+                buffer.putUnsafe!ubyte(0xFF);
+        }
+        rollback_size = buffer.length;
+    }
+	break;
+	case 51:
+#line 278 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 4;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('A');
+        buffer.putUnsafe!char((*p)); 
+    }
+	break;
+	case 52:
+#line 285 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        if (int_value < 0) {
+            if (int_value >= byte.min) {
+                buffer.putUnsafe!char('c');
+                buffer.putUnsafe(cast(byte)int_value);
+            } else if (int_value >= short.min) {
+                buffer.putUnsafe!char('s');
+                buffer.putUnsafe(cast(short)int_value);
+            } else if (int_value >= int.min) {
+                buffer.putUnsafe!char('i');
+                buffer.putUnsafe(cast(int)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        } else {
+            if (int_value <= ubyte.max) {
+                buffer.putUnsafe!char('C');
+                buffer.putUnsafe(cast(ubyte)int_value);
+            } else if (int_value <= ushort.max) {
+                buffer.putUnsafe!char('S');
+                buffer.putUnsafe(cast(ushort)int_value);
+            } else if (int_value <= uint.max) {
+                buffer.putUnsafe!char('I');
+                buffer.putUnsafe(cast(uint)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        }
+    }
+	break;
+	case 53:
+#line 317 "sam_alignment.rl"
+	{ tagvalue_beg = p - line.ptr; }
+	break;
+	case 54:
+#line 319 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('f');
+        buffer.putUnsafe!float(float_value);
+    }
+	break;
+	case 55:
+#line 326 "sam_alignment.rl"
+	{ 
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('Z');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+	break;
+	case 56:
+#line 337 "sam_alignment.rl"
+	{
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('H');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+	break;
+	case 57:
+#line 352 "sam_alignment.rl"
+	{
+        arraytype = (*p);
+        buffer.capacity = buffer.length + 8;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('B');
+        buffer.putUnsafe!char(arraytype);
+        buffer.putUnsafe!uint(0);
+        tag_array_length_offset = buffer.length - uint.sizeof;
+    }
+	break;
+	case 58:
+#line 362 "sam_alignment.rl"
+	{
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	break;
+	case 59:
+#line 379 "sam_alignment.rl"
+	{ 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	break;
+	case 60:
+#line 400 "sam_alignment.rl"
+	{ tag_key_beg = p - line.ptr; }
+	break;
+	case 61:
+#line 401 "sam_alignment.rl"
+	{ tag_key = cast(ubyte[])(line[tag_key_beg .. p - line.ptr]); }
+	break;
+	case 62:
+#line 403 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size); 
+        p--; {cs = 180; if (true) goto _again;}
+    }
+	break;
+	case 63:
+#line 408 "sam_alignment.rl"
+	{ p--; {cs = 251; if (true) goto _again;} }
+	break;
+	case 64:
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+#line 1188 "sam_alignment.d"
+		default: break;
+		}
+	}
+
+_again:
+	if ( cs == 0 )
+		goto _out;
+	if ( ++p != pe )
+		goto _resume;
+	_test_eof: {}
+	if ( p == eof )
+	{
+	byte* __acts = &_sam_alignment_actions[_sam_alignment_eof_actions[cs]];
+	uint __nacts = cast(uint) *__acts++;
+	while ( __nacts-- > 0 ) {
+		switch ( *__acts++ ) {
+	case 3:
+#line 30 "sam_alignment.rl"
+	{ int_value *= current_sign; current_sign = 1; }
+	break;
+	case 5:
+#line 38 "sam_alignment.rl"
+	{ 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+	break;
+	case 8:
+#line 50 "sam_alignment.rl"
+	{ p--; {cs = 169; if (true) goto _again;} }
+	break;
+	case 11:
+#line 58 "sam_alignment.rl"
+	{ p--; {cs = 170; if (true) goto _again;} }
+	break;
+	case 15:
+#line 67 "sam_alignment.rl"
+	{ p--; {cs = 171; if (true) goto _again;} }
+	break;
+	case 18:
+#line 75 "sam_alignment.rl"
+	{ p--; {cs = 172; if (true) goto _again;} }
+	break;
+	case 21:
+#line 81 "sam_alignment.rl"
+	{ p--; {cs = 173; if (true) goto _again;} }
+	break;
+	case 27:
+#line 124 "sam_alignment.rl"
+	{
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) & 0xFFFF0000;
+        buffer.shrink(rollback_size);
+        end_pos = pos + 1;
+        p--; {cs = 174; if (true) goto _again;}
+    }
+	break;
+	case 33:
+#line 162 "sam_alignment.rl"
+	{ p--; {cs = 175; if (true) goto _again;} }
+	break;
+	case 36:
+#line 175 "sam_alignment.rl"
+	{ p--; {cs = 176; if (true) goto _again;} }
+	break;
+	case 39:
+#line 187 "sam_alignment.rl"
+	{ p--; {cs = 177; if (true) goto _again;} }
+	break;
+	case 43:
+#line 217 "sam_alignment.rl"
+	{
+        rollback_size = buffer.length;
+        p--; {cs = 178; if (true) goto _again;}
+    }
+	break;
+	case 47:
+#line 236 "sam_alignment.rl"
+	{
+        // '*' may correspond either to a one-base long sequence
+        // or to absence of information
+        if (quals_length == 1 && quals_last_char == '*' && l_seq == 0)
+            buffer.shrink(rollback_size);
+    }
+	break;
+	case 48:
+#line 243 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size);
+        for (size_t i = 0; i < l_seq; ++i)
+            buffer.putUnsafe!ubyte(0xFF);
+        rollback_size = buffer.length;
+        p--; {cs = 179; if (true) goto _again;}
+    }
+	break;
+	case 50:
+#line 253 "sam_alignment.rl"
+	{
+        if (buffer.length - rollback_size != l_seq) {
+            buffer.shrink(rollback_size);
+            for (size_t i = 0; i < l_seq; ++i)
+                buffer.putUnsafe!ubyte(0xFF);
+        }
+        rollback_size = buffer.length;
+    }
+	break;
+	case 52:
+#line 285 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        if (int_value < 0) {
+            if (int_value >= byte.min) {
+                buffer.putUnsafe!char('c');
+                buffer.putUnsafe(cast(byte)int_value);
+            } else if (int_value >= short.min) {
+                buffer.putUnsafe!char('s');
+                buffer.putUnsafe(cast(short)int_value);
+            } else if (int_value >= int.min) {
+                buffer.putUnsafe!char('i');
+                buffer.putUnsafe(cast(int)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        } else {
+            if (int_value <= ubyte.max) {
+                buffer.putUnsafe!char('C');
+                buffer.putUnsafe(cast(ubyte)int_value);
+            } else if (int_value <= ushort.max) {
+                buffer.putUnsafe!char('S');
+                buffer.putUnsafe(cast(ushort)int_value);
+            } else if (int_value <= uint.max) {
+                buffer.putUnsafe!char('I');
+                buffer.putUnsafe(cast(uint)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        }
+    }
+	break;
+	case 54:
+#line 319 "sam_alignment.rl"
+	{ 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('f');
+        buffer.putUnsafe!float(float_value);
+    }
+	break;
+	case 55:
+#line 326 "sam_alignment.rl"
+	{ 
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('Z');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+	break;
+	case 56:
+#line 337 "sam_alignment.rl"
+	{
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('H');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+	break;
+	case 58:
+#line 362 "sam_alignment.rl"
+	{
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	break;
+	case 59:
+#line 379 "sam_alignment.rl"
+	{ 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+	break;
+	case 62:
+#line 403 "sam_alignment.rl"
+	{
+        buffer.shrink(rollback_size); 
+        p--; {cs = 180; if (true) goto _again;}
+    }
+	break;
+	case 64:
+#line 410 "sam_alignment.rl"
+	{ rollback_size = buffer.length; }
+	break;
+#line 1403 "sam_alignment.d"
+		default: break;
+		}
+	}
+	}
+
+	_out: {}
+	}
+
+#line 480 "sam_alignment.rl"
+
+    BamRead read;
+    read.raw_data = buffer.data[];
+    return read;
+}
+
+unittest {
+    import std.algorithm;
+    import std.math;
+
+    auto line = "ERR016155.15021091\t185\t20\t60033\t25\t66S35M\t=\t60033\t0\tAGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC\t#####################################################################################################\tX0:i:1\tX1:i:0\tXC:i:35\tMD:Z:17A8A8\tRG:Z:ERR016155\tAM:i:0\tNM:i:2\tSM:i:25\tXT:A:U\tBQ:Z:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\tY0:B:c,1,2,3\ [...]
+
+    auto header = new SamHeader("@SQ\tSN:20\tLN:1234567");
+    auto alignment = parseAlignmentLine(line, header);
+    assert(alignment.name == "ERR016155.15021091");
+    assert(equal(alignment.sequence(), "AGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC"));
+    assert(alignment.cigarString() == "66S35M");
+    assert(alignment.flag == 185);
+    assert(alignment.position == 60032);
+    assert(alignment.mapping_quality == 25);
+    assert(alignment.mate_position == 60032);
+    assert(alignment.ref_id == 0);
+    assert(alignment.mate_ref_id == 0);
+    assert(to!ubyte(alignment["AM"]) == 0);
+    assert(to!ubyte(alignment["SM"]) == 25);
+    assert(to!string(alignment["MD"]) == "17A8A8");
+    assert(equal(to!(byte[])(alignment["Y0"]), [1, 2, 3]));
+    assert(equal!approxEqual(to!(float[])(alignment["Y1"]), [13.263, -3.1415, 52.63461]));
+    assert(to!char(alignment["XT"]) == 'U');
+
+    import bio.bam.reference;
+
+    auto info = ReferenceSequenceInfo("20", 1234567);
+
+    auto invalid_cigar_string = "1\t100\t20\t50000\t30\tMZABC\t=\t50000\t0\tACGT\t####";
+    alignment = parseAlignmentLine(invalid_cigar_string, header);
+    assert(equal(alignment.sequence(), "ACGT"));
+
+    auto invalid_tag_and_qual = "2\t100\t20\t5\t40\t27M30X5D\t=\t3\t10\tACT\t !\n\tX1:i:7\tX3:i:zzz\tX4:i:5";
+    alignment = parseAlignmentLine(invalid_tag_and_qual, header);
+    assert(alignment.base_qualities == [255, 255, 255]); // i.e. invalid
+    assert(to!ubyte(alignment["X1"]) == 7);
+    assert(alignment["X3"].is_nothing);
+    assert(to!ubyte(alignment["X4"]) == 5);
+}
diff --git a/bio/sff/constants.d b/bio/sff/constants.d
new file mode 100644
index 0000000..15e2a4e
--- /dev/null
+++ b/bio/sff/constants.d
@@ -0,0 +1,5 @@
+module bio.sff.constants;
+
+immutable SFF_MAGIC = 0x2E736666;
+
+immutable char[4] SFF_VERSION = [0, 0, 0, 1];
diff --git a/bio/sff/index.d b/bio/sff/index.d
new file mode 100644
index 0000000..c6dadcd
--- /dev/null
+++ b/bio/sff/index.d
@@ -0,0 +1,6 @@
+module bio.sff.index;
+
+struct IndexLocation {
+    ulong offset;
+    uint length;
+}
diff --git a/bio/sff/read.d b/bio/sff/read.d
new file mode 100644
index 0000000..d4ea996
--- /dev/null
+++ b/bio/sff/read.d
@@ -0,0 +1,26 @@
+module bio.sff.read;
+
+/// SFF record
+struct SffRead {
+    /// Read identifier
+    string name;
+
+    /// Homopolymer stretch estimates for each flow of the read
+    ushort[] flowgram_values;
+
+    ubyte[] flow_index_per_base;
+
+    /// Basecalled nucleotide sequence
+    char[] bases;
+
+    /// Phred-scaled quality scores
+    ubyte[] quality_scores;
+
+    ushort clip_qual_left;
+    ushort clip_qual_right;
+    ushort clip_adapter_left;
+    ushort clip_adapter_right;
+
+    /// Record start offset in the file
+    size_t file_offset;
+}
diff --git a/bio/sff/reader.d b/bio/sff/reader.d
new file mode 100644
index 0000000..d0c21a2
--- /dev/null
+++ b/bio/sff/reader.d
@@ -0,0 +1,152 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.sff.reader;
+
+public import bio.sff.index;
+import bio.sff.read;
+import bio.sff.readrange;
+import bio.sff.constants;
+
+import bio.core.utils.stream;
+import std.stream;
+import std.system;
+import std.range;
+import std.exception;
+
+/// SFF file reader
+class SffReader {
+
+    /// Open file by filename
+    this(string filename) {
+        _filename = filename;
+
+        _readHeader();
+    }
+
+    /// Reads
+    auto reads() @property {
+        auto stream = new bio.core.utils.stream.File(filename);
+        Stream sff = new EndianStream(stream, Endian.bigEndian);
+
+        sff.seekSet(_header_length);
+        auto sff_reads = SffReadRange(sff, cast(ushort)_flow_chars.length, _index_location);
+        return takeExactly(sff_reads, _n_reads);
+    }
+
+    ///
+    SffRead getReadAtOffset(size_t offset) {
+        auto stream = new bio.core.utils.stream.File(filename);
+        Stream sff = new EndianStream(stream, Endian.bigEndian);
+
+        sff.seekSet(offset);
+        auto read = SffReadRange(sff, cast(ushort)_flow_chars.length, _index_location).front;
+        sff.close();
+        return read;
+    }
+
+    /// File name
+    string filename() @property const {
+        return _filename;
+    }
+
+    /// Location of the index (if included).
+    IndexLocation index_location() @property const {
+        return _index_location;
+    }
+
+    ///
+    bool has_index() @property const {
+        return _index_location.offset != 0 && _index_location.length != 0;
+    }
+
+    /// Set index location (saves new index location to the file)
+    void index_location(IndexLocation location) @property {
+        _index_location = location;
+
+        // offset spans 8 bytes (8 .. 16),
+        // length spans 4 bytes (16 .. 20)
+
+        auto stream = new bio.core.utils.stream.File(filename, "r+");
+        stream.seekSet(8);
+        auto endian_stream = new EndianStream(stream, Endian.bigEndian);
+        endian_stream.write(location.offset);
+        endian_stream.write(location.length);
+        endian_stream.close();
+    }
+
+    /// Nucleotides used for each flow of each read
+    string flow_order() @property const {
+        return _flow_chars;
+    }
+
+    /// Nucleotide bases of the key sequence used for each read
+    string key_sequence() @property const {
+        return _key_sequence;
+    }
+
+    private {
+        string _filename;
+
+        uint _magic_number;
+        char[4] _version;
+
+        uint _n_reads;
+        ushort _header_length;
+
+        string _flow_chars;
+        string _key_sequence;
+
+        IndexLocation _index_location;
+
+        void _readHeader() {
+            auto stream = new bio.core.utils.stream.File(_filename);
+            auto sff = new EndianStream(stream, Endian.bigEndian);
+            
+            sff.read(_magic_number);
+            enforce(_magic_number == SFF_MAGIC, "Wrong magic number, expected 0x2E736666");
+
+            sff.readExact(_version.ptr, 4);
+            enforce(_version == SFF_VERSION, "Unsupported version, expected 1");
+
+            sff.read(_index_location.offset);
+            sff.read(_index_location.length);
+
+            sff.read(_n_reads);
+            sff.read(_header_length);
+
+            ushort _key_length;
+            ushort _number_of_flows;
+            ubyte _flowgram_format_code;
+
+            sff.read(_key_length);
+            sff.read(_number_of_flows);
+            sff.read(_flowgram_format_code);
+            enforce(_flowgram_format_code == 1, 
+                    "Flowgram format codes other than 1 are not supported");
+
+            _flow_chars = cast(string)sff.readString(_number_of_flows);
+            _key_sequence = cast(string)sff.readString(_key_length);
+        }
+    }
+}
diff --git a/bio/sff/readrange.d b/bio/sff/readrange.d
new file mode 100644
index 0000000..eda29d3
--- /dev/null
+++ b/bio/sff/readrange.d
@@ -0,0 +1,128 @@
+module bio.sff.readrange;
+
+import bio.sff.read;
+import bio.sff.index;
+import bio.core.utils.switchendianness;
+
+import std.algorithm;
+import std.stream;
+import std.system;
+import std.array;
+
+private {
+    
+    // GC used in D is quite bad at allocating lots of objects in a tight loop.
+    // The following is a simple way to reduce the number of allocations.
+
+    ubyte[] current_chunk;
+    size_t used;
+
+    size_t chunk_size = 65_536;
+
+    static this() {
+        current_chunk = uninitializedArray!(ubyte[])(chunk_size);
+        used = 0;
+    }
+
+    T[] allocateArray(T : T[])(size_t size) {
+        size_t new_used = used + size * T.sizeof;
+        if (new_used > chunk_size) {
+            new_used = size * T.sizeof;
+            if (new_used > chunk_size)
+                chunk_size = new_used;
+
+            current_chunk = uninitializedArray!(ubyte[])(chunk_size);
+            used = new_used;
+            return cast(T[])current_chunk[0 .. used];
+        } else {
+            auto old_used = used;
+            used = new_used;
+            return cast(T[])current_chunk[old_used .. used];
+        }
+    }
+}
+
+struct SffReadRange {
+    this(Stream stream, 
+         ushort number_of_flows_per_read,
+         IndexLocation index_location)
+    {
+        _stream = stream;
+        _n_flows = number_of_flows_per_read;
+        _index_loc = index_location;
+
+        _fetchNextRead();
+    }
+
+    private {
+        Stream _stream;
+        ushort _n_flows;
+        IndexLocation _index_loc;
+
+        bool _empty;
+        SffRead _read;
+
+        void _fetchNextRead() {
+            if (_stream.position == _index_loc.offset)
+                _stream.seekCur(_index_loc.length);
+
+            if (_stream.eof) {
+                _empty = true;
+            } else {
+                _read.file_offset = _stream.position;
+                // determine how many bytes to read
+                ushort read_header_length = void;
+                ushort name_length = void;
+                uint number_of_bases = void;
+                
+                _stream.read(read_header_length);
+                _stream.read(name_length);
+                _stream.read(number_of_bases);
+                _stream.read(_read.clip_qual_left);
+                _stream.read(_read.clip_qual_right);
+                _stream.read(_read.clip_adapter_left);
+                _stream.read(_read.clip_adapter_right);
+
+                char[] name = allocateArray!(char[])(name_length);
+                _stream.readExact(name.ptr, name_length);
+                _stream.seekCur(read_header_length - 16 - name_length);
+                _read.name = cast(string)name;
+
+                size_t _data_length = _n_flows * ushort.sizeof + 3 * number_of_bases;
+
+                _read.flowgram_values = allocateArray!(ushort[])(_n_flows);
+                _stream.readExact(_read.flowgram_values.ptr, _n_flows * ushort.sizeof);
+
+                if (std.system.endian != Endian.bigEndian) {
+                    for (size_t i = 0; i < _n_flows; ++i) {
+                        switchEndianness(_read.flowgram_values.ptr + i, ushort.sizeof);
+                    }
+                }
+
+                _read.flow_index_per_base = allocateArray!(ubyte[])(number_of_bases);
+                _stream.readExact(_read.flow_index_per_base.ptr, number_of_bases);
+
+                _read.bases = allocateArray!(char[])(number_of_bases);
+                _stream.readExact(_read.bases.ptr, number_of_bases);
+
+                _read.quality_scores = allocateArray!(ubyte[])(number_of_bases);
+                _stream.readExact(_read.quality_scores.ptr, number_of_bases);
+
+                if (_data_length % 8 > 0)
+                    _stream.seekCur(8 - (_data_length % 8));
+            }
+        }
+    }
+
+    bool empty() @property const {
+        return _empty;
+    }
+
+    SffRead front() @property {
+        return _read;
+    }
+
+    void popFront() {
+        _fetchNextRead();
+    }
+}
diff --git a/bio/sff/utils/roundup.d b/bio/sff/utils/roundup.d
new file mode 100644
index 0000000..8b84230
--- /dev/null
+++ b/bio/sff/utils/roundup.d
@@ -0,0 +1,13 @@
+module bio.sff.utils.roundup;
+
+import std.traits;
+import std.conv;
+
+/// First number
+T roundup(T)(T number) 
+    if (isUnsigned!T)
+{
+    if (number % 8 == 0)
+        return number;
+    return to!T(number + (8 - number % 8));
+}
diff --git a/bio/sff/writer.d b/bio/sff/writer.d
new file mode 100644
index 0000000..7937d79
--- /dev/null
+++ b/bio/sff/writer.d
@@ -0,0 +1,116 @@
+module bio.sff.writer;
+
+import bio.sff.constants;
+import bio.sff.utils.roundup;
+
+import bio.core.utils.stream;
+import std.stream;
+import std.system;
+
+/// Class for outputting SFF files
+class SffWriter {
+
+    /// Create new writer.
+    this(string filename, string flow_order, string key_sequence) 
+    {
+        _filename = filename;
+        _flow_order = flow_order;
+        _key_seq = key_sequence;
+
+        auto f = new bio.core.utils.stream.File(filename, "wb+");
+        auto stream = new BufferedStream(f, 1024576);
+        _endian_stream = new EndianStream(stream, Endian.bigEndian);
+
+        writeHeader();
+    }
+
+    /// Flow order
+    string flow_order() @property const {
+        return _flow_order;
+    }
+
+    /// Key sequence
+    string key_sequence() @property const {
+        return _key_seq;
+    }
+
+    /// Add a read to the end of file
+    void append(R)(R sff_read) {
+        // compute read_header_length
+        ushort exact_read_header_length = cast(ushort)(16 + sff_read.name.length);
+        ushort read_header_length = roundup(exact_read_header_length);
+
+        _endian_stream.write(read_header_length);
+        _endian_stream.write(cast(ushort)sff_read.name.length);
+        _endian_stream.write(cast(uint)sff_read.bases.length);
+        _endian_stream.write(sff_read.clip_qual_left);
+        _endian_stream.write(sff_read.clip_qual_right);
+        _endian_stream.write(sff_read.clip_adapter_left);
+        _endian_stream.write(sff_read.clip_adapter_right);
+        _endian_stream.writeExact(sff_read.name.ptr, sff_read.name.length);
+        for (size_t i = 0; i < read_header_length - exact_read_header_length; ++i)
+            _endian_stream.write(cast(ubyte)0);
+
+        for (size_t i = 0; i < _flow_order.length; ++i)
+            _endian_stream.write(sff_read.flowgram_values[i]);
+
+        auto n_bases = sff_read.bases.length;
+        _endian_stream.writeExact(sff_read.flow_index_per_base.ptr, n_bases);
+        _endian_stream.writeExact(sff_read.bases.ptr, n_bases);
+        _endian_stream.writeExact(sff_read.quality_scores.ptr, n_bases);
+
+        auto k = 2 * _flow_order.length + 3 * n_bases;
+        auto padding = roundup(k) - k;
+        
+        for (size_t i = 0; i < padding; ++i)
+            _endian_stream.write(cast(ubyte)0);
+
+        ++_n_reads;
+    }
+
+    /// Flush all buffers and update number of reads in the file header
+    void finish() {
+        updateNumberOfReads();
+        _endian_stream.close();
+    }
+
+    private {
+        string _filename;
+        string _flow_order;
+        string _key_seq;
+        Stream _endian_stream;
+
+        uint _n_reads;
+
+        ushort _exact_header_len() @property const {
+            return cast(ushort)(31 + _flow_order.length + _key_seq.length);
+        }
+
+        ushort _header_len() @property const {
+            return roundup(_exact_header_len);
+        }
+
+        void writeHeader() {
+            _endian_stream.write(SFF_MAGIC);
+            _endian_stream.writeExact(SFF_VERSION.ptr, 4);
+            _endian_stream.write(0UL);
+            _endian_stream.write(0U);
+            _endian_stream.write(_n_reads);
+            _endian_stream.write(_header_len);
+            _endian_stream.write(cast(ushort)_key_seq.length);
+            _endian_stream.write(cast(ushort)_flow_order.length);
+            _endian_stream.write(cast(ubyte)1);
+            _endian_stream.writeExact(_flow_order.ptr, _flow_order.length);
+            _endian_stream.writeExact(_key_seq.ptr, _key_seq.length);
+            for (size_t i = 0; i < _header_len - _exact_header_len; ++i)
+                _endian_stream.write(cast(ubyte)0);
+        }
+
+        void updateNumberOfReads() {
+            auto old_pos = _endian_stream.position;
+            _endian_stream.position = 20;
+            _endian_stream.write(_n_reads);
+            _endian_stream.position = old_pos;
+        }
+    }
+}
diff --git a/dub.json b/dub.json
new file mode 100644
index 0000000..ec26904
--- /dev/null
+++ b/dub.json
@@ -0,0 +1,12 @@
+{
+	"name": "biod",
+	"authors": [
+		"Artem Tarasov",
+		"Pjotr Prins"
+	],
+	"description": "Bioinformatics library in D (utils for working with SAM, BAM, SFF formats)",
+	"copyright": "Copyright © 2016, BioD developers",
+	"license": "MIT",
+	"sourcePaths": ["bio"],
+	"importPaths": ["bio"]
+}
diff --git a/examples/calculate_gc_content_from_reference.d b/examples/calculate_gc_content_from_reference.d
new file mode 100644
index 0000000..5b97af5
--- /dev/null
+++ b/examples/calculate_gc_content_from_reference.d
@@ -0,0 +1,35 @@
+// run example: rdmd -I.. calculate_gc_content_from_reference.d
+
+import bio.bam.reader;
+import bio.bam.md.reconstruct : dna;
+
+import std.stdio, std.datetime, std.range, std.array;
+
+void main() {
+  auto bam = new BamReader("../test/data/b7_295_chunk.bam");
+
+  // the sequence starts at first mapped base of first read
+  auto reference = dna(bam.reads);
+
+  int n_bases = 0, gc = 0;
+
+  foreach (base; reference) {
+    if (base == 'N') continue; // happens if coverage is zero
+    if (base == 'G' || base == 'C') gc += 1;
+    n_bases += 1;
+  }
+
+  writeln("total bases: ", n_bases);
+  writeln("        GC%: ", cast(float)gc / n_bases);
+  writeln("   sequence: ", reference);
+  writeln("     #reads: ", walkLength(bam.reads));
+
+  auto reads = array(bam.reads); // no I/O during measurements
+
+  StopWatch sw; // for a range of reads, minumum number of MD tags is parsed
+  sw.start(); walkLength(dna(reads)); sw.stop();
+  writeln("extracting reference from range of reads: ", sw.peek().usecs, "μs");
+  sw.reset(); 
+  sw.start(); foreach (read; reads) walkLength(dna(read)); sw.stop();
+  writeln("extracting reference from each read:     ", sw.peek().usecs, "μs");
+}
diff --git a/examples/create_bam_from_scratch.d b/examples/create_bam_from_scratch.d
new file mode 100644
index 0000000..ad6053a
--- /dev/null
+++ b/examples/create_bam_from_scratch.d
@@ -0,0 +1,38 @@
+// run example: rdmd -I.. create_bam_from_scratch.d
+
+// this example shows how to create BAM files from scratch
+import bio.bam.read, bio.bam.referenceinfo, bio.sam.header;
+import bio.bam.reader, bio.bam.writer;
+import std.stream, std.stdio;
+
+void main() {
+    auto header = new SamHeader(); // First, create SAM header 
+    RgLine rg;                     // and fill it with information.
+    rg.identifier = "RG007";       
+    rg.platform = "ILLUMINA";      // Of course, you can modify header
+    header.read_groups.add(rg);    // provided by BamReader object.
+
+    auto reference = ReferenceSequenceInfo("contig123", 4321);
+    auto stream = new MemoryStream();
+    auto writer = new BamWriter(stream);
+    writer.writeSamHeader(header);                  // start writing BAM from header
+    writer.writeReferenceSequenceInfo([reference]); // and reference sequence info
+
+    auto read = BamRead("readName001", "ACTGATGAAC",
+                        [CigarOperation(7, 'M'), CigarOperation(1, 'I'), CigarOperation(2, 'S')]);
+    read.base_qualities = [38, 34, 33, 35, 28, 39, 25, 19, 21, 17];
+    read.ref_id = 0;
+    read.mapping_quality = 46;
+    read.is_unmapped = false;
+    read["RG"] = "RG007";
+    // ... set many more fields, flags, and tags
+    read.position = 2345; // 0-based, in SAM output you will see 2346
+    read.strand = '-'; // same as read.is_reverse_strand = true
+    writer.writeRecord(read); // BGZF blocks are seamlessly compressed in parallel
+    writer.flush(); // in practice, one would call finish() method
+    stream.seekSet(0); // but here we will read from the stream
+
+    auto reader = new BamReader(stream);
+    write(reader.header.text); // serialized header already contains newline
+    writefln("%j", reader.reads.front); // prints record in JSON format
+}
diff --git a/examples/iterate_tags.d b/examples/iterate_tags.d
new file mode 100644
index 0000000..8883a3e
--- /dev/null
+++ b/examples/iterate_tags.d
@@ -0,0 +1,42 @@
+// run example: rdmd -I.. iterate_tags.d
+
+import bio.bam.reader, bio.bam.tagvalue;
+import std.stdio, std.datetime;
+import std.conv : to;
+
+void main() {
+
+  auto bam = new BamReader("../test/data/b7_295_chunk.bam");
+
+  auto read = bam.reads.front; // take first read
+
+  // iterating all tags
+  foreach (tag, value; read)
+    writeln(tag, ": ", value);
+
+  // taking value of tag
+  Value v = read["XS"];
+
+  // Usually, it will be converted to some type right away.
+  auto v2 = to!int(v);
+
+  // It is not necessary to know exact value type as in BAM.
+  // If it can be converted to specified type, that's fine.
+  // Otherwise, an exception will be thrown.
+  auto v3 = to!long(v); auto v4 = to!string(v); auto v5 = to!float(v);
+
+  // With strings and arrays there is an unsafe but faster way...
+  v = read["FZ"];
+  StopWatch sw;
+
+  // even with -O -release -inline this is slow
+  sw.start; auto fz1 = to!(ushort[])(v); sw.stop();
+  writeln("  safe conversion: ", sw.peek().usecs, "μs");
+  sw.reset();
+
+  // this works because v starts in memory with a union
+  sw.start(); auto fz2 = *(cast(ushort[]*)(&v)); sw.stop();
+  writeln("unsafe conversion: ", sw.peek().usecs, "μs");
+
+  assert(fz1 == fz2);
+}
diff --git a/examples/make_pileup.d b/examples/make_pileup.d
new file mode 100644
index 0000000..bf57643
--- /dev/null
+++ b/examples/make_pileup.d
@@ -0,0 +1,28 @@
+// run example: rdmd -I.. make_pileup.d
+
+import bio.bam.reader;
+import bio.bam.pileup;
+import bio.bam.read : compareCoordinates;
+
+import std.range, std.algorithm, std.datetime, std.stdio, std.array;
+
+void main() {
+
+  auto bam = new BamReader("../test/data/illu_20_chunk.bam");
+
+  auto pileup = makePileup(bam.reads, true);
+
+  // Reads in every pileup column are sorted by coordinate.
+  // Therefore the following holds:
+  assert(equal(
+        pileup.map!(column => column.reads.equalRange(column.position))()
+        .joiner(),
+        bam.reads));
+
+  // There is also easier and faster way to get reads starting at the column:
+  pileup = makePileup(bam.reads, true); // (initialize pileup engine again)
+  assert(equal(
+        pileup.map!(column => column.reads_starting_here)()
+        .joiner(),
+        bam.reads));
+}
diff --git a/examples/print_base_info.d b/examples/print_base_info.d
new file mode 100644
index 0000000..31c0bb2
--- /dev/null
+++ b/examples/print_base_info.d
@@ -0,0 +1,36 @@
+// run example: rdmd -I.. print_base_info.d
+
+import bio.bam.reader;
+import bio.bam.baseinfo;
+
+import std.stdio;
+import std.range : take, drop;
+import std.algorithm : find;
+
+void main() {
+
+  auto bam = new BamReader("../test/data/b7_295_chunk.bam");
+
+  // get read group information by name
+  auto rg = bam.header.read_groups["9IKNG"];
+
+  auto read = find!(r => r.name == "9IKNG:00592:01791")(bam.reads).front;
+
+  // fetch information about flow calls from FZ & ZF tags
+  // and also reference base from MD tag
+  auto bases = basesWith!("FZ", "MD")(read, arg!"flowOrder"(rg.flow_order),
+      arg!"keySequence"(rg.key_sequence));
+
+  // end of read contains a few indel errors
+  foreach (baseinfo; bases.drop(350).take(32)) {
+    writefln("%s\t%s\tflow: %3d\tintensity: %.2f\t\tref. pos.: %6d\tCIGAR op.: %s", 
+        baseinfo.reference_base,        // from MD tag
+        baseinfo.base,
+        baseinfo.flow_call.flow_index,  // from FZ tag
+        baseinfo.flow_call.intensity,   // also from FZ tag
+        baseinfo.position, 
+        baseinfo.cigar_operation);
+    // notice that because the read is on reverse strand, 
+    // reference position decreases during the iteration
+  }
+}
diff --git a/examples/read_bam_file.d b/examples/read_bam_file.d
new file mode 100644
index 0000000..aa823de
--- /dev/null
+++ b/examples/read_bam_file.d
@@ -0,0 +1,37 @@
+// run example: rdmd -I.. example1.d
+
+import bio.bam.reader;
+import bio.bam.pileup;
+
+import std.stdio;
+
+void main() {
+
+    auto bam = new BamReader("../test/data/ex1_header.bam");
+
+    auto reads = bam["chr2"][150 .. 160]; // region chr2:149-158
+
+    auto pileup = makePileup(reads,
+                             false,     // reads don't contain MD tags
+                             155, 158); // specify [start, end) interval
+                                      
+    foreach (column; pileup) {
+
+        writeln("Reference position: ", column.position);
+        writeln("    Coverage: ", column.coverage);
+
+        writeln("    Reads:");
+
+        foreach (read; column.reads) {
+            writefln("%30s\t%s\t%.2d\t%s\t%2s/%2s\t%2s/%2s\t%10s\t%s %s", 
+                        read.name, 
+                        read.current_base,
+                        read.current_base_quality,
+                        read.cigar_operation,
+                        read.cigar_operation_offset + 1, read.cigar_operation.length,
+                        read.query_offset + 1, read.sequence.length,
+                        read.cigarString(),
+                        read.cigar_before, read.cigar_after);
+        }
+    }
+}
diff --git a/examples/transverse_multiple_bam_files.d b/examples/transverse_multiple_bam_files.d
new file mode 100644
index 0000000..655623b
--- /dev/null
+++ b/examples/transverse_multiple_bam_files.d
@@ -0,0 +1,32 @@
+// run example: rdmd -I.. transverse_multiple_bam_files.d
+
+import bio.bam.multireader;
+import bio.bam.read : compareCoordinates;
+import bio.bam.pileup;
+
+import std.algorithm, std.conv, std.stdio;
+
+void main() {
+  // multiple BAM files can be traversed simultaneously (if they can be merged)
+  auto bam = new MultiBamReader(["../test/data/illu_20_chunk.bam",
+      "../test/data/ion_20_chunk.bam"]);
+
+  auto pileup = makePileup(bam.reads, // ANY range of reads is acceptable
+      true,  // use MD tags
+      32_000_083,
+      32_000_089);
+
+  foreach (column; pileup) {
+    writeln("Column position: ", column.position);
+    writeln("    Ref.base: ", column.reference_base); // extracted from MD tags
+    writeln("    Coverage: ", column.coverage);
+
+    writeln("    ", column.reads // bases from Illumina dataset
+        .filter!(read => to!string(read["RG"]).startsWith("ERR"))()
+        .map!(read => read.current_base)(),
+
+        "    ", column.reads // bases from IonTorrent dataset
+        .filter!(read => to!string(read["RG"]).startsWith("66A0Q"))()
+        .map!(read => read.current_base)());
+  }
+}
diff --git a/src_ragel/Makefile b/src_ragel/Makefile
new file mode 100644
index 0000000..5a59bf6
--- /dev/null
+++ b/src_ragel/Makefile
@@ -0,0 +1,28 @@
+all: fastrecordparser recordparser regionparser
+
+.PHONY : fastrecordparser
+
+.PHONY : recordparser
+
+.PHONY : regionparser
+
+fastrecordparser: 
+	ragel sam_alignment.rl -D -G2
+	./workarounds/fix_switch_case_fallthrough.sh sam_alignment.d
+	echo 'module bio.sam.utils.fastrecordparser;' | cat - sam_alignment.d > .sam_alignment.d.tmp
+	rm sam_alignment.d
+	mv .sam_alignment.d.tmp fastrecordparser.d
+
+recordparser: 
+	ragel sam_alignment.rl -D
+	./workarounds/fix_static_const.sh sam_alignment.d
+	echo 'module bio.sam.utils.recordparser;' | cat - sam_alignment.d > .sam_alignment.d.tmp
+	rm sam_alignment.d
+	mv .sam_alignment.d.tmp recordparser.d
+
+regionparser:
+	ragel region.rl -D
+	./workarounds/fix_static_const.sh region.d
+
+clean:
+	rm -f *parser.d region.d
diff --git a/src_ragel/maf_block.rl b/src_ragel/maf_block.rl
new file mode 100644
index 0000000..31a0599
--- /dev/null
+++ b/src_ragel/maf_block.rl
@@ -0,0 +1,153 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.maf.parser;
+import std.conv, std.array;
+import bio.maf.block;
+
+%%{
+    machine maf_block;
+
+    # Common utilities for parsing integers and floats
+    action update_sign { current_sign = fc == '-' ? -1 : 1; }
+    action init_integer { int_value = 0; }
+    action consume_next_digit { int_value *= 10; int_value += fc - '0'; }
+    action take_sign_into_account { int_value *= current_sign; current_sign = 1; }
+
+    sign = [\-+];
+
+    uint = ([0-9]{1,18}) > init_integer $ consume_next_digit ;
+    int = (sign >update_sign)? uint % take_sign_into_account ;
+
+    action mark_float_start { float_beg = p - line.ptr; }
+    action update_float_value { 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+
+    float = ((sign? ((digit* '.'? digit+ ([eE] sign? digit+)?) | "inf") ) | "nan")
+                > mark_float_start % update_float_value ;
+    # --------------------------------------------------------------------------
+
+    action set_score { block.score = float_value; }
+    action set_pass { block.pass = int_value; }
+    # Alignment block line
+    score_vp = "score=" float % set_score;
+    pass_vp = "pass=" uint % set_pass ;
+    ab_name_value_pair = score_vp | pass_vp ;
+    alignment_block_line = 'a' (space+ ab_name_value_pair)* ;
+
+    # Common
+    action src_begin { src_beg = p - line.ptr; }
+    action set_src { sequence.source = line[src_beg .. p - line.ptr]; }
+    action set_start { sequence.start = int_value; }
+    action set_size { sequence.size = int_value; }
+    action set_strand { sequence.strand = fc; }
+    action set_src_size { sequence.source_size = int_value; }
+    action add_sequence { sequences.put(sequence); sequence = MafSequence.init; }
+    action check_sequence { assert(line[src_beg .. p - line.ptr] == sequences.data.back.source); }
+    src = (^space)+ > src_begin % set_src ;
+    start = uint % set_start ;
+    size = uint % set_size ;
+    strand = ('+' | '-') > set_strand ;
+    srcSize = uint % set_src_size ; 
+
+    # Sequence line
+    action text_begin { text_beg = p - line.ptr; }
+    action set_text { sequence.text = line[text_beg .. p - line.ptr]; }
+    text = (^space)+ ;
+    s_line = ('s'
+              space+ src 
+              space+ start 
+              space+ size 
+              space+ strand
+              space+ srcSize
+              space+ text > text_begin % set_text) % add_sequence ;
+
+    # 'i' line
+    action set_left_status { sequences.data.back.left_status = fc; }
+    action set_left_count { sequences.data.back.left_count = int_value; }
+    action set_right_status { sequences.data.back.right_status = fc; }
+    action set_right_count { sequences.data.back.right_count = int_value; }
+    i_status = [CINnMT] ;
+    leftStatus = i_status ;
+    leftCount = uint ;
+    rightStatus = i_status ;
+    rightCount = uint ;
+    i_line = 'i'
+             space+ (src > src_begin % check_sequence)
+             space+ leftStatus > set_left_status
+             space+ leftCount % set_left_count
+             space+ rightStatus > set_right_status
+             space+ rightCount % set_right_count ;
+
+    # 'e' line
+    action set_empty_status { sequence.empty_status = *p; }
+    e_status = [CIMn] ;
+    e_line = ('e'
+              space+ src
+              space+ start
+              space+ size
+              space+ strand
+              space+ srcSize
+              space+ (e_status > set_empty_status)) % add_sequence ;
+
+    # 'q' line
+    action qual_begin { qual_beg = p - line.ptr; }
+    action set_qual { sequences.data.back.quality = line[qual_beg .. p - line.ptr]; }
+    q_value = (digit | 'F' | '-')+ ;
+    q_line = 'q'
+             space+ (src > src_begin % check_sequence)
+             space+ (q_value > qual_begin % set_qual);
+
+    newline = "\n" | "\r\n" ;
+    block := alignment_block_line space* 
+             (newline ((s_line | i_line | e_line | q_line) space*))+ ;
+
+    write data; 
+}%%
+
+MafBlock parseMafBlock(string line) {
+    char* p = cast(char*)line.ptr;
+    char* pe = p + line.length;
+    char* eof = pe;
+    int cs;
+
+    int current_sign;
+    int int_value;
+    double float_value;
+    size_t float_beg;
+
+    MafBlock block;
+    MafSequence sequence;
+    auto sequences = Appender!(MafSequence[])();
+
+    size_t src_beg;
+    size_t text_beg;
+    size_t qual_beg;
+
+    %%write init;
+    %%write exec;
+
+    block.sequences = sequences.data;
+    return block;
+}
diff --git a/src_ragel/region.rl b/src_ragel/region.rl
new file mode 100644
index 0000000..f18749c
--- /dev/null
+++ b/src_ragel/region.rl
@@ -0,0 +1,86 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+module bio.core.region;
+
+%%{
+    machine region_parser;
+
+    action init_integer { uint_value = 0; }
+    action consume_next_digit { if (fc != ',') uint_value *= 10, uint_value += fc - '0'; }
+    integer = [,0-9]+ > init_integer @consume_next_digit ;
+
+    action set_reference { region.reference = str[0 .. p - str.ptr]; }
+    action set_left_end { region.beg = to!uint(uint_value - 1); }
+    action set_right_end { region.end = to!uint(uint_value); }
+
+    reference = ([!-()+-<>-~] [!-~]*) % set_reference ;
+    reference_and_left_end = reference :> ':' integer % set_left_end ;
+    reference_and_both_ends = reference_and_left_end '-' integer % set_right_end ;
+
+    region := (reference @ 0) | (reference_and_left_end @ 1) | (reference_and_both_ends @ 1);
+
+    write data;
+}%%
+
+import std.conv;
+
+struct Region {
+    string reference;
+    uint beg;
+    uint end;
+}
+
+Region parseRegion(string str) {
+    char* p = cast(char*)str.ptr;
+    char* pe = p + str.length;
+    char* eof = pe;
+    int cs;
+    long uint_value;
+
+    Region region;
+    region.beg = 0;
+    region.end = uint.max;
+
+    %%write init;
+    %%write exec;
+
+    return region;
+}
+
+unittest {
+    auto region1 = parseRegion("chr1:1,000-2000");
+    assert(region1.reference == "chr1");
+    assert(region1.beg == 999);
+    assert(region1.end == 2000);
+
+    auto region2 = parseRegion("chr2");
+    assert(region2.reference == "chr2");
+    assert(region2.beg == 0);
+    assert(region2.end == uint.max);
+
+    auto region3 = parseRegion("chr3:1,000,000");
+    assert(region3.reference == "chr3");
+    assert(region3.beg == 999_999);
+    assert(region3.end == uint.max);
+}
diff --git a/src_ragel/sam_alignment.rl b/src_ragel/sam_alignment.rl
new file mode 100644
index 0000000..8e39aeb
--- /dev/null
+++ b/src_ragel/sam_alignment.rl
@@ -0,0 +1,524 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+%%{
+    machine sam_alignment;
+
+    action update_sign { current_sign = fc == '-' ? -1 : 1; }
+    action init_integer { int_value = 0; }
+    action consume_next_digit { int_value *= 10; int_value += fc - '0'; }
+    action take_sign_into_account { int_value *= current_sign; current_sign = 1; }
+
+    sign = [\-+];
+
+    uint = ([0-9]{1,18}) > init_integer $ consume_next_digit ;
+    int = (sign >update_sign)? uint % take_sign_into_account ;
+
+    action mark_float_start { float_beg = p - line.ptr; }
+    action update_float_value { 
+        float_value = to!float(line[float_beg .. p - line.ptr]);
+    }
+
+    float = ((sign? ((digit* '.'? digit+ ([eE] sign? digit+)?) | "inf") ) | "nan")
+                > mark_float_start % update_float_value ;
+
+    invalid_field = [^\t]* ; # TODO: make class with onError methods and pass it to parseAlignmentLine
+
+    ### 1. STORE READ NAME ###
+    action qname_start { read_name_beg = p - line.ptr; }
+    action qname_end { read_name = line[read_name_beg .. p - line.ptr]; }
+    action handle_invalid_qname { fhold; fgoto recover_from_invalid_qname; }
+    recover_from_invalid_qname := invalid_field '\t' @{ fhold; fgoto flag_parsing; } ;
+
+    qname =  '*' | (([!-?A-~]{1,255})** > qname_start % qname_end) ;
+
+    ### 2. STORE FLAG ###
+    action set_flag { flag = to!ushort(int_value); }
+    flag = uint % set_flag;
+    action handle_invalid_flag { fhold; fgoto recover_from_invalid_flag; }
+    recover_from_invalid_flag := invalid_field '\t' @{ fhold; fgoto rname_parsing; } ;
+
+    ### 3. STORE RNAME ###
+    action rname_start { rname_beg = p - line.ptr; }
+    action rname_end {
+        ref_id = header.getSequenceIndex(line[rname_beg .. p - line.ptr]); 
+    }
+
+    action handle_invalid_rname { fhold; fgoto recover_from_invalid_rname; }
+    recover_from_invalid_rname := invalid_field '\t' @{ fhold; fgoto pos_parsing; } ;
+
+    rname = '*' | (([!-()+-<>-~] [!-~]*) > rname_start % rname_end);
+
+    ### 4. STORE POS ###
+    action set_pos { end_pos = pos = to!uint(int_value); }
+    pos = uint % set_pos;
+    action handle_invalid_pos { fhold; fgoto recover_from_invalid_pos; }
+    recover_from_invalid_pos := invalid_field '\t' @{ fhold; fgoto mapq_parsing; } ;
+
+    ### 5. STORE MAPPING QUALITY ###
+    action set_mapping_quality { mapping_quality = to!ubyte(int_value); }
+    mapq = uint % set_mapping_quality;
+    action handle_invalid_mapq { fhold; fgoto recover_from_invalid_mapq; }
+    recover_from_invalid_mapq := invalid_field '\t' @{ fhold; fgoto cigar_parsing; } ;
+
+    ### 6. INITIALIZE OUTPUT BUFFER ###
+    action init_output_buffer {
+        buffer.capacity = 32 + read_name.length + 1;
+        buffer.putUnsafe!int(ref_id);
+        buffer.putUnsafe!int(pos - 1);
+
+        enforce(read_name.length + 1 <= 255, "Read name " ~ read_name ~ " is too long!");
+
+        // bin will be set later
+        auto bin_mq_nl = ((cast(uint)mapping_quality) << 8) | (read_name.length + 1);
+        buffer.putUnsafe(cast(uint)bin_mq_nl);
+
+        // number of CIGAR operations will be set later
+        buffer.putUnsafe!uint(flag << 16);
+
+        buffer.putUnsafe!int(0);
+        buffer.putUnsafe!int(-1); // mate ref. id
+        buffer.putUnsafe!int(-1); // mate pos
+        buffer.putUnsafe!int(0);  // tlen
+
+        buffer.putUnsafe(cast(ubyte[])read_name);
+        buffer.putUnsafe!ubyte(0);
+
+        rollback_size = buffer.length;
+    }
+
+    ### 7. STORE CIGAR OPERATIONS ###
+    action cigar_set_op_length { cigar_op_len = to!uint(int_value); }
+    action cigar_set_op_chr { cigar_op_chr = fc; }
+    action cigar_put_operation { 
+        auto op = CigarOperation(cigar_op_len, cigar_op_chr);
+        if (op.is_reference_consuming)
+            end_pos += op.length;
+        buffer.put!CigarOperation(op); 
+        {
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) + 1;
+        }
+    }
+
+    action handle_invalid_cigar {
+        auto ptr = cast(uint*)(buffer.data.ptr + 3 * uint.sizeof);
+        *ptr = (*ptr) & 0xFFFF0000;
+        buffer.shrink(rollback_size);
+        end_pos = pos + 1;
+        fhold; fgoto recover_from_invalid_cigar;
+    }
+    recover_from_invalid_cigar := invalid_field '\t' @{ fhold; fgoto rnext_parsing; } ;
+
+    cigar = '*' | (uint % cigar_set_op_length
+                  [MIDNSHPX=] > cigar_set_op_chr % cigar_put_operation)+ ;
+
+    ### 8. SET BIN ###
+    action set_bin {
+        if (end_pos == pos)
+            ++end_pos;
+        {
+        auto bin = reg2bin(pos - 1, end_pos - 1); // 0-based [) interval
+        auto ptr = cast(uint*)(buffer.data.ptr + 2 * uint.sizeof);
+        *ptr = (*ptr) | ((cast(uint)bin) << 16);
+        }
+    }
+
+    ### 9. SET MATE REF. ID ###
+    action set_same_mate_ref_id {
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = ref_id;
+        }
+    }
+   
+    action rnext_start { rnext_beg = p - line.ptr; }
+    action rnext_end {
+        { 
+        auto ptr = cast(int*)(buffer.data.ptr + 5 * int.sizeof);
+        *ptr = header.getSequenceIndex(line[rnext_beg .. p - line.ptr]);
+        }
+    }
+    action handle_invalid_rnext { fhold; fgoto recover_from_invalid_rnext; }
+    recover_from_invalid_rnext := invalid_field '\t' @{ fhold; fgoto pnext_parsing; } ;
+
+    rnext = '*' | ('=' % set_same_mate_ref_id) | 
+                  (([!-()+-<>-~][!-~]*) > rnext_start % rnext_end) ;
+
+    ### 10. SET MATE POSITION ###
+    action set_mate_pos { 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 6 * int.sizeof);
+        *ptr = to!int(int_value) - 1;
+        }
+    }
+    action handle_invalid_pnext { fhold; fgoto recover_from_invalid_pnext; }
+    recover_from_invalid_pnext := invalid_field '\t' @{ fhold; fgoto tlen_parsing; } ;
+
+    pnext = uint % set_mate_pos;
+
+    ### 11. SET TEMPLATE LENGTH ###
+    action set_template_length { 
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 7 * int.sizeof);
+        *ptr = to!int(int_value);
+        }
+    }
+    action handle_invalid_tlen { fhold; fgoto recover_from_invalid_tlen; }
+    recover_from_invalid_tlen := invalid_field '\t' @{ fhold; fgoto seq_parsing; } ;
+
+    tlen = int % set_template_length;
+
+    ### 12. SET SEQUENCE ###
+    action sequence_start { sequence_beg = p - line.ptr; }
+    action sequence_end { 
+        auto data = cast(ubyte[])line[sequence_beg .. p - line.ptr];
+        l_seq = cast(int)data.length;
+        auto raw_len = (l_seq + 1) / 2;
+
+        // reserve space for base qualities, too
+        buffer.capacity = buffer.length + raw_len + l_seq;
+
+        for (size_t i = 0; i < raw_len; ++i) {
+            auto b = cast(ubyte)(Base(data[2 * i]).internal_code << 4);
+            if (2 * i + 1 < l_seq)
+                b |= cast(ubyte)(Base(data[2 * i + 1]).internal_code);
+            buffer.putUnsafe!ubyte(b);
+        }
+
+        // set l_seq
+        {
+        auto ptr = cast(int*)(buffer.data.ptr + 4 * int.sizeof);
+        *ptr = l_seq;
+        }
+
+        rollback_size = buffer.length;
+    }
+    action handle_invalid_seq {
+        rollback_size = buffer.length;
+        fhold; fgoto recover_from_invalid_seq;
+    }
+    recover_from_invalid_seq := invalid_field '\t' @{ fhold; fgoto qual_parsing; } ;
+
+    action set_rollback_size {
+        rollback_size = buffer.length;
+    }
+
+    seq = ('*' % set_rollback_size) | ([A-Za-z=.]+ > sequence_start % sequence_end) ;
+
+    ### 13. SET BASE QUALITIES ###
+    action convert_next_character_to_prob {
+        ++quals_length;
+        quals_last_char = fc;
+        buffer.putUnsafe!ubyte(cast(ubyte)(fc - 33));
+    }
+
+    action qual_end {
+        // '*' may correspond either to a one-base long sequence
+        // or to absence of information
+        if (quals_length == 1 && quals_last_char == '*' && l_seq == 0)
+            buffer.shrink(rollback_size);
+    }
+
+    action handle_invalid_qual {
+        buffer.shrink(rollback_size);
+        for (size_t i = 0; i < l_seq; ++i)
+            buffer.putUnsafe!ubyte(0xFF);
+        rollback_size = buffer.length;
+        fhold; fgoto recover_from_invalid_qual;
+    }
+    # FIXME
+    recover_from_invalid_qual := invalid_field '\t' @{ fhold; fgoto tag_parsing; } ;
+
+    action check_qual_length {
+        if (buffer.length - rollback_size != l_seq) {
+            buffer.shrink(rollback_size);
+            for (size_t i = 0; i < l_seq; ++i)
+                buffer.putUnsafe!ubyte(0xFF);
+        }
+        rollback_size = buffer.length;
+    }
+    qual = [!-~]+ $ convert_next_character_to_prob % qual_end ;
+
+    ###### PARSE MANDATORY FIELDS #######
+    mandatoryfields = qname_parsing: (qname $!handle_invalid_qname)
+                      flag_parsing: '\t' (flag $!handle_invalid_flag)
+                      rname_parsing: '\t' (rname $!handle_invalid_rname)
+                      pos_parsing: '\t' (pos $!handle_invalid_pos)
+                      mapq_parsing: '\t' (mapq $!handle_invalid_mapq)
+                      cigar_parsing: '\t' > init_output_buffer (cigar $!handle_invalid_cigar)
+                      rnext_parsing: '\t' > set_bin (rnext $!handle_invalid_rnext)
+                      pnext_parsing: '\t' (pnext $!handle_invalid_pnext)
+                      tlen_parsing: '\t' (tlen $!handle_invalid_tlen)
+                      seq_parsing: '\t' (seq $!handle_invalid_seq)
+                      qual_parsing: '\t' (qual % check_qual_length $!handle_invalid_qual) ;
+
+    ############ TAG PARSING ######
+
+    action set_charvalue { 
+        buffer.capacity = buffer.length + 4;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('A');
+        buffer.putUnsafe!char(fc); 
+    }
+
+    action set_integervalue { 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        if (int_value < 0) {
+            if (int_value >= byte.min) {
+                buffer.putUnsafe!char('c');
+                buffer.putUnsafe(cast(byte)int_value);
+            } else if (int_value >= short.min) {
+                buffer.putUnsafe!char('s');
+                buffer.putUnsafe(cast(short)int_value);
+            } else if (int_value >= int.min) {
+                buffer.putUnsafe!char('i');
+                buffer.putUnsafe(cast(int)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        } else {
+            if (int_value <= ubyte.max) {
+                buffer.putUnsafe!char('C');
+                buffer.putUnsafe(cast(ubyte)int_value);
+            } else if (int_value <= ushort.max) {
+                buffer.putUnsafe!char('S');
+                buffer.putUnsafe(cast(ushort)int_value);
+            } else if (int_value <= uint.max) {
+                buffer.putUnsafe!char('I');
+                buffer.putUnsafe(cast(uint)int_value);
+            } else {
+                throw new Exception("integer out of range");
+            }
+        }
+    }
+
+    action start_tagvalue { tagvalue_beg = p - line.ptr; }
+
+    action set_floatvalue { 
+        buffer.capacity = buffer.length + 7;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('f');
+        buffer.putUnsafe!float(float_value);
+    }
+
+    action set_stringvalue { 
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('Z');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+
+    action set_hexstringvalue {
+        {
+        auto data = cast(ubyte[])(line[tagvalue_beg .. p - line.ptr]);
+        buffer.capacity = buffer.length + 4 + data.length;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('H');
+        buffer.putUnsafe(data);
+        buffer.putUnsafe!ubyte(0);
+        }
+    }
+
+    charvalue =  [!-~] > set_charvalue ;
+    integervalue = int % set_integervalue;
+    floatvalue = float % set_floatvalue ;
+
+    action start_arrayvalue {
+        arraytype = fc;
+        buffer.capacity = buffer.length + 8;
+        buffer.putUnsafe(tag_key);
+        buffer.putUnsafe!char('B');
+        buffer.putUnsafe!char(arraytype);
+        buffer.putUnsafe!uint(0);
+        tag_array_length_offset = buffer.length - uint.sizeof;
+    }
+
+    action put_integer_to_array {
+        // here, we assume that compiler is smart enough to move switch out of loop.
+        switch (arraytype) {
+            case 'c': buffer.put(to!byte(int_value)); break;
+            case 'C': buffer.put(to!ubyte(int_value)); break;
+            case 's': buffer.put(to!short(int_value)); break;
+            case 'S': buffer.put(to!ushort(int_value)); break;
+            case 'i': buffer.put(to!int(int_value)); break;
+            case 'I': buffer.put(to!uint(int_value)); break;
+            default: assert(0);
+        }
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+
+    action put_float_to_array { 
+        buffer.put!float(float_value);
+        {
+            auto ptr = cast(uint*)(buffer.data.ptr + tag_array_length_offset);
+            ++*ptr;
+        }
+    }
+
+    stringvalue = [ !-~]+ > start_tagvalue % set_stringvalue ;
+    hexstringvalue = xdigit+ > start_tagvalue % set_hexstringvalue ;
+    integerarrayvalue = [cCsSiI] > start_arrayvalue (',' int % put_integer_to_array)+ ;
+    floatarrayvalue = [f] > start_arrayvalue (',' float % put_float_to_array)+ ;
+    arrayvalue = integerarrayvalue | floatarrayvalue ;
+
+    tagvalue = ("A:" charvalue) | 
+               ("i:" integervalue) | 
+               ("f:" floatvalue) | 
+               ("Z:" stringvalue) | 
+               ("H:" hexstringvalue) |
+               ("B:" arrayvalue) ;
+
+    action tag_key_start { tag_key_beg = p - line.ptr; }
+    action tag_key_end   { tag_key = cast(ubyte[])(line[tag_key_beg .. p - line.ptr]); }
+
+    action handle_invalid_tag {
+        buffer.shrink(rollback_size); 
+        fhold; fgoto recover_from_invalid_tag;
+    }
+    # FIXME: what if the tag is last?
+    recover_from_invalid_tag := invalid_field '\t' @{ fhold; fgoto tag_parsing; } ;
+
+    action update_rollback_size { rollback_size = buffer.length; }
+    tag = (alpha alnum) > tag_key_start % tag_key_end ;
+    optionalfield = tag ':' tagvalue % update_rollback_size $!handle_invalid_tag ;
+    optionalfields = optionalfield ('\t' optionalfield)* ;
+
+    alignment := field_parsing: mandatoryfields 
+                 tag_parsing: ('\t' optionalfields)? ;
+
+    write data; 
+}%%
+
+import bio.sam.header;
+import bio.bam.read;
+import bio.bam.bai.bin;
+import bio.core.utils.outbuffer;
+import bio.core.base;
+import std.conv;
+import std.array;
+import std.exception;
+
+BamRead parseAlignmentLine(string line, SamHeader header, OutBuffer buffer=null) {
+    char* p = cast(char*)line.ptr;
+    char* pe = p + line.length;
+    char* eof = pe;
+    int cs;
+
+    if (buffer is null)
+        buffer = new OutBuffer(8192);
+    else
+        buffer.clear();
+
+    size_t rollback_size; // needed in case of invalid data
+    
+    byte current_sign = 1;
+
+    size_t read_name_beg; // position of beginning of QNAME
+
+    size_t sequence_beg; // position of SEQ start
+    int l_seq;           // sequence length
+
+    uint cigar_op_len;   // length of CIGAR operation
+    char cigar_op_chr;   // CIGAR operation
+
+    size_t quals_length;  // number of QUAL characters
+    char quals_last_char; // needed in order to handle '*' correctly
+
+    size_t cigar_op_len_start; // position of start of CIGAR operation
+    
+    long int_value;                      // for storing temporary integers
+    float float_value;                   // for storing temporary floats
+    size_t float_beg;                    // position of start of current float
+    char arraytype;                      // type of last array tag value
+    size_t tag_array_length_offset;      // where the length is stored in the buffer
+
+    string read_name;
+    ushort flag;
+    int pos = -1;
+    int end_pos; // for bin calculation
+    int mate_pos = -1;
+    ubyte mapping_quality = 255;
+    int template_length = 0;
+
+    size_t tag_key_beg, tagvalue_beg;
+    ubyte[] tag_key;
+    size_t rname_beg, rnext_beg;
+
+    int ref_id = -1;
+
+    %%write init;
+    %%write exec;
+
+    BamRead read;
+    read.raw_data = buffer.data[];
+    return read;
+}
+
+unittest {
+    import std.algorithm;
+    import std.math;
+
+    auto line = "ERR016155.15021091\t185\t20\t60033\t25\t66S35M\t=\t60033\t0\tAGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC\t#####################################################################################################\tX0:i:1\tX1:i:0\tXC:i:35\tMD:Z:17A8A8\tRG:Z:ERR016155\tAM:i:0\tNM:i:2\tSM:i:25\tXT:A:U\tBQ:Z:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\tY0:B:c,1,2,3\ [...]
+
+    auto header = new SamHeader("@SQ\tSN:20\tLN:1234567");
+    auto alignment = parseAlignmentLine(line, header);
+    assert(alignment.name == "ERR016155.15021091");
+    assert(equal(alignment.sequence(), "AGAAAAAACTGGAAGTTAATAGAGTGGTGACTCAGATCCAGTGGTGGAAGGGTAAGGGATCTTGGAACCCTATAGAGTTGCTGTGTGCCAGGGCCAGATCC"));
+    assert(alignment.cigarString() == "66S35M");
+    assert(alignment.flag == 185);
+    assert(alignment.position == 60032);
+    assert(alignment.mapping_quality == 25);
+    assert(alignment.mate_position == 60032);
+    assert(alignment.ref_id == 0);
+    assert(alignment.mate_ref_id == 0);
+    assert(to!ubyte(alignment["AM"]) == 0);
+    assert(to!ubyte(alignment["SM"]) == 25);
+    assert(to!string(alignment["MD"]) == "17A8A8");
+    assert(equal(to!(byte[])(alignment["Y0"]), [1, 2, 3]));
+    assert(equal!approxEqual(to!(float[])(alignment["Y1"]), [13.263, -3.1415, 52.63461]));
+    assert(to!char(alignment["XT"]) == 'U');
+
+    import bio.bam.reference;
+
+    auto info = ReferenceSequenceInfo("20", 1234567);
+
+    auto invalid_cigar_string = "1\t100\t20\t50000\t30\tMZABC\t=\t50000\t0\tACGT\t####";
+    alignment = parseAlignmentLine(invalid_cigar_string, header);
+    assert(equal(alignment.sequence(), "ACGT"));
+
+    auto invalid_tag_and_qual = "2\t100\t20\t5\t40\t27M30X5D\t=\t3\t10\tACT\t !\n\tX1:i:7\tX3:i:zzz\tX4:i:5";
+    alignment = parseAlignmentLine(invalid_tag_and_qual, header);
+    assert(alignment.base_qualities == [255, 255, 255]); // i.e. invalid
+    assert(to!ubyte(alignment["X1"]) == 7);
+    assert(alignment["X3"].is_nothing);
+    assert(to!ubyte(alignment["X4"]) == 5);
+}
diff --git a/src_ragel/workarounds/fix_static_const.sh b/src_ragel/workarounds/fix_static_const.sh
new file mode 100755
index 0000000..053d86a
--- /dev/null
+++ b/src_ragel/workarounds/fix_static_const.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+if [[ $OSTYPE == linux-gnu ]]; then
+	sed -i "s/static const/static/g" $1
+else
+	sed -i ".bak" "s/static const/static/g" $1
+fi
diff --git a/src_ragel/workarounds/fix_switch_case_fallthrough.sh b/src_ragel/workarounds/fix_switch_case_fallthrough.sh
new file mode 100755
index 0000000..fb8bc32
--- /dev/null
+++ b/src_ragel/workarounds/fix_switch_case_fallthrough.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+if [[ $OSTYPE == linux-gnu ]]; then
+    sed -i -r 's/^case ([0-9]+)/goto case; case \1/g' $1
+else
+    sed -i -r '.bak' 's/^case ([0-9]+)/goto case; case \1/g' $1
+fi
diff --git a/test/data/b.sam b/test/data/b.sam
new file mode 100644
index 0000000..e7108a4
--- /dev/null
+++ b/test/data/b.sam
@@ -0,0 +1,3993 @@
+ at SQ	SN:KI519610.1	LN:7371162
+ at SQ	SN:KI519611.1	LN:6947489
+ at SQ	SN:KI519612.1	LN:6918293
+ at SQ	SN:KI519613.1	LN:6837434
+ at SQ	SN:KI519614.1	LN:6763396
+ at SQ	SN:KI519615.1	LN:6332452
+ at SQ	SN:KI519616.1	LN:6276451
+ at SQ	SN:KI519617.1	LN:5572511
+ at SQ	SN:KI519618.1	LN:5495115
+ at SQ	SN:KI519619.1	LN:5440583
+ at SQ	SN:KI519621.1	LN:5070431
+ at SQ	SN:KI519620.1	LN:4922413
+ at SQ	SN:KI519622.1	LN:4748392
+ at SQ	SN:KI519623.1	LN:4655775
+ at SQ	SN:KI519624.1	LN:4650977
+ at SQ	SN:KI519625.1	LN:4509838
+ at SQ	SN:KI519626.1	LN:4499790
+ at SQ	SN:KI519627.1	LN:4428330
+ at SQ	SN:KI519628.1	LN:4296375
+ at SQ	SN:KI519629.1	LN:4196014
+ at SQ	SN:KI519630.1	LN:4187583
+ at SQ	SN:KI519631.1	LN:4020106
+ at SQ	SN:KI519636.1	LN:3829262
+ at SQ	SN:KI519635.1	LN:3790307
+ at SQ	SN:KI519637.1	LN:3779408
+ at SQ	SN:KI519638.1	LN:3737520
+ at SQ	SN:KI519639.1	LN:3697357
+ at SQ	SN:KI519640.1	LN:3625908
+ at SQ	SN:KI519641.1	LN:3524602
+ at SQ	SN:KI519642.1	LN:3520658
+ at SQ	SN:KI519646.1	LN:3472673
+ at SQ	SN:KI519647.1	LN:3433689
+ at SQ	SN:KI519645.1	LN:3399124
+ at SQ	SN:KI519643.1	LN:3391058
+ at SQ	SN:KI519644.1	LN:3353568
+ at SQ	SN:KI519649.1	LN:3348245
+ at SQ	SN:KI519648.1	LN:3324142
+ at SQ	SN:KI519650.1	LN:3294432
+ at SQ	SN:KI519652.1	LN:3075602
+ at SQ	SN:KI519651.1	LN:3028220
+ at SQ	SN:KI519655.1	LN:2996542
+ at SQ	SN:KI519657.1	LN:2978479
+ at SQ	SN:KI519654.1	LN:2964381
+ at SQ	SN:KI519653.1	LN:2941644
+ at SQ	SN:KI519658.1	LN:2911915
+ at SQ	SN:KI519656.1	LN:2866051
+ at SQ	SN:KI519665.1	LN:2802555
+ at SQ	SN:KI519664.1	LN:2768972
+ at SQ	SN:KI519666.1	LN:2756912
+ at SQ	SN:KI519662.1	LN:2746655
+ at SQ	SN:KI519671.1	LN:2736407
+ at SQ	SN:KI519663.1	LN:2732034
+ at SQ	SN:KI519667.1	LN:2700494
+ at SQ	SN:KI519670.1	LN:2693619
+ at SQ	SN:KI519675.1	LN:2689749
+ at SQ	SN:KI519682.1	LN:2678482
+ at SQ	SN:KI519673.1	LN:2651320
+ at SQ	SN:KI519676.1	LN:2644023
+ at SQ	SN:KI519672.1	LN:2625533
+ at SQ	SN:KI519674.1	LN:2603862
+ at SQ	SN:KI519677.1	LN:2562819
+ at SQ	SN:KI519681.1	LN:2559699
+ at SQ	SN:KI519678.1	LN:2541669
+ at SQ	SN:KI519679.1	LN:2523309
+ at SQ	SN:KI519680.1	LN:2496394
+ at SQ	SN:KI519683.1	LN:2468174
+ at SQ	SN:KI519689.1	LN:2412920
+ at SQ	SN:KI519687.1	LN:2406367
+ at SQ	SN:KI519688.1	LN:2395390
+ at SQ	SN:KI519690.1	LN:2380662
+ at SQ	SN:KI519691.1	LN:2326230
+ at SQ	SN:KI519632.1	LN:2315295
+ at SQ	SN:KI519692.1	LN:2283808
+ at SQ	SN:KI519702.1	LN:2237016
+ at SQ	SN:KI519693.1	LN:2236488
+ at SQ	SN:KI519701.1	LN:2222512
+ at SQ	SN:KI519694.1	LN:2205101
+ at SQ	SN:KI519706.1	LN:2179591
+ at SQ	SN:KI519698.1	LN:2176608
+ at SQ	SN:KI519699.1	LN:2166626
+ at SQ	SN:KI519704.1	LN:2160866
+ at SQ	SN:KI519700.1	LN:2154442
+ at SQ	SN:KI519713.1	LN:2131986
+ at SQ	SN:KI519703.1	LN:2131553
+ at SQ	SN:KI519710.1	LN:2127424
+ at SQ	SN:KI519707.1	LN:2113952
+ at SQ	SN:KI519709.1	LN:2099011
+ at SQ	SN:KI519705.1	LN:2098595
+ at SQ	SN:KI519708.1	LN:2070844
+ at SQ	SN:KI519717.1	LN:2040063
+ at SQ	SN:KI519716.1	LN:2009684
+ at SQ	SN:KI519715.1	LN:2002839
+ at SQ	SN:KI519714.1	LN:1989185
+ at SQ	SN:KI519722.1	LN:1963560
+ at SQ	SN:KI519721.1	LN:1926226
+ at SQ	SN:KI519723.1	LN:1907358
+ at SQ	SN:KI519727.1	LN:1906830
+ at SQ	SN:KI519724.1	LN:1906291
+ at SQ	SN:KI519726.1	LN:1889071
+ at SQ	SN:KI519725.1	LN:1864432
+ at SQ	SN:KI519731.1	LN:1861053
+ at SQ	SN:KI519728.1	LN:1811343
+ at SQ	SN:KI519669.1	LN:1811098
+ at SQ	SN:KI519729.1	LN:1799720
+ at SQ	SN:KI519738.1	LN:1792795
+ at SQ	SN:KI519732.1	LN:1786033
+ at SQ	SN:KI519746.1	LN:1784876
+ at SQ	SN:KI519733.1	LN:1781427
+ at SQ	SN:KI519734.1	LN:1781272
+ at SQ	SN:KI519730.1	LN:1775154
+ at SQ	SN:KI519744.1	LN:1739180
+ at SQ	SN:KI519737.1	LN:1731755
+ at SQ	SN:KI519741.1	LN:1710938
+ at SQ	SN:KI519740.1	LN:1703701
+ at SQ	SN:KI519739.1	LN:1695159
+ at SQ	SN:KI519743.1	LN:1683997
+ at SQ	SN:KI519742.1	LN:1677075
+ at SQ	SN:KI519752.1	LN:1672257
+ at SQ	SN:KI519751.1	LN:1652273
+ at SQ	SN:KI519745.1	LN:1644723
+ at SQ	SN:KI519754.1	LN:1626270
+ at SQ	SN:KI519749.1	LN:1619037
+ at SQ	SN:KI519764.1	LN:1614693
+ at SQ	SN:KI519753.1	LN:1613567
+ at SQ	SN:KI519757.1	LN:1605941
+ at SQ	SN:KI519750.1	LN:1604880
+ at SQ	SN:KI519755.1	LN:1599760
+ at SQ	SN:KI519759.1	LN:1588068
+ at SQ	SN:KI519768.1	LN:1584072
+ at SQ	SN:KI519756.1	LN:1574226
+ at SQ	SN:KI519758.1	LN:1566783
+ at SQ	SN:KI519794.1	LN:1557440
+ at SQ	SN:KI519760.1	LN:1555868
+ at SQ	SN:KI519659.1	LN:1552333
+ at SQ	SN:KI519762.1	LN:1538851
+ at SQ	SN:KI519761.1	LN:1531781
+ at SQ	SN:KI519763.1	LN:1530583
+ at SQ	SN:KI519780.1	LN:1498556
+ at SQ	SN:KI519765.1	LN:1489811
+ at SQ	SN:KI519766.1	LN:1480175
+ at SQ	SN:KI519778.1	LN:1474717
+ at SQ	SN:KI519767.1	LN:1467576
+ at SQ	SN:KI519696.1	LN:1461874
+ at SQ	SN:KI519785.1	LN:1459804
+ at SQ	SN:KI519782.1	LN:1450754
+ at SQ	SN:KI519777.1	LN:1448886
+ at SQ	SN:KI519770.1	LN:1445858
+ at SQ	SN:KI519769.1	LN:1444509
+ at SQ	SN:KI519789.1	LN:1434793
+ at SQ	SN:KI519774.1	LN:1425059
+ at SQ	SN:KI519781.1	LN:1417595
+ at SQ	SN:KI519779.1	LN:1396063
+ at SQ	SN:KI519783.1	LN:1395917
+ at SQ	SN:KI519784.1	LN:1392090
+ at SQ	SN:KI519712.1	LN:1390571
+ at SQ	SN:KI519748.1	LN:1388881
+ at SQ	SN:KI519718.1	LN:1388505
+ at SQ	SN:KI519792.1	LN:1386350
+ at SQ	SN:KI519793.1	LN:1361616
+ at SQ	SN:KI519788.1	LN:1337905
+ at SQ	SN:KI519799.1	LN:1334890
+ at SQ	SN:KI519684.1	LN:1306545
+ at SQ	SN:KI519795.1	LN:1300078
+ at SQ	SN:KI519796.1	LN:1286892
+ at SQ	SN:KI519828.1	LN:1274659
+ at SQ	SN:KI519797.1	LN:1259385
+ at SQ	SN:KI519807.1	LN:1258761
+ at SQ	SN:KI519802.1	LN:1257344
+ at SQ	SN:KI519800.1	LN:1256563
+ at SQ	SN:KI519810.1	LN:1255825
+ at SQ	SN:KI519798.1	LN:1254985
+ at SQ	SN:KI519803.1	LN:1248170
+ at SQ	SN:KI519808.1	LN:1247848
+ at SQ	SN:KI519801.1	LN:1244885
+ at SQ	SN:KI519811.1	LN:1224301
+ at SQ	SN:KI519634.1	LN:1219852
+ at SQ	SN:KI519813.1	LN:1205613
+ at SQ	SN:KI519809.1	LN:1205357
+ at SQ	SN:KI519817.1	LN:1186184
+ at SQ	SN:KI519816.1	LN:1186110
+ at SQ	SN:KI519812.1	LN:1185550
+ at SQ	SN:KI519815.1	LN:1178258
+ at SQ	SN:KI519814.1	LN:1173082
+ at SQ	SN:KI519818.1	LN:1172663
+ at SQ	SN:KI519826.1	LN:1170828
+ at SQ	SN:KI519827.1	LN:1157162
+ at SQ	SN:KI519822.1	LN:1142353
+ at SQ	SN:KI519839.1	LN:1138628
+ at SQ	SN:KI519824.1	LN:1137989
+ at SQ	SN:KI519830.1	LN:1135900
+ at SQ	SN:KI519819.1	LN:1132448
+ at SQ	SN:KI519820.1	LN:1125946
+ at SQ	SN:KI519821.1	LN:1124386
+ at SQ	SN:KI519823.1	LN:1109832
+ at SQ	SN:KI519829.1	LN:1095521
+ at SQ	SN:KI519825.1	LN:1092861
+ at SQ	SN:KI519831.1	LN:1063445
+ at SQ	SN:KI519838.1	LN:1060955
+ at SQ	SN:KI519875.1	LN:1059628
+ at SQ	SN:KI519861.1	LN:1059351
+ at SQ	SN:KI519846.1	LN:1059277
+ at SQ	SN:KI519840.1	LN:1054501
+ at SQ	SN:KI519851.1	LN:1050102
+ at SQ	SN:KI519843.1	LN:1038444
+ at SQ	SN:KI519850.1	LN:1038069
+ at SQ	SN:KI519842.1	LN:1037213
+ at SQ	SN:KI519844.1	LN:1037165
+ at SQ	SN:KI519661.1	LN:1022744
+ at SQ	SN:KI519787.1	LN:1016951
+ at SQ	SN:KI519849.1	LN:1015261
+ at SQ	SN:KI519872.1	LN:1015164
+ at SQ	SN:KI519847.1	LN:1013289
+ at SQ	SN:KI519841.1	LN:1012499
+ at SQ	SN:KI519845.1	LN:1003796
+ at SQ	SN:KI519848.1	LN:995373
+ at SQ	SN:KI519852.1	LN:974716
+ at SQ	SN:KI519855.1	LN:970463
+ at SQ	SN:KI519911.1	LN:968941
+ at SQ	SN:KI519736.1	LN:967356
+ at SQ	SN:KI519853.1	LN:965584
+ at SQ	SN:KI519860.1	LN:964003
+ at SQ	SN:KI519854.1	LN:963790
+ at SQ	SN:KI519871.1	LN:959082
+ at SQ	SN:KI519856.1	LN:958155
+ at SQ	SN:KI519865.1	LN:956798
+ at SQ	SN:KI519862.1	LN:951962
+ at SQ	SN:KI519866.1	LN:950557
+ at SQ	SN:KI519790.1	LN:941629
+ at SQ	SN:KI519868.1	LN:938526
+ at SQ	SN:KI519874.1	LN:933200
+ at SQ	SN:KI519889.1	LN:929221
+ at SQ	SN:KI519834.1	LN:925248
+ at SQ	SN:KI519864.1	LN:922375
+ at SQ	SN:KI519867.1	LN:921651
+ at SQ	SN:KI519863.1	LN:920975
+ at SQ	SN:KI519869.1	LN:914213
+ at SQ	SN:KI519870.1	LN:912190
+ at SQ	SN:KI519873.1	LN:910789
+ at SQ	SN:KI519882.1	LN:902355
+ at SQ	SN:KI519886.1	LN:900483
+ at SQ	SN:KI519879.1	LN:894957
+ at SQ	SN:KI519878.1	LN:891046
+ at SQ	SN:KI519880.1	LN:890306
+ at SQ	SN:KI519909.1	LN:884389
+ at SQ	SN:KI519907.1	LN:883781
+ at SQ	SN:KI519933.1	LN:882922
+ at SQ	SN:KI519888.1	LN:875738
+ at SQ	SN:KI519881.1	LN:874553
+ at SQ	SN:KI519883.1	LN:873715
+ at SQ	SN:KI519884.1	LN:870982
+ at SQ	SN:KI519668.1	LN:869747
+ at SQ	SN:KI519885.1	LN:869286
+ at SQ	SN:KI519887.1	LN:864056
+ at SQ	SN:KI519898.1	LN:863864
+ at SQ	SN:KI519904.1	LN:853971
+ at SQ	SN:KI519890.1	LN:852193
+ at SQ	SN:KI519910.1	LN:849445
+ at SQ	SN:KI519806.1	LN:848400
+ at SQ	SN:KI519891.1	LN:842662
+ at SQ	SN:KI519892.1	LN:827976
+ at SQ	SN:KI519895.1	LN:822168
+ at SQ	SN:KI519897.1	LN:822165
+ at SQ	SN:KI519894.1	LN:818708
+ at SQ	SN:KI519899.1	LN:813829
+ at SQ	SN:KI519893.1	LN:812624
+ at SQ	SN:KI519902.1	LN:807081
+ at SQ	SN:KI519906.1	LN:803884
+ at SQ	SN:KI519896.1	LN:797563
+ at SQ	SN:KI519901.1	LN:796020
+ at SQ	SN:KI519914.1	LN:788024
+ at SQ	SN:KI519735.1	LN:785736
+ at SQ	SN:KI519912.1	LN:778065
+ at SQ	SN:KI519918.1	LN:777749
+ at SQ	SN:KI519903.1	LN:775132
+ at SQ	SN:KI519908.1	LN:771799
+ at SQ	SN:KI519900.1	LN:771364
+ at SQ	SN:KI519965.1	LN:771059
+ at SQ	SN:KI519905.1	LN:767762
+ at SQ	SN:KI519917.1	LN:765758
+ at SQ	SN:KI519927.1	LN:761915
+ at SQ	SN:KI519775.1	LN:760855
+ at SQ	SN:KI519928.1	LN:759973
+ at SQ	SN:KI519711.1	LN:755634
+ at SQ	SN:KI519949.1	LN:754338
+ at SQ	SN:KI519922.1	LN:754001
+ at SQ	SN:KI519913.1	LN:753778
+ at SQ	SN:KI519915.1	LN:752597
+ at SQ	SN:KI519920.1	LN:749598
+ at SQ	SN:KI519938.1	LN:745602
+ at SQ	SN:KI519919.1	LN:742264
+ at SQ	SN:KI519929.1	LN:738552
+ at SQ	SN:KI519962.1	LN:735966
+ at SQ	SN:KI519916.1	LN:735135
+ at SQ	SN:KI519930.1	LN:726307
+ at SQ	SN:KI519921.1	LN:726227
+ at SQ	SN:KI519773.1	LN:719481
+ at SQ	SN:KI519953.1	LN:716867
+ at SQ	SN:KI519932.1	LN:707630
+ at SQ	SN:KI519940.1	LN:705928
+ at SQ	SN:KI519939.1	LN:700049
+ at SQ	SN:KI519931.1	LN:696527
+ at SQ	SN:KI519948.1	LN:691795
+ at SQ	SN:KI519954.1	LN:691586
+ at SQ	SN:KI519961.1	LN:687448
+ at SQ	SN:KI519951.1	LN:685491
+ at SQ	SN:KI519943.1	LN:684417
+ at SQ	SN:KI519941.1	LN:678485
+ at SQ	SN:KI519942.1	LN:672617
+ at SQ	SN:KI519947.1	LN:668769
+ at SQ	SN:KI519956.1	LN:664594
+ at SQ	SN:KI519944.1	LN:664082
+ at SQ	SN:KI519832.1	LN:662663
+ at SQ	SN:KI519989.1	LN:662588
+ at SQ	SN:KI519946.1	LN:660346
+ at SQ	SN:KI519950.1	LN:659193
+ at SQ	SN:KI519945.1	LN:658969
+ at SQ	SN:KI519955.1	LN:654438
+ at SQ	SN:KI519952.1	LN:653361
+ at SQ	SN:KI519960.1	LN:642004
+ at SQ	SN:KI519958.1	LN:638882
+ at SQ	SN:KI519971.1	LN:633982
+ at SQ	SN:KI519957.1	LN:630528
+ at SQ	SN:KI519988.1	LN:627464
+ at SQ	SN:KI520029.1	LN:626045
+ at SQ	SN:KI519959.1	LN:625887
+ at SQ	SN:KI519970.1	LN:622852
+ at SQ	SN:KI519966.1	LN:619930
+ at SQ	SN:KI519963.1	LN:609584
+ at SQ	SN:KI519978.1	LN:607914
+ at SQ	SN:KI519984.1	LN:605445
+ at SQ	SN:KI519964.1	LN:603058
+ at SQ	SN:KI519968.1	LN:602535
+ at SQ	SN:KI519975.1	LN:600300
+ at SQ	SN:KI519967.1	LN:596463
+ at SQ	SN:KI519974.1	LN:588339
+ at SQ	SN:KI519969.1	LN:583331
+ at SQ	SN:KI519992.1	LN:581546
+ at SQ	SN:KI519977.1	LN:579885
+ at SQ	SN:KI520006.1	LN:576246
+ at SQ	SN:KI519986.1	LN:575316
+ at SQ	SN:KI519972.1	LN:571581
+ at SQ	SN:KI519980.1	LN:568648
+ at SQ	SN:KI519973.1	LN:568369
+ at SQ	SN:KI519981.1	LN:566801
+ at SQ	SN:KI519996.1	LN:565380
+ at SQ	SN:KI519991.1	LN:563587
+ at SQ	SN:KI519998.1	LN:560316
+ at SQ	SN:KI519976.1	LN:559898
+ at SQ	SN:KI519982.1	LN:559835
+ at SQ	SN:KI519995.1	LN:559258
+ at SQ	SN:KI519985.1	LN:557415
+ at SQ	SN:KI519979.1	LN:555766
+ at SQ	SN:KI520014.1	LN:553579
+ at SQ	SN:KI520020.1	LN:549452
+ at SQ	SN:KI519983.1	LN:547823
+ at SQ	SN:KI520035.1	LN:543115
+ at SQ	SN:KI519994.1	LN:543031
+ at SQ	SN:KI519990.1	LN:540785
+ at SQ	SN:KI520004.1	LN:535403
+ at SQ	SN:KI520008.1	LN:534882
+ at SQ	SN:KI520009.1	LN:534642
+ at SQ	SN:KI519987.1	LN:532583
+ at SQ	SN:KI519993.1	LN:530512
+ at SQ	SN:KI520010.1	LN:529360
+ at SQ	SN:KI520001.1	LN:529284
+ at SQ	SN:KI520007.1	LN:528357
+ at SQ	SN:KI520000.1	LN:525057
+ at SQ	SN:KI519877.1	LN:523006
+ at SQ	SN:KI520032.1	LN:522705
+ at SQ	SN:KI519999.1	LN:521480
+ at SQ	SN:KI520034.1	LN:520491
+ at SQ	SN:KI520043.1	LN:519751
+ at SQ	SN:KI519836.1	LN:518977
+ at SQ	SN:KI519997.1	LN:518452
+ at SQ	SN:KI519695.1	LN:518063
+ at SQ	SN:KI519685.1	LN:514431
+ at SQ	SN:KI520018.1	LN:509616
+ at SQ	SN:KI520005.1	LN:507319
+ at SQ	SN:KI520030.1	LN:507239
+ at SQ	SN:KI520021.1	LN:506354
+ at SQ	SN:KI520039.1	LN:506306
+ at SQ	SN:KI519937.1	LN:505706
+ at SQ	SN:KI520051.1	LN:505600
+ at SQ	SN:KI520013.1	LN:505209
+ at SQ	SN:KI520087.1	LN:504423
+ at SQ	SN:KI520012.1	LN:502706
+ at SQ	SN:KI520016.1	LN:502101
+ at SQ	SN:KI520003.1	LN:493858
+ at SQ	SN:KI520002.1	LN:493657
+ at SQ	SN:KI520011.1	LN:482030
+ at SQ	SN:KI519935.1	LN:480924
+ at SQ	SN:KI520019.1	LN:476917
+ at SQ	SN:KI519857.1	LN:474583
+ at SQ	SN:KI520015.1	LN:473372
+ at SQ	SN:KI520027.1	LN:473005
+ at SQ	SN:KI520022.1	LN:470305
+ at SQ	SN:KI520024.1	LN:468697
+ at SQ	SN:KI520017.1	LN:466971
+ at SQ	SN:KI520026.1	LN:465720
+ at SQ	SN:KI520023.1	LN:463412
+ at SQ	SN:KI520059.1	LN:458122
+ at SQ	SN:KI520028.1	LN:454640
+ at SQ	SN:KI520045.1	LN:454046
+ at SQ	SN:KI520083.1	LN:453176
+ at SQ	SN:KI520070.1	LN:452620
+ at SQ	SN:KI520031.1	LN:450924
+ at SQ	SN:KI520025.1	LN:450637
+ at SQ	SN:KI520038.1	LN:448234
+ at SQ	SN:KI520062.1	LN:447699
+ at SQ	SN:KI520033.1	LN:447587
+ at SQ	SN:KI520080.1	LN:447015
+ at SQ	SN:KI520037.1	LN:446940
+ at SQ	SN:KI520041.1	LN:446192
+ at SQ	SN:KI520085.1	LN:440649
+ at SQ	SN:KI520081.1	LN:439641
+ at SQ	SN:KI519786.1	LN:439226
+ at SQ	SN:KI520050.1	LN:437507
+ at SQ	SN:KI520048.1	LN:437292
+ at SQ	SN:KI520036.1	LN:435694
+ at SQ	SN:KI520058.1	LN:435626
+ at SQ	SN:KI520046.1	LN:434190
+ at SQ	SN:KI520065.1	LN:430277
+ at SQ	SN:KI520057.1	LN:429902
+ at SQ	SN:KI519776.1	LN:427902
+ at SQ	SN:KI520113.1	LN:427709
+ at SQ	SN:KI520040.1	LN:427024
+ at SQ	SN:KI519837.1	LN:426656
+ at SQ	SN:KI520068.1	LN:425765
+ at SQ	SN:KI520074.1	LN:423533
+ at SQ	SN:KI520076.1	LN:423323
+ at SQ	SN:KI520082.1	LN:422639
+ at SQ	SN:KI520044.1	LN:422061
+ at SQ	SN:KI520042.1	LN:419721
+ at SQ	SN:KI520079.1	LN:419275
+ at SQ	SN:KI520061.1	LN:417825
+ at SQ	SN:KI520056.1	LN:417084
+ at SQ	SN:KI520047.1	LN:415443
+ at SQ	SN:KI520090.1	LN:413523
+ at SQ	SN:KI520049.1	LN:412000
+ at SQ	SN:KI520066.1	LN:410900
+ at SQ	SN:KI520060.1	LN:409490
+ at SQ	SN:KI520054.1	LN:409435
+ at SQ	SN:KI520052.1	LN:408866
+ at SQ	SN:KI520063.1	LN:407519
+ at SQ	SN:KI520091.1	LN:407022
+ at SQ	SN:KI520053.1	LN:406309
+ at SQ	SN:KI520172.1	LN:404925
+ at SQ	SN:KI520115.1	LN:404264
+ at SQ	SN:KI520055.1	LN:403415
+ at SQ	SN:KI520103.1	LN:400728
+ at SQ	SN:KI519876.1	LN:398940
+ at SQ	SN:KI520069.1	LN:398684
+ at SQ	SN:KI520077.1	LN:397753
+ at SQ	SN:KI519719.1	LN:396053
+ at SQ	SN:KI520067.1	LN:395666
+ at SQ	SN:KI520089.1	LN:389347
+ at SQ	SN:KI520064.1	LN:388264
+ at SQ	SN:KI520118.1	LN:387933
+ at SQ	SN:KI520084.1	LN:384971
+ at SQ	SN:KI520128.1	LN:384735
+ at SQ	SN:KI520073.1	LN:382847
+ at SQ	SN:KI520092.1	LN:382578
+ at SQ	SN:KI520072.1	LN:382531
+ at SQ	SN:KI520097.1	LN:382298
+ at SQ	SN:KI520095.1	LN:381882
+ at SQ	SN:KI520100.1	LN:381356
+ at SQ	SN:KI520071.1	LN:380422
+ at SQ	SN:KI520126.1	LN:378002
+ at SQ	SN:KI520102.1	LN:377144
+ at SQ	SN:KI520078.1	LN:377084
+ at SQ	SN:KI520088.1	LN:376007
+ at SQ	SN:KI520075.1	LN:375669
+ at SQ	SN:KI520110.1	LN:375366
+ at SQ	SN:KI520086.1	LN:375081
+ at SQ	SN:KI520108.1	LN:374458
+ at SQ	SN:KI519791.1	LN:373509
+ at SQ	SN:KI520101.1	LN:372465
+ at SQ	SN:KI520116.1	LN:371853
+ at SQ	SN:KI520122.1	LN:370636
+ at SQ	SN:KI519923.1	LN:368044
+ at SQ	SN:KI520131.1	LN:365234
+ at SQ	SN:KI520109.1	LN:364701
+ at SQ	SN:KI520107.1	LN:362761
+ at SQ	SN:KI520094.1	LN:361044
+ at SQ	SN:KI520093.1	LN:357061
+ at SQ	SN:KI520137.1	LN:355941
+ at SQ	SN:KI520099.1	LN:355574
+ at SQ	SN:KI520129.1	LN:355473
+ at SQ	SN:KI520098.1	LN:352742
+ at SQ	SN:KI520164.1	LN:352441
+ at SQ	SN:KI520121.1	LN:351959
+ at SQ	SN:KI520174.1	LN:351136
+ at SQ	SN:KI520139.1	LN:350348
+ at SQ	SN:KI520127.1	LN:349287
+ at SQ	SN:KI520142.1	LN:348601
+ at SQ	SN:KI519924.1	LN:348421
+ at SQ	SN:KI520114.1	LN:347693
+ at SQ	SN:KI520112.1	LN:347396
+ at SQ	SN:KI520156.1	LN:346606
+ at SQ	SN:KI520105.1	LN:346576
+ at SQ	SN:KI520096.1	LN:344468
+ at SQ	SN:KI520153.1	LN:342675
+ at SQ	SN:KI520157.1	LN:338025
+ at SQ	SN:KI520170.1	LN:336371
+ at SQ	SN:KI520140.1	LN:336194
+ at SQ	SN:KI520104.1	LN:335012
+ at SQ	SN:KI520106.1	LN:333405
+ at SQ	SN:KI520141.1	LN:326349
+ at SQ	SN:KI520162.1	LN:324406
+ at SQ	SN:KI520111.1	LN:322854
+ at SQ	SN:KI519833.1	LN:319746
+ at SQ	SN:KI520119.1	LN:319101
+ at SQ	SN:KI519771.1	LN:317676
+ at SQ	SN:KI520117.1	LN:317542
+ at SQ	SN:KI520173.1	LN:317477
+ at SQ	SN:KI520145.1	LN:313854
+ at SQ	SN:KI520143.1	LN:313238
+ at SQ	SN:KI520205.1	LN:313058
+ at SQ	SN:KI520130.1	LN:312863
+ at SQ	SN:KI520120.1	LN:311908
+ at SQ	SN:KI520151.1	LN:310662
+ at SQ	SN:KI520124.1	LN:310103
+ at SQ	SN:KI520154.1	LN:309997
+ at SQ	SN:KI520123.1	LN:309176
+ at SQ	SN:KI519925.1	LN:309090
+ at SQ	SN:KI520147.1	LN:309081
+ at SQ	SN:KI520125.1	LN:308575
+ at SQ	SN:KI520133.1	LN:300920
+ at SQ	SN:KI520180.1	LN:299290
+ at SQ	SN:KI520203.1	LN:299269
+ at SQ	SN:KI520132.1	LN:298778
+ at SQ	SN:KI520158.1	LN:295424
+ at SQ	SN:KI520194.1	LN:295397
+ at SQ	SN:KI520134.1	LN:291763
+ at SQ	SN:KI520179.1	LN:291680
+ at SQ	SN:KI520135.1	LN:291595
+ at SQ	SN:KI520136.1	LN:290460
+ at SQ	SN:KI520138.1	LN:289575
+ at SQ	SN:KI520169.1	LN:289567
+ at SQ	SN:KI520171.1	LN:288891
+ at SQ	SN:KI520233.1	LN:288862
+ at SQ	SN:KI520176.1	LN:287470
+ at SQ	SN:KI520187.1	LN:286838
+ at SQ	SN:KI520183.1	LN:286128
+ at SQ	SN:KI520167.1	LN:284188
+ at SQ	SN:KI520234.1	LN:282972
+ at SQ	SN:KI520144.1	LN:281831
+ at SQ	SN:KI520168.1	LN:281631
+ at SQ	SN:KI520148.1	LN:281439
+ at SQ	SN:KI520146.1	LN:280126
+ at SQ	SN:KI520216.1	LN:279272
+ at SQ	SN:KI520166.1	LN:279222
+ at SQ	SN:KI520160.1	LN:278575
+ at SQ	SN:KI520149.1	LN:278352
+ at SQ	SN:KI520165.1	LN:276949
+ at SQ	SN:KI520152.1	LN:275923
+ at SQ	SN:KI520150.1	LN:275635
+ at SQ	SN:KI520159.1	LN:274370
+ at SQ	SN:KI520155.1	LN:274014
+ at SQ	SN:KI519926.1	LN:273463
+ at SQ	SN:KI520188.1	LN:272857
+ at SQ	SN:KI519747.1	LN:272820
+ at SQ	SN:KI520211.1	LN:271927
+ at SQ	SN:KI520241.1	LN:271584
+ at SQ	SN:KI520163.1	LN:271045
+ at SQ	SN:KI520161.1	LN:270610
+ at SQ	SN:KI520182.1	LN:270233
+ at SQ	SN:KI520221.1	LN:268699
+ at SQ	SN:KI520189.1	LN:268692
+ at SQ	SN:KI520195.1	LN:267267
+ at SQ	SN:KI520190.1	LN:263297
+ at SQ	SN:KI520191.1	LN:261118
+ at SQ	SN:KI520181.1	LN:259438
+ at SQ	SN:KI520201.1	LN:258131
+ at SQ	SN:KI520178.1	LN:256862
+ at SQ	SN:KI520175.1	LN:255093
+ at SQ	SN:KI520274.1	LN:251942
+ at SQ	SN:KI520177.1	LN:251228
+ at SQ	SN:KI520254.1	LN:249901
+ at SQ	SN:KI520200.1	LN:249189
+ at SQ	SN:KI520184.1	LN:248793
+ at SQ	SN:KI520227.1	LN:248699
+ at SQ	SN:KI520207.1	LN:248653
+ at SQ	SN:KI520206.1	LN:247634
+ at SQ	SN:KI520213.1	LN:247574
+ at SQ	SN:KI520223.1	LN:247389
+ at SQ	SN:KI520220.1	LN:246891
+ at SQ	SN:KI520232.1	LN:244918
+ at SQ	SN:KI520193.1	LN:243540
+ at SQ	SN:KI520218.1	LN:243011
+ at SQ	SN:KI520246.1	LN:242798
+ at SQ	SN:KI520185.1	LN:242026
+ at SQ	SN:KI520202.1	LN:240588
+ at SQ	SN:KI520222.1	LN:240514
+ at SQ	SN:KI520242.1	LN:240488
+ at SQ	SN:KI520250.1	LN:240157
+ at SQ	SN:KI519835.1	LN:239066
+ at SQ	SN:KI520199.1	LN:238313
+ at SQ	SN:KI520186.1	LN:237782
+ at SQ	SN:KI520208.1	LN:234779
+ at SQ	SN:KI520210.1	LN:233258
+ at SQ	SN:KI520240.1	LN:232981
+ at SQ	SN:KI519805.1	LN:232184
+ at SQ	SN:KI520272.1	LN:231816
+ at SQ	SN:KI520298.1	LN:231714
+ at SQ	SN:KI520280.1	LN:230535
+ at SQ	SN:KI520224.1	LN:230024
+ at SQ	SN:KI520192.1	LN:229931
+ at SQ	SN:KI520209.1	LN:228034
+ at SQ	SN:KI520214.1	LN:227180
+ at SQ	SN:KI520198.1	LN:226910
+ at SQ	SN:KI520212.1	LN:225548
+ at SQ	SN:KI520286.1	LN:225408
+ at SQ	SN:KI520204.1	LN:224843
+ at SQ	SN:KI520337.1	LN:224588
+ at SQ	SN:KI520238.1	LN:224070
+ at SQ	SN:KI520251.1	LN:221851
+ at SQ	SN:KI520262.1	LN:221724
+ at SQ	SN:KI520197.1	LN:221577
+ at SQ	SN:KI520196.1	LN:221011
+ at SQ	SN:KI520263.1	LN:219963
+ at SQ	SN:AYCK01029288.1	LN:217642
+ at SQ	SN:KI520230.1	LN:215567
+ at SQ	SN:KI520239.1	LN:214331
+ at SQ	SN:KI520248.1	LN:213703
+ at SQ	SN:KI520226.1	LN:213676
+ at SQ	SN:KI520252.1	LN:212215
+ at SQ	SN:KI520215.1	LN:210585
+ at SQ	SN:KI520236.1	LN:210066
+ at SQ	SN:KI520255.1	LN:209853
+ at SQ	SN:KI520217.1	LN:209494
+ at SQ	SN:KI520294.1	LN:208447
+ at SQ	SN:KI520219.1	LN:207366
+ at SQ	SN:KI520287.1	LN:207131
+ at SQ	SN:KI520244.1	LN:207082
+ at SQ	SN:KI520225.1	LN:206357
+ at SQ	SN:KI520275.1	LN:205121
+ at SQ	SN:KI520229.1	LN:205104
+ at SQ	SN:KI519934.1	LN:204207
+ at SQ	SN:KI520293.1	LN:203594
+ at SQ	SN:KI520228.1	LN:203207
+ at SQ	SN:KI520253.1	LN:201804
+ at SQ	SN:KI520257.1	LN:201040
+ at SQ	SN:KI520290.1	LN:200991
+ at SQ	SN:KI520243.1	LN:200799
+ at SQ	SN:KI520384.1	LN:199246
+ at SQ	SN:KI520235.1	LN:199095
+ at SQ	SN:KI520307.1	LN:198729
+ at SQ	SN:KI520258.1	LN:198661
+ at SQ	SN:KI520231.1	LN:196868
+ at SQ	SN:KI520266.1	LN:196255
+ at SQ	SN:KI520269.1	LN:195608
+ at SQ	SN:KI520249.1	LN:194834
+ at SQ	SN:KI520277.1	LN:194531
+ at SQ	SN:KI520314.1	LN:193413
+ at SQ	SN:KI520295.1	LN:193130
+ at SQ	SN:KI520247.1	LN:191670
+ at SQ	SN:KI520279.1	LN:191289
+ at SQ	SN:KI520259.1	LN:190194
+ at SQ	SN:KI520237.1	LN:189929
+ at SQ	SN:KI520281.1	LN:189718
+ at SQ	SN:KI520324.1	LN:187651
+ at SQ	SN:KI520302.1	LN:186984
+ at SQ	SN:KI520264.1	LN:186601
+ at SQ	SN:KI520256.1	LN:186297
+ at SQ	SN:KI519936.1	LN:185566
+ at SQ	SN:AYCK01029289.1	LN:185159
+ at SQ	SN:KI520267.1	LN:185035
+ at SQ	SN:KI520245.1	LN:184504
+ at SQ	SN:KI520305.1	LN:182977
+ at SQ	SN:KI520348.1	LN:181425
+ at SQ	SN:KI520316.1	LN:181331
+ at SQ	SN:KI520319.1	LN:180653
+ at SQ	SN:KI520261.1	LN:179840
+ at SQ	SN:KI520289.1	LN:179371
+ at SQ	SN:KI520273.1	LN:178588
+ at SQ	SN:KI520410.1	LN:175697
+ at SQ	SN:KI520260.1	LN:174977
+ at SQ	SN:KI520285.1	LN:174321
+ at SQ	SN:KI520265.1	LN:174077
+ at SQ	SN:KI520336.1	LN:173929
+ at SQ	SN:KI520271.1	LN:173542
+ at SQ	SN:KI520270.1	LN:173310
+ at SQ	SN:KI520282.1	LN:173006
+ at SQ	SN:KI520292.1	LN:171933
+ at SQ	SN:KI520268.1	LN:171865
+ at SQ	SN:KI520296.1	LN:170665
+ at SQ	SN:KI520306.1	LN:170557
+ at SQ	SN:KI520291.1	LN:169956
+ at SQ	SN:KI520308.1	LN:169428
+ at SQ	SN:KI520330.1	LN:168879
+ at SQ	SN:KI520299.1	LN:168403
+ at SQ	SN:KI520300.1	LN:167961
+ at SQ	SN:KI520359.1	LN:167673
+ at SQ	SN:KI520315.1	LN:167546
+ at SQ	SN:KI520284.1	LN:167249
+ at SQ	SN:KI519686.1	LN:165893
+ at SQ	SN:KI520288.1	LN:165557
+ at SQ	SN:KI519804.1	LN:165389
+ at SQ	SN:KI519859.1	LN:164080
+ at SQ	SN:KI520724.1	LN:163645
+ at SQ	SN:KI520276.1	LN:163523
+ at SQ	SN:KI520311.1	LN:163180
+ at SQ	SN:KI520278.1	LN:162630
+ at SQ	SN:KI520309.1	LN:162129
+ at SQ	SN:KI520313.1	LN:160864
+ at SQ	SN:KI520452.1	LN:160818
+ at SQ	SN:KI520283.1	LN:160675
+ at SQ	SN:KI520321.1	LN:160374
+ at SQ	SN:KI519697.1	LN:159964
+ at SQ	SN:KI520340.1	LN:159394
+ at SQ	SN:KI520332.1	LN:159301
+ at SQ	SN:KI520322.1	LN:158481
+ at SQ	SN:KI520301.1	LN:157826
+ at SQ	SN:AYCK01023213.1	LN:157164
+ at SQ	SN:KI520326.1	LN:156492
+ at SQ	SN:KI520369.1	LN:156405
+ at SQ	SN:KI520342.1	LN:155957
+ at SQ	SN:KI519772.1	LN:154583
+ at SQ	SN:KI520318.1	LN:153756
+ at SQ	SN:KI520418.1	LN:153448
+ at SQ	SN:KI520297.1	LN:153401
+ at SQ	SN:KI520327.1	LN:153009
+ at SQ	SN:KI520368.1	LN:151711
+ at SQ	SN:KI520382.1	LN:151293
+ at SQ	SN:KI520370.1	LN:149541
+ at SQ	SN:KI520317.1	LN:149329
+ at SQ	SN:KI520323.1	LN:149300
+ at SQ	SN:KI520303.1	LN:147834
+ at SQ	SN:KI520304.1	LN:147612
+ at SQ	SN:KI520312.1	LN:142288
+ at SQ	SN:KI520372.1	LN:140985
+ at SQ	SN:KI520377.1	LN:140944
+ at SQ	SN:KI520310.1	LN:140894
+ at SQ	SN:KI520394.1	LN:140891
+ at SQ	SN:KI520353.1	LN:140746
+ at SQ	SN:KI520329.1	LN:140510
+ at SQ	SN:KI520325.1	LN:139765
+ at SQ	SN:KI520335.1	LN:139405
+ at SQ	SN:KI520391.1	LN:139209
+ at SQ	SN:KI520351.1	LN:139188
+ at SQ	SN:KI520379.1	LN:139157
+ at SQ	SN:KI519660.1	LN:139139
+ at SQ	SN:KI520338.1	LN:138761
+ at SQ	SN:KI520333.1	LN:137260
+ at SQ	SN:KI520389.1	LN:135924
+ at SQ	SN:KI520356.1	LN:134320
+ at SQ	SN:KI520397.1	LN:134207
+ at SQ	SN:KI520366.1	LN:133966
+ at SQ	SN:KI520354.1	LN:133775
+ at SQ	SN:KI520320.1	LN:133607
+ at SQ	SN:KI520383.1	LN:133534
+ at SQ	SN:KI520451.1	LN:133445
+ at SQ	SN:KI519858.1	LN:133015
+ at SQ	SN:KI519633.1	LN:132715
+ at SQ	SN:KI520347.1	LN:132454
+ at SQ	SN:KI520421.1	LN:132140
+ at SQ	SN:KI520331.1	LN:132060
+ at SQ	SN:KI520346.1	LN:131209
+ at SQ	SN:KI520357.1	LN:130674
+ at SQ	SN:KI520349.1	LN:130030
+ at SQ	SN:KI520381.1	LN:129537
+ at SQ	SN:KI520341.1	LN:129054
+ at SQ	SN:KI519720.1	LN:129031
+ at SQ	SN:KI520388.1	LN:128779
+ at SQ	SN:KI520328.1	LN:128571
+ at SQ	SN:KI520402.1	LN:127597
+ at SQ	SN:KI520395.1	LN:127227
+ at SQ	SN:KI520364.1	LN:127112
+ at SQ	SN:KI520339.1	LN:127070
+ at SQ	SN:KI520358.1	LN:127049
+ at SQ	SN:KI520361.1	LN:126701
+ at SQ	SN:KI520401.1	LN:126509
+ at SQ	SN:KI520398.1	LN:126246
+ at SQ	SN:KI520345.1	LN:125722
+ at SQ	SN:KI520334.1	LN:125567
+ at SQ	SN:KI520362.1	LN:124729
+ at SQ	SN:KI520367.1	LN:122791
+ at SQ	SN:KI520363.1	LN:122676
+ at SQ	SN:KI520424.1	LN:122296
+ at SQ	SN:KI520343.1	LN:122112
+ at SQ	SN:KI520390.1	LN:121529
+ at SQ	SN:KI520344.1	LN:121002
+ at SQ	SN:KI520477.1	LN:120989
+ at SQ	SN:KI520392.1	LN:120670
+ at SQ	SN:KI520375.1	LN:120570
+ at SQ	SN:KI520396.1	LN:120194
+ at SQ	SN:KI520352.1	LN:120067
+ at SQ	SN:KI520433.1	LN:119929
+ at SQ	SN:KI520360.1	LN:119459
+ at SQ	SN:KI520371.1	LN:119288
+ at SQ	SN:KI520350.1	LN:117786
+ at SQ	SN:KI520449.1	LN:117374
+ at SQ	SN:KI520439.1	LN:116931
+ at SQ	SN:KI520365.1	LN:116892
+ at SQ	SN:KI520409.1	LN:116268
+ at SQ	SN:KI520456.1	LN:116061
+ at SQ	SN:KI520407.1	LN:115525
+ at SQ	SN:KI520461.1	LN:115253
+ at SQ	SN:KI520355.1	LN:115220
+ at SQ	SN:KI520386.1	LN:115085
+ at SQ	SN:KI520420.1	LN:113501
+ at SQ	SN:KI520417.1	LN:113100
+ at SQ	SN:KI520440.1	LN:112599
+ at SQ	SN:KI520426.1	LN:111581
+ at SQ	SN:KI520486.1	LN:111072
+ at SQ	SN:KI520436.1	LN:110802
+ at SQ	SN:KI520469.1	LN:109903
+ at SQ	SN:KI520496.1	LN:109297
+ at SQ	SN:KI520373.1	LN:108999
+ at SQ	SN:KI520376.1	LN:108683
+ at SQ	SN:KI520454.1	LN:108439
+ at SQ	SN:KI520393.1	LN:108389
+ at SQ	SN:KI520422.1	LN:108307
+ at SQ	SN:KI520378.1	LN:108081
+ at SQ	SN:KI520380.1	LN:107822
+ at SQ	SN:KI520399.1	LN:107590
+ at SQ	SN:KI520374.1	LN:106847
+ at SQ	SN:KI520405.1	LN:106386
+ at SQ	SN:KI520404.1	LN:106151
+ at SQ	SN:KI520457.1	LN:105623
+ at SQ	SN:KI520387.1	LN:105290
+ at SQ	SN:KI520419.1	LN:104470
+ at SQ	SN:KI520411.1	LN:104424
+ at SQ	SN:KI520385.1	LN:104321
+ at SQ	SN:KI520403.1	LN:104231
+ at SQ	SN:KI520406.1	LN:103581
+ at SQ	SN:KI520479.1	LN:102530
+ at SQ	SN:KI520465.1	LN:102402
+ at SQ	SN:KI520423.1	LN:101899
+ at SQ	SN:KI520520.1	LN:101730
+ at SQ	SN:KI520400.1	LN:101182
+ at SQ	SN:KI520414.1	LN:100961
+ at SQ	SN:KI520478.1	LN:99711
+ at SQ	SN:KI520455.1	LN:99659
+ at SQ	SN:KI520468.1	LN:99325
+ at SQ	SN:KI520412.1	LN:99202
+ at SQ	SN:KI520471.1	LN:98675
+ at SQ	SN:KI520415.1	LN:98626
+ at SQ	SN:KI520442.1	LN:98356
+ at SQ	SN:KI520437.1	LN:98346
+ at SQ	SN:KI520408.1	LN:97627
+ at SQ	SN:KI520416.1	LN:97544
+ at SQ	SN:KI520519.1	LN:96699
+ at SQ	SN:KI520427.1	LN:96482
+ at SQ	SN:KI520431.1	LN:96318
+ at SQ	SN:KI520428.1	LN:96212
+ at SQ	SN:KI520434.1	LN:96026
+ at SQ	SN:KI520480.1	LN:95852
+ at SQ	SN:KI520487.1	LN:95657
+ at SQ	SN:KI520435.1	LN:95488
+ at SQ	SN:KI520413.1	LN:95283
+ at SQ	SN:KI520438.1	LN:94996
+ at SQ	SN:KI520513.1	LN:94967
+ at SQ	SN:KI520443.1	LN:93120
+ at SQ	SN:KI520518.1	LN:92751
+ at SQ	SN:KI520446.1	LN:92538
+ at SQ	SN:KI520441.1	LN:92004
+ at SQ	SN:KI520453.1	LN:91818
+ at SQ	SN:KI520425.1	LN:91762
+ at SQ	SN:KI520444.1	LN:91472
+ at SQ	SN:KI520511.1	LN:91339
+ at SQ	SN:KI520430.1	LN:90531
+ at SQ	SN:KI520450.1	LN:90445
+ at SQ	SN:KI520432.1	LN:90088
+ at SQ	SN:KI520445.1	LN:90047
+ at SQ	SN:KI520429.1	LN:90004
+ at SQ	SN:KI520492.1	LN:89648
+ at SQ	SN:KI520460.1	LN:89178
+ at SQ	SN:KI520475.1	LN:88565
+ at SQ	SN:KI520791.1	LN:88224
+ at SQ	SN:KI520503.1	LN:88012
+ at SQ	SN:KI520551.1	LN:87789
+ at SQ	SN:KI520545.1	LN:87455
+ at SQ	SN:KI520448.1	LN:87094
+ at SQ	SN:KI520841.1	LN:86339
+ at SQ	SN:AYCK01025055.1	LN:86337
+ at SQ	SN:KI520463.1	LN:86280
+ at SQ	SN:KI520481.1	LN:85987
+ at SQ	SN:KI520447.1	LN:85878
+ at SQ	SN:KI520515.1	LN:85607
+ at SQ	SN:KI520548.1	LN:84918
+ at SQ	SN:KI520472.1	LN:84705
+ at SQ	SN:KI520464.1	LN:83744
+ at SQ	SN:KI520462.1	LN:83712
+ at SQ	SN:KI520488.1	LN:82986
+ at SQ	SN:KI520485.1	LN:82809
+ at SQ	SN:KI520459.1	LN:82396
+ at SQ	SN:KI520470.1	LN:82377
+ at SQ	SN:KI520533.1	LN:81810
+ at SQ	SN:KI520473.1	LN:81802
+ at SQ	SN:KI520517.1	LN:81704
+ at SQ	SN:KI520541.1	LN:80906
+ at SQ	SN:KI520494.1	LN:80886
+ at SQ	SN:KI520467.1	LN:80771
+ at SQ	SN:KI520483.1	LN:80479
+ at SQ	SN:KI520497.1	LN:79444
+ at SQ	SN:KI520495.1	LN:78984
+ at SQ	SN:KI520466.1	LN:78140
+ at SQ	SN:KI520589.1	LN:77810
+ at SQ	SN:KI520474.1	LN:77377
+ at SQ	SN:KI520535.1	LN:77059
+ at SQ	SN:KI520560.1	LN:76857
+ at SQ	SN:KI520500.1	LN:76674
+ at SQ	SN:KI520572.1	LN:76339
+ at SQ	SN:KI520482.1	LN:76061
+ at SQ	SN:KI520576.1	LN:75724
+ at SQ	SN:KI520538.1	LN:75498
+ at SQ	SN:KI520590.1	LN:74966
+ at SQ	SN:KI520579.1	LN:74809
+ at SQ	SN:KI520484.1	LN:74740
+ at SQ	SN:KI520499.1	LN:74688
+ at SQ	SN:KI520491.1	LN:74548
+ at SQ	SN:KI520600.1	LN:74083
+ at SQ	SN:KI520476.1	LN:73888
+ at SQ	SN:KI520550.1	LN:73756
+ at SQ	SN:KI520507.1	LN:73618
+ at SQ	SN:KI520512.1	LN:73616
+ at SQ	SN:KI520559.1	LN:73352
+ at SQ	SN:KI520567.1	LN:72658
+ at SQ	SN:KI520458.1	LN:72654
+ at SQ	SN:KI520498.1	LN:72622
+ at SQ	SN:KI520490.1	LN:72463
+ at SQ	SN:KI520561.1	LN:72240
+ at SQ	SN:KI520493.1	LN:70882
+ at SQ	SN:KI520522.1	LN:70750
+ at SQ	SN:KI520506.1	LN:70487
+ at SQ	SN:KI520526.1	LN:70369
+ at SQ	SN:KI520504.1	LN:69925
+ at SQ	SN:KI520532.1	LN:69904
+ at SQ	SN:KI520489.1	LN:69751
+ at SQ	SN:KI520570.1	LN:69704
+ at SQ	SN:KI520501.1	LN:69418
+ at SQ	SN:KI520528.1	LN:69131
+ at SQ	SN:KI520505.1	LN:69101
+ at SQ	SN:KI520502.1	LN:69082
+ at SQ	SN:KI520537.1	LN:68929
+ at SQ	SN:KI520521.1	LN:68623
+ at SQ	SN:KI520527.1	LN:68601
+ at SQ	SN:KI520584.1	LN:68201
+ at SQ	SN:AYCK01029290.1	LN:68042
+ at SQ	SN:KI520529.1	LN:68026
+ at SQ	SN:KI520508.1	LN:67959
+ at SQ	SN:KI520622.1	LN:67573
+ at SQ	SN:KI520652.1	LN:67563
+ at SQ	SN:KI520651.1	LN:67474
+ at SQ	SN:KI520568.1	LN:67093
+ at SQ	SN:KI520514.1	LN:66919
+ at SQ	SN:KI520531.1	LN:66546
+ at SQ	SN:KI520516.1	LN:66414
+ at SQ	SN:KI520542.1	LN:66195
+ at SQ	SN:KI520540.1	LN:65469
+ at SQ	SN:KI520509.1	LN:65172
+ at SQ	SN:KI520631.1	LN:64877
+ at SQ	SN:KI520534.1	LN:64651
+ at SQ	SN:KI520555.1	LN:64502
+ at SQ	SN:KI520510.1	LN:64478
+ at SQ	SN:KI520525.1	LN:63751
+ at SQ	SN:KI520546.1	LN:63185
+ at SQ	SN:KI520549.1	LN:62810
+ at SQ	SN:KI520523.1	LN:62653
+ at SQ	SN:KI520536.1	LN:62634
+ at SQ	SN:KI520524.1	LN:62487
+ at SQ	SN:KI520530.1	LN:60693
+ at SQ	SN:KI520630.1	LN:60407
+ at SQ	SN:KI520592.1	LN:60319
+ at SQ	SN:KI520543.1	LN:59652
+ at SQ	SN:KI520539.1	LN:58666
+ at SQ	SN:KI520558.1	LN:58616
+ at SQ	SN:KI520544.1	LN:58165
+ at SQ	SN:KI520547.1	LN:57681
+ at SQ	SN:KI520615.1	LN:57478
+ at SQ	SN:KI520694.1	LN:57021
+ at SQ	SN:KI520659.1	LN:56766
+ at SQ	SN:KI520564.1	LN:56492
+ at SQ	SN:KI520554.1	LN:56184
+ at SQ	SN:KI520553.1	LN:56049
+ at SQ	SN:KI520573.1	LN:55853
+ at SQ	SN:KI520556.1	LN:55538
+ at SQ	SN:KI520591.1	LN:55523
+ at SQ	SN:KI520552.1	LN:55081
+ at SQ	SN:KI520683.1	LN:55008
+ at SQ	SN:KI520730.1	LN:54928
+ at SQ	SN:KI520654.1	LN:54908
+ at SQ	SN:KI520577.1	LN:54635
+ at SQ	SN:KI520687.1	LN:53728
+ at SQ	SN:KI520672.1	LN:53587
+ at SQ	SN:KI520578.1	LN:53492
+ at SQ	SN:KI520800.1	LN:53469
+ at SQ	SN:KI520827.1	LN:53448
+ at SQ	SN:KI520571.1	LN:53397
+ at SQ	SN:KI520919.1	LN:53191
+ at SQ	SN:KI520585.1	LN:53187
+ at SQ	SN:KI520566.1	LN:52626
+ at SQ	SN:KI520569.1	LN:52157
+ at SQ	SN:KI520979.1	LN:51626
+ at SQ	SN:KI520583.1	LN:51445
+ at SQ	SN:KI520562.1	LN:51347
+ at SQ	SN:KI520557.1	LN:51080
+ at SQ	SN:KI520602.1	LN:51033
+ at SQ	SN:KI520670.1	LN:50996
+ at SQ	SN:KI520597.1	LN:50594
+ at SQ	SN:KI520563.1	LN:50552
+ at SQ	SN:KI520978.1	LN:50518
+ at SQ	SN:KI520946.1	LN:50498
+ at SQ	SN:KI520588.1	LN:50438
+ at SQ	SN:KI520580.1	LN:50042
+ at SQ	SN:KI520822.1	LN:49815
+ at SQ	SN:KI520565.1	LN:49551
+ at SQ	SN:KI520587.1	LN:49299
+ at SQ	SN:KI520581.1	LN:49031
+ at SQ	SN:KI520802.1	LN:48958
+ at SQ	SN:KI521064.1	LN:48871
+ at SQ	SN:KI520685.1	LN:48757
+ at SQ	SN:KI520786.1	LN:48721
+ at SQ	SN:KI520605.1	LN:48703
+ at SQ	SN:KI520575.1	LN:48362
+ at SQ	SN:KI520818.1	LN:48304
+ at SQ	SN:KI520612.1	LN:48258
+ at SQ	SN:KI520574.1	LN:46900
+ at SQ	SN:KI520595.1	LN:46728
+ at SQ	SN:KI520955.1	LN:46694
+ at SQ	SN:KI520582.1	LN:46616
+ at SQ	SN:KI520586.1	LN:46205
+ at SQ	SN:KI520596.1	LN:46128
+ at SQ	SN:KI520599.1	LN:45894
+ at SQ	SN:KI520669.1	LN:45724
+ at SQ	SN:KI520635.1	LN:45266
+ at SQ	SN:KI520610.1	LN:45133
+ at SQ	SN:KI520617.1	LN:45086
+ at SQ	SN:KI520598.1	LN:45084
+ at SQ	SN:KI520781.1	LN:44997
+ at SQ	SN:KI521144.1	LN:44961
+ at SQ	SN:KI520906.1	LN:44912
+ at SQ	SN:KI520834.1	LN:44752
+ at SQ	SN:AYCK01029291.1	LN:44628
+ at SQ	SN:KI520607.1	LN:44581
+ at SQ	SN:KI520601.1	LN:44163
+ at SQ	SN:KI520619.1	LN:44110
+ at SQ	SN:KI520606.1	LN:43996
+ at SQ	SN:KI520594.1	LN:43787
+ at SQ	SN:KI520614.1	LN:43774
+ at SQ	SN:KI520850.1	LN:43238
+ at SQ	SN:KI520608.1	LN:43134
+ at SQ	SN:KI520640.1	LN:43132
+ at SQ	SN:KI521049.1	LN:42975
+ at SQ	SN:KI520593.1	LN:42785
+ at SQ	SN:KI520609.1	LN:42703
+ at SQ	SN:KI520618.1	LN:42655
+ at SQ	SN:KI520604.1	LN:42365
+ at SQ	SN:KI520700.1	LN:42092
+ at SQ	SN:KI520633.1	LN:42043
+ at SQ	SN:KI521162.1	LN:42033
+ at SQ	SN:KI521316.1	LN:41581
+ at SQ	SN:KI520623.1	LN:41501
+ at SQ	SN:KI520624.1	LN:41007
+ at SQ	SN:KI520611.1	LN:40886
+ at SQ	SN:KI520603.1	LN:40715
+ at SQ	SN:KI521143.1	LN:40673
+ at SQ	SN:KI520621.1	LN:40664
+ at SQ	SN:KI520790.1	LN:40496
+ at SQ	SN:KI520626.1	LN:40319
+ at SQ	SN:AYCK01029292.1	LN:39974
+ at SQ	SN:KI520639.1	LN:39905
+ at SQ	SN:KI520620.1	LN:39834
+ at SQ	SN:KI520613.1	LN:39701
+ at SQ	SN:KI520638.1	LN:39682
+ at SQ	SN:KI520871.1	LN:39637
+ at SQ	SN:AYCK01026491.1	LN:39627
+ at SQ	SN:AYCK01029293.1	LN:39302
+ at SQ	SN:KI520625.1	LN:39294
+ at SQ	SN:KI520616.1	LN:39126
+ at SQ	SN:KI520629.1	LN:39004
+ at SQ	SN:KI520632.1	LN:38926
+ at SQ	SN:KI520628.1	LN:38744
+ at SQ	SN:KI520627.1	LN:38464
+ at SQ	SN:KI520643.1	LN:38347
+ at SQ	SN:KI520636.1	LN:38230
+ at SQ	SN:KI520657.1	LN:38083
+ at SQ	SN:KI520634.1	LN:37541
+ at SQ	SN:AYCK01029294.1	LN:37038
+ at SQ	SN:KI520641.1	LN:36885
+ at SQ	SN:AYCK01029295.1	LN:36763
+ at SQ	SN:KI520655.1	LN:36468
+ at SQ	SN:KI520645.1	LN:36382
+ at SQ	SN:KI520647.1	LN:36270
+ at SQ	SN:KI520637.1	LN:36264
+ at SQ	SN:KI520644.1	LN:36138
+ at SQ	SN:AYCK01029296.1	LN:35975
+ at SQ	SN:AYCK01026643.1	LN:35792
+ at SQ	SN:KI520663.1	LN:35771
+ at SQ	SN:KI520646.1	LN:35763
+ at SQ	SN:KI520681.1	LN:35676
+ at SQ	SN:KI520649.1	LN:35024
+ at SQ	SN:AYCK01029297.1	LN:34617
+ at SQ	SN:KI520642.1	LN:34540
+ at SQ	SN:KI520665.1	LN:34320
+ at SQ	SN:AYCK01029298.1	LN:34301
+ at SQ	SN:KI520648.1	LN:34270
+ at SQ	SN:KI520661.1	LN:34248
+ at SQ	SN:KI520677.1	LN:33994
+ at SQ	SN:KI520680.1	LN:33822
+ at SQ	SN:KI520650.1	LN:33767
+ at SQ	SN:KI520699.1	LN:33478
+ at SQ	SN:KI520697.1	LN:33048
+ at SQ	SN:AYCK01029299.1	LN:32913
+ at SQ	SN:KI520653.1	LN:32895
+ at SQ	SN:KI520695.1	LN:32619
+ at SQ	SN:KI520656.1	LN:32577
+ at SQ	SN:KI520666.1	LN:32406
+ at SQ	SN:KI520662.1	LN:32283
+ at SQ	SN:KI520660.1	LN:32247
+ at SQ	SN:AYCK01029300.1	LN:32186
+ at SQ	SN:KI520667.1	LN:32133
+ at SQ	SN:KI520658.1	LN:32033
+ at SQ	SN:KI520692.1	LN:31950
+ at SQ	SN:KI520696.1	LN:31568
+ at SQ	SN:KI520664.1	LN:31488
+ at SQ	SN:KI520675.1	LN:31455
+ at SQ	SN:KI520668.1	LN:31332
+ at SQ	SN:KI520673.1	LN:31210
+ at SQ	SN:KI520679.1	LN:31069
+ at SQ	SN:AYCK01029301.1	LN:31045
+ at SQ	SN:KI520688.1	LN:30992
+ at SQ	SN:KI520689.1	LN:30905
+ at SQ	SN:KI520701.1	LN:30864
+ at SQ	SN:KI520674.1	LN:30839
+ at SQ	SN:KI520693.1	LN:30740
+ at SQ	SN:AYCK01029302.1	LN:30691
+ at SQ	SN:AYCK01029303.1	LN:30551
+ at SQ	SN:KI520671.1	LN:30528
+ at SQ	SN:KI520707.1	LN:30249
+ at SQ	SN:KI520691.1	LN:30224
+ at SQ	SN:KI520676.1	LN:30218
+ at SQ	SN:KI520684.1	LN:30201
+ at SQ	SN:AYCK01026785.1	LN:30098
+ at SQ	SN:KI520722.1	LN:29992
+ at SQ	SN:KI520678.1	LN:29964
+ at SQ	SN:KI520682.1	LN:29753
+ at SQ	SN:AYCK01029304.1	LN:29654
+ at SQ	SN:AYCK01026801.1	LN:29513
+ at SQ	SN:KI520718.1	LN:29432
+ at SQ	SN:KI520686.1	LN:29164
+ at SQ	SN:AYCK01029305.1	LN:29145
+ at SQ	SN:KI520702.1	LN:29111
+ at SQ	SN:KI520709.1	LN:29026
+ at SQ	SN:KI520690.1	LN:29018
+ at SQ	SN:KI521081.1	LN:28845
+ at SQ	SN:AYCK01029306.1	LN:28822
+ at SQ	SN:KI520706.1	LN:28816
+ at SQ	SN:AYCK01029307.1	LN:28463
+ at SQ	SN:AYCK01029308.1	LN:28452
+ at SQ	SN:KI520721.1	LN:28367
+ at SQ	SN:KI520698.1	LN:28192
+ at SQ	SN:KI520756.1	LN:28165
+ at SQ	SN:KI520746.1	LN:28027
+ at SQ	SN:KI520703.1	LN:28000
+ at SQ	SN:KI520731.1	LN:27968
+ at SQ	SN:KI520736.1	LN:27822
+ at SQ	SN:AYCK01026880.1	LN:27790
+ at SQ	SN:KI520704.1	LN:27738
+ at SQ	SN:KI520713.1	LN:27715
+ at SQ	SN:KI520708.1	LN:27698
+ at SQ	SN:KI520705.1	LN:27570
+ at SQ	SN:KI520727.1	LN:27500
+ at SQ	SN:AYCK01029309.1	LN:27204
+ at SQ	SN:KI520710.1	LN:27185
+ at SQ	SN:KI520711.1	LN:27164
+ at SQ	SN:KI520712.1	LN:26988
+ at SQ	SN:AYCK01029310.1	LN:26955
+ at SQ	SN:KI520794.1	LN:26938
+ at SQ	SN:KI520735.1	LN:26930
+ at SQ	SN:KI520714.1	LN:26713
+ at SQ	SN:KI520717.1	LN:26537
+ at SQ	SN:KI520740.1	LN:26497
+ at SQ	SN:AYCK01029311.1	LN:26471
+ at SQ	SN:KI520745.1	LN:26381
+ at SQ	SN:KI520754.1	LN:26357
+ at SQ	SN:KI520763.1	LN:26338
+ at SQ	SN:KI520719.1	LN:26313
+ at SQ	SN:KI520716.1	LN:26285
+ at SQ	SN:KI520720.1	LN:26281
+ at SQ	SN:KI520737.1	LN:26201
+ at SQ	SN:KI520734.1	LN:26199
+ at SQ	SN:KI520715.1	LN:26153
+ at SQ	SN:KI520726.1	LN:25825
+ at SQ	SN:KI520723.1	LN:25650
+ at SQ	SN:AYCK01026963.1	LN:25583
+ at SQ	SN:KI520728.1	LN:25513
+ at SQ	SN:KI520732.1	LN:25413
+ at SQ	SN:KI520725.1	LN:25396
+ at SQ	SN:AYCK01029312.1	LN:25327
+ at SQ	SN:KI520780.1	LN:25287
+ at SQ	SN:KI520774.1	LN:25046
+ at SQ	SN:KI520738.1	LN:25044
+ at SQ	SN:AYCK01029313.1	LN:25013
+ at SQ	SN:AYCK01029314.1	LN:24931
+ at SQ	SN:KI520748.1	LN:24883
+ at SQ	SN:KI520788.1	LN:24860
+ at SQ	SN:KI520742.1	LN:24850
+ at SQ	SN:KI520729.1	LN:24785
+ at SQ	SN:KI520767.1	LN:24688
+ at SQ	SN:KI520733.1	LN:24654
+ at SQ	SN:KI520771.1	LN:24643
+ at SQ	SN:KI520741.1	LN:24589
+ at SQ	SN:AYCK01029315.1	LN:24575
+ at SQ	SN:KI520743.1	LN:24488
+ at SQ	SN:KI520750.1	LN:24401
+ at SQ	SN:KI520744.1	LN:24382
+ at SQ	SN:KI520772.1	LN:24230
+ at SQ	SN:KI520782.1	LN:24131
+ at SQ	SN:KI520739.1	LN:24090
+ at SQ	SN:KI520762.1	LN:23918
+ at SQ	SN:KI520747.1	LN:23866
+ at SQ	SN:AYCK01029316.1	LN:23766
+ at SQ	SN:KI520749.1	LN:23629
+ at SQ	SN:KI520751.1	LN:23615
+ at SQ	SN:KI520839.1	LN:23613
+ at SQ	SN:KI520835.1	LN:23562
+ at SQ	SN:KI520757.1	LN:23559
+ at SQ	SN:AYCK01029317.1	LN:23515
+ at SQ	SN:KI520752.1	LN:23468
+ at SQ	SN:KI520753.1	LN:23464
+ at SQ	SN:KI520848.1	LN:23408
+ at SQ	SN:KI520796.1	LN:23395
+ at SQ	SN:AYCK01029318.1	LN:23162
+ at SQ	SN:KI520766.1	LN:23155
+ at SQ	SN:KI520765.1	LN:23018
+ at SQ	SN:AYCK01029319.1	LN:22924
+ at SQ	SN:KI520758.1	LN:22767
+ at SQ	SN:KI520760.1	LN:22764
+ at SQ	SN:AYCK01029320.1	LN:22759
+ at SQ	SN:KI520755.1	LN:22688
+ at SQ	SN:KI520895.1	LN:22650
+ at SQ	SN:KI520761.1	LN:22628
+ at SQ	SN:KI520764.1	LN:22598
+ at SQ	SN:AYCK01029321.1	LN:22579
+ at SQ	SN:KI520773.1	LN:22457
+ at SQ	SN:KI520769.1	LN:22250
+ at SQ	SN:KI520759.1	LN:22104
+ at SQ	SN:KI520768.1	LN:22081
+ at SQ	SN:AYCK01029322.1	LN:22044
+ at SQ	SN:KI520819.1	LN:21919
+ at SQ	SN:AYCK01029323.1	LN:21906
+ at SQ	SN:KI520815.1	LN:21905
+ at SQ	SN:KI520798.1	LN:21901
+ at SQ	SN:KI520777.1	LN:21872
+ at SQ	SN:KI520799.1	LN:21856
+ at SQ	SN:KI520820.1	LN:21797
+ at SQ	SN:KI520803.1	LN:21735
+ at SQ	SN:KI520883.1	LN:21722
+ at SQ	SN:KI520770.1	LN:21584
+ at SQ	SN:KI520808.1	LN:21581
+ at SQ	SN:AYCK01029324.1	LN:21575
+ at SQ	SN:KI520776.1	LN:21537
+ at SQ	SN:KI520778.1	LN:21507
+ at SQ	SN:AYCK01029325.1	LN:21495
+ at SQ	SN:KI520775.1	LN:21471
+ at SQ	SN:KI520881.1	LN:21448
+ at SQ	SN:KI520779.1	LN:21387
+ at SQ	SN:AYCK01029326.1	LN:21362
+ at SQ	SN:KI520784.1	LN:21354
+ at SQ	SN:AYCK01029327.1	LN:21291
+ at SQ	SN:KI520785.1	LN:21255
+ at SQ	SN:KI520902.1	LN:21236
+ at SQ	SN:KI520783.1	LN:21122
+ at SQ	SN:KI520792.1	LN:21105
+ at SQ	SN:AYCK01029328.1	LN:21086
+ at SQ	SN:KI520789.1	LN:21003
+ at SQ	SN:AYCK01029329.1	LN:20990
+ at SQ	SN:KI520787.1	LN:20961
+ at SQ	SN:KI520797.1	LN:20921
+ at SQ	SN:AYCK01029330.1	LN:20900
+ at SQ	SN:AYCK01029331.1	LN:20871
+ at SQ	SN:AYCK01029332.1	LN:20848
+ at SQ	SN:KI520812.1	LN:20807
+ at SQ	SN:KI520795.1	LN:20762
+ at SQ	SN:KI520793.1	LN:20756
+ at SQ	SN:KI520806.1	LN:20723
+ at SQ	SN:AYCK01029333.1	LN:20649
+ at SQ	SN:KI520844.1	LN:20648
+ at SQ	SN:AYCK01029334.1	LN:20640
+ at SQ	SN:KI520855.1	LN:20621
+ at SQ	SN:AYCK01029335.1	LN:20619
+ at SQ	SN:KI520807.1	LN:20580
+ at SQ	SN:AYCK01029336.1	LN:20441
+ at SQ	SN:KI520886.1	LN:20375
+ at SQ	SN:KI520823.1	LN:20370
+ at SQ	SN:AYCK01029337.1	LN:20352
+ at SQ	SN:KI520832.1	LN:20262
+ at SQ	SN:AYCK01029338.1	LN:20195
+ at SQ	SN:KI520863.1	LN:20161
+ at SQ	SN:KI520831.1	LN:20128
+ at SQ	SN:KI520811.1	LN:20109
+ at SQ	SN:KI520862.1	LN:20105
+ at SQ	SN:KI520901.1	LN:20008
+ at SQ	SN:KI520816.1	LN:20000
+ at SQ	SN:KI520809.1	LN:19949
+ at SQ	SN:AYCK01029339.1	LN:19924
+ at SQ	SN:KI520828.1	LN:19903
+ at SQ	SN:KI520810.1	LN:19884
+ at SQ	SN:KI520814.1	LN:19855
+ at SQ	SN:KI520813.1	LN:19835
+ at SQ	SN:AYCK01029340.1	LN:19800
+ at SQ	SN:KI520838.1	LN:19791
+ at SQ	SN:KI520804.1	LN:19731
+ at SQ	SN:KI520821.1	LN:19703
+ at SQ	SN:KI520833.1	LN:19679
+ at SQ	SN:KI520817.1	LN:19671
+ at SQ	SN:KI520868.1	LN:19633
+ at SQ	SN:KI520824.1	LN:19575
+ at SQ	SN:KI520842.1	LN:19573
+ at SQ	SN:KI520826.1	LN:19565
+ at SQ	SN:AYCK01029341.1	LN:19556
+ at SQ	SN:KI520825.1	LN:19522
+ at SQ	SN:KI520801.1	LN:19520
+ at SQ	SN:KI520805.1	LN:19517
+ at SQ	SN:KI520846.1	LN:19505
+ at SQ	SN:KI520860.1	LN:19486
+ at SQ	SN:AYCK01029342.1	LN:19420
+ at SQ	SN:KI520851.1	LN:19336
+ at SQ	SN:AYCK01029343.1	LN:19181
+ at SQ	SN:KI520829.1	LN:19116
+ at SQ	SN:KI520830.1	LN:19075
+ at SQ	SN:AYCK01029344.1	LN:19070
+ at SQ	SN:KI520843.1	LN:19046
+ at SQ	SN:KI520853.1	LN:19014
+ at SQ	SN:KI520840.1	LN:18780
+ at SQ	SN:KI520892.1	LN:18769
+ at SQ	SN:KI520837.1	LN:18713
+ at SQ	SN:AYCK01029345.1	LN:18700
+ at SQ	SN:KI520836.1	LN:18680
+ at SQ	SN:AYCK01029346.1	LN:18635
+ at SQ	SN:KI520897.1	LN:18550
+ at SQ	SN:KI520879.1	LN:18544
+ at SQ	SN:KI520857.1	LN:18514
+ at SQ	SN:KI520898.1	LN:18496
+ at SQ	SN:KI520847.1	LN:18483
+ at SQ	SN:AYCK01029347.1	LN:18480
+ at SQ	SN:AYCK01027316.1	LN:18475
+ at SQ	SN:AYCK01029348.1	LN:18468
+ at SQ	SN:AYCK01027317.1	LN:18345
+ at SQ	SN:KI520876.1	LN:18333
+ at SQ	SN:AYCK01029349.1	LN:18295
+ at SQ	SN:KI520890.1	LN:18215
+ at SQ	SN:KI520866.1	LN:18162
+ at SQ	SN:AYCK01029350.1	LN:18082
+ at SQ	SN:KI520864.1	LN:18053
+ at SQ	SN:AYCK01029351.1	LN:18040
+ at SQ	SN:KI520852.1	LN:18031
+ at SQ	SN:KI520845.1	LN:17999
+ at SQ	SN:KI520849.1	LN:17975
+ at SQ	SN:KI521025.1	LN:17836
+ at SQ	SN:KI520928.1	LN:17785
+ at SQ	SN:AYCK01029352.1	LN:17742
+ at SQ	SN:KI520878.1	LN:17673
+ at SQ	SN:KI520959.1	LN:17665
+ at SQ	SN:KI520856.1	LN:17643
+ at SQ	SN:AYCK01029353.1	LN:17636
+ at SQ	SN:KI520859.1	LN:17608
+ at SQ	SN:AYCK01029354.1	LN:17533
+ at SQ	SN:KI520861.1	LN:17499
+ at SQ	SN:KI520903.1	LN:17314
+ at SQ	SN:AYCK01029355.1	LN:17304
+ at SQ	SN:KI521242.1	LN:17234
+ at SQ	SN:KI520858.1	LN:17233
+ at SQ	SN:KI520899.1	LN:17218
+ at SQ	SN:AYCK01029356.1	LN:17131
+ at SQ	SN:AYCK01027401.1	LN:17086
+ at SQ	SN:KI520869.1	LN:17072
+ at SQ	SN:AYCK01029357.1	LN:17055
+ at SQ	SN:AYCK01029358.1	LN:17038
+ at SQ	SN:KI520854.1	LN:17035
+ at SQ	SN:KI520900.1	LN:16974
+ at SQ	SN:KI520867.1	LN:16970
+ at SQ	SN:KI520915.1	LN:16962
+ at SQ	SN:KI520884.1	LN:16944
+ at SQ	SN:KI520865.1	LN:16940
+ at SQ	SN:KI520951.1	LN:16834
+ at SQ	SN:KI520873.1	LN:16788
+ at SQ	SN:KI520872.1	LN:16756
+ at SQ	SN:AYCK01029359.1	LN:16720
+ at SQ	SN:KI520874.1	LN:16710
+ at SQ	SN:KI520870.1	LN:16602
+ at SQ	SN:KI520887.1	LN:16567
+ at SQ	SN:AYCK01027430.1	LN:16522
+ at SQ	SN:KI520965.1	LN:16482
+ at SQ	SN:KI520961.1	LN:16464
+ at SQ	SN:KI520880.1	LN:16456
+ at SQ	SN:KI520922.1	LN:16424
+ at SQ	SN:KI520916.1	LN:16419
+ at SQ	SN:AYCK01027434.1	LN:16337
+ at SQ	SN:KI520875.1	LN:16312
+ at SQ	SN:KI520882.1	LN:16304
+ at SQ	SN:AYCK01027438.1	LN:16279
+ at SQ	SN:AYCK01029360.1	LN:16263
+ at SQ	SN:KI520911.1	LN:16223
+ at SQ	SN:KI520921.1	LN:16211
+ at SQ	SN:KI520893.1	LN:16176
+ at SQ	SN:KI520885.1	LN:16164
+ at SQ	SN:AYCK01029361.1	LN:16160
+ at SQ	SN:AYCK01029362.1	LN:16158
+ at SQ	SN:KI520889.1	LN:16112
+ at SQ	SN:KI520912.1	LN:16107
+ at SQ	SN:AYCK01029363.1	LN:16084
+ at SQ	SN:AYCK01029364.1	LN:16084
+ at SQ	SN:AYCK01027446.1	LN:16063
+ at SQ	SN:KI520896.1	LN:16021
+ at SQ	SN:KI520925.1	LN:15944
+ at SQ	SN:KI520932.1	LN:15924
+ at SQ	SN:KI520891.1	LN:15903
+ at SQ	SN:KI520894.1	LN:15866
+ at SQ	SN:KI520904.1	LN:15842
+ at SQ	SN:KI520907.1	LN:15825
+ at SQ	SN:AYCK01029365.1	LN:15807
+ at SQ	SN:KI520913.1	LN:15802
+ at SQ	SN:AYCK01029366.1	LN:15796
+ at SQ	SN:KI520909.1	LN:15789
+ at SQ	SN:AYCK01027463.1	LN:15749
+ at SQ	SN:AYCK01027464.1	LN:15735
+ at SQ	SN:KI520945.1	LN:15721
+ at SQ	SN:KI520976.1	LN:15700
+ at SQ	SN:KI520920.1	LN:15684
+ at SQ	SN:AYCK01029367.1	LN:15666
+ at SQ	SN:KI520935.1	LN:15641
+ at SQ	SN:KI520877.1	LN:15554
+ at SQ	SN:AYCK01029368.1	LN:15519
+ at SQ	SN:KI520964.1	LN:15515
+ at SQ	SN:KI520910.1	LN:15506
+ at SQ	SN:KI520950.1	LN:15502
+ at SQ	SN:KI520986.1	LN:15463
+ at SQ	SN:AYCK01029369.1	LN:15463
+ at SQ	SN:KI520943.1	LN:15456
+ at SQ	SN:AYCK01029370.1	LN:15453
+ at SQ	SN:KI520991.1	LN:15431
+ at SQ	SN:KI520888.1	LN:15419
+ at SQ	SN:KI520958.1	LN:15375
+ at SQ	SN:AYCK01029371.1	LN:15354
+ at SQ	SN:KI520914.1	LN:15292
+ at SQ	SN:AYCK01029372.1	LN:15282
+ at SQ	SN:KI520917.1	LN:15258
+ at SQ	SN:KI520905.1	LN:15216
+ at SQ	SN:KI520977.1	LN:15199
+ at SQ	SN:AYCK01029373.1	LN:15192
+ at SQ	SN:KI520923.1	LN:15127
+ at SQ	SN:KI520918.1	LN:15122
+ at SQ	SN:AYCK01029374.1	LN:15072
+ at SQ	SN:KI520908.1	LN:15016
+ at SQ	SN:KI520930.1	LN:15009
+ at SQ	SN:KI520924.1	LN:14988
+ at SQ	SN:KI520938.1	LN:14988
+ at SQ	SN:AYCK01029375.1	LN:14977
+ at SQ	SN:AYCK01029376.1	LN:14970
+ at SQ	SN:KI520940.1	LN:14963
+ at SQ	SN:AYCK01027574.1	LN:14897
+ at SQ	SN:AYCK01029377.1	LN:14883
+ at SQ	SN:AYCK01029378.1	LN:14873
+ at SQ	SN:AYCK01029379.1	LN:14841
+ at SQ	SN:KI520927.1	LN:14823
+ at SQ	SN:KI521099.1	LN:14755
+ at SQ	SN:KI520926.1	LN:14743
+ at SQ	SN:AYCK01029380.1	LN:14718
+ at SQ	SN:AYCK01029381.1	LN:14684
+ at SQ	SN:KI520931.1	LN:14678
+ at SQ	SN:AYCK01027588.1	LN:14677
+ at SQ	SN:AYCK01029382.1	LN:14674
+ at SQ	SN:KI520929.1	LN:14672
+ at SQ	SN:AYCK01029383.1	LN:14667
+ at SQ	SN:KI520994.1	LN:14607
+ at SQ	SN:KI520990.1	LN:14600
+ at SQ	SN:KI520933.1	LN:14554
+ at SQ	SN:KI520942.1	LN:14551
+ at SQ	SN:AYCK01027592.1	LN:14547
+ at SQ	SN:AYCK01029384.1	LN:14496
+ at SQ	SN:AYCK01029385.1	LN:14442
+ at SQ	SN:KI521023.1	LN:14399
+ at SQ	SN:AYCK01029386.1	LN:14385
+ at SQ	SN:AYCK01029387.1	LN:14372
+ at SQ	SN:KI520974.1	LN:14362
+ at SQ	SN:KI520934.1	LN:14354
+ at SQ	SN:AYCK01029388.1	LN:14312
+ at SQ	SN:KI520937.1	LN:14309
+ at SQ	SN:AYCK01029389.1	LN:14253
+ at SQ	SN:KI520954.1	LN:14229
+ at SQ	SN:AYCK01029390.1	LN:14226
+ at SQ	SN:AYCK01029391.1	LN:14226
+ at SQ	SN:KI520936.1	LN:14220
+ at SQ	SN:KI520963.1	LN:14220
+ at SQ	SN:KI520939.1	LN:14184
+ at SQ	SN:AYCK01029392.1	LN:14126
+ at SQ	SN:AYCK01029393.1	LN:14124
+ at SQ	SN:AYCK01029394.1	LN:14089
+ at SQ	SN:AYCK01029395.1	LN:14087
+ at SQ	SN:AYCK01027630.1	LN:14083
+ at SQ	SN:AYCK01029396.1	LN:14030
+ at SQ	SN:KI520999.1	LN:14024
+ at SQ	SN:AYCK01029397.1	LN:13934
+ at SQ	SN:KI521014.1	LN:13921
+ at SQ	SN:KI520941.1	LN:13911
+ at SQ	SN:KI520992.1	LN:13861
+ at SQ	SN:AYCK01029398.1	LN:13730
+ at SQ	SN:KI520947.1	LN:13722
+ at SQ	SN:KI520949.1	LN:13706
+ at SQ	SN:KI520948.1	LN:13687
+ at SQ	SN:AYCK01029399.1	LN:13617
+ at SQ	SN:KI520973.1	LN:13599
+ at SQ	SN:AYCK01029400.1	LN:13549
+ at SQ	SN:AYCK01029401.1	LN:13452
+ at SQ	SN:KI520944.1	LN:13420
+ at SQ	SN:KI521015.1	LN:13385
+ at SQ	SN:KI520953.1	LN:13384
+ at SQ	SN:KI520952.1	LN:13322
+ at SQ	SN:AYCK01029402.1	LN:13293
+ at SQ	SN:KI521012.1	LN:13275
+ at SQ	SN:AYCK01029403.1	LN:13221
+ at SQ	SN:AYCK01029404.1	LN:13159
+ at SQ	SN:AYCK01029405.1	LN:13125
+ at SQ	SN:AYCK01029406.1	LN:13120
+ at SQ	SN:KI521011.1	LN:13059
+ at SQ	SN:KI520980.1	LN:13011
+ at SQ	SN:KI520997.1	LN:13007
+ at SQ	SN:KI521092.1	LN:12994
+ at SQ	SN:AYCK01029407.1	LN:12973
+ at SQ	SN:KI520957.1	LN:12968
+ at SQ	SN:AYCK01029408.1	LN:12919
+ at SQ	SN:AYCK01029409.1	LN:12893
+ at SQ	SN:KI520960.1	LN:12886
+ at SQ	SN:KI520968.1	LN:12812
+ at SQ	SN:KI520989.1	LN:12791
+ at SQ	SN:KI520962.1	LN:12786
+ at SQ	SN:KI521080.1	LN:12785
+ at SQ	SN:KI520975.1	LN:12740
+ at SQ	SN:KI520969.1	LN:12730
+ at SQ	SN:AYCK01027705.1	LN:12677
+ at SQ	SN:KI520966.1	LN:12661
+ at SQ	SN:AYCK01029410.1	LN:12651
+ at SQ	SN:KI520956.1	LN:12614
+ at SQ	SN:AYCK01029411.1	LN:12611
+ at SQ	SN:KI521001.1	LN:12578
+ at SQ	SN:AYCK01029412.1	LN:12562
+ at SQ	SN:AYCK01029413.1	LN:12476
+ at SQ	SN:KI520971.1	LN:12472
+ at SQ	SN:KI520981.1	LN:12447
+ at SQ	SN:KI520970.1	LN:12399
+ at SQ	SN:KI520967.1	LN:12392
+ at SQ	SN:AYCK01029414.1	LN:12345
+ at SQ	SN:KI520984.1	LN:12280
+ at SQ	SN:KI520985.1	LN:12253
+ at SQ	SN:KI520988.1	LN:12227
+ at SQ	SN:AYCK01029415.1	LN:12226
+ at SQ	SN:KI520972.1	LN:12201
+ at SQ	SN:AYCK01029416.1	LN:12192
+ at SQ	SN:AYCK01029417.1	LN:12185
+ at SQ	SN:KI520987.1	LN:12179
+ at SQ	SN:KI520983.1	LN:12149
+ at SQ	SN:KI521000.1	LN:12147
+ at SQ	SN:KI521003.1	LN:12124
+ at SQ	SN:AYCK01029418.1	LN:12113
+ at SQ	SN:AYCK01029419.1	LN:12108
+ at SQ	SN:KI521042.1	LN:12027
+ at SQ	SN:KI520995.1	LN:12026
+ at SQ	SN:KI521017.1	LN:12016
+ at SQ	SN:KI520982.1	LN:11987
+ at SQ	SN:KI521054.1	LN:11980
+ at SQ	SN:KI520996.1	LN:11978
+ at SQ	SN:AYCK01029420.1	LN:11971
+ at SQ	SN:AYCK01029421.1	LN:11956
+ at SQ	SN:AYCK01029422.1	LN:11946
+ at SQ	SN:KI521028.1	LN:11921
+ at SQ	SN:KI521037.1	LN:11914
+ at SQ	SN:AYCK01029423.1	LN:11898
+ at SQ	SN:AYCK01029424.1	LN:11895
+ at SQ	SN:KI520998.1	LN:11856
+ at SQ	SN:KI520993.1	LN:11853
+ at SQ	SN:AYCK01029425.1	LN:11811
+ at SQ	SN:AYCK01029426.1	LN:11748
+ at SQ	SN:AYCK01029427.1	LN:11732
+ at SQ	SN:KI521013.1	LN:11708
+ at SQ	SN:KI521007.1	LN:11643
+ at SQ	SN:AYCK01029428.1	LN:11643
+ at SQ	SN:KI521008.1	LN:11642
+ at SQ	SN:KI521020.1	LN:11601
+ at SQ	SN:KI521010.1	LN:11552
+ at SQ	SN:KI521043.1	LN:11540
+ at SQ	SN:KI521051.1	LN:11519
+ at SQ	SN:AYCK01027784.1	LN:11501
+ at SQ	SN:AYCK01027785.1	LN:11501
+ at SQ	SN:KI521016.1	LN:11473
+ at SQ	SN:KI521002.1	LN:11416
+ at SQ	SN:KI521019.1	LN:11385
+ at SQ	SN:KI521006.1	LN:11367
+ at SQ	SN:AYCK01029429.1	LN:11351
+ at SQ	SN:KI521005.1	LN:11343
+ at SQ	SN:KI521077.1	LN:11329
+ at SQ	SN:KI521004.1	LN:11314
+ at SQ	SN:KI521021.1	LN:11297
+ at SQ	SN:AYCK01027822.1	LN:11254
+ at SQ	SN:AYCK01029430.1	LN:11239
+ at SQ	SN:AYCK01029431.1	LN:11190
+ at SQ	SN:AYCK01029432.1	LN:11184
+ at SQ	SN:AYCK01029433.1	LN:11119
+ at SQ	SN:AYCK01029434.1	LN:11069
+ at SQ	SN:KI521026.1	LN:11067
+ at SQ	SN:KI521038.1	LN:11051
+ at SQ	SN:KI521009.1	LN:11049
+ at SQ	SN:AYCK01029435.1	LN:11046
+ at SQ	SN:KI521018.1	LN:11021
+ at SQ	SN:AYCK01029436.1	LN:10983
+ at SQ	SN:AYCK01027864.1	LN:10963
+ at SQ	SN:AYCK01029437.1	LN:10938
+ at SQ	SN:AYCK01029438.1	LN:10938
+ at SQ	SN:AYCK01029439.1	LN:10915
+ at SQ	SN:KI521031.1	LN:10913
+ at SQ	SN:KI521029.1	LN:10895
+ at SQ	SN:KI521096.1	LN:10892
+ at SQ	SN:KI521030.1	LN:10872
+ at SQ	SN:KI521058.1	LN:10868
+ at SQ	SN:KI521027.1	LN:10855
+ at SQ	SN:AYCK01029440.1	LN:10836
+ at SQ	SN:KI521033.1	LN:10787
+ at SQ	SN:AYCK01029441.1	LN:10785
+ at SQ	SN:KI521024.1	LN:10769
+ at SQ	SN:KI521052.1	LN:10764
+ at SQ	SN:KI521059.1	LN:10757
+ at SQ	SN:AYCK01027885.1	LN:10737
+ at SQ	SN:AYCK01029442.1	LN:10724
+ at SQ	SN:AYCK01029443.1	LN:10694
+ at SQ	SN:KI521171.1	LN:10672
+ at SQ	SN:KI521035.1	LN:10655
+ at SQ	SN:KI521039.1	LN:10629
+ at SQ	SN:KI521040.1	LN:10611
+ at SQ	SN:AYCK01027894.1	LN:10591
+ at SQ	SN:AYCK01029444.1	LN:10569
+ at SQ	SN:AYCK01029445.1	LN:10517
+ at SQ	SN:KI521048.1	LN:10513
+ at SQ	SN:KI521036.1	LN:10510
+ at SQ	SN:KI521034.1	LN:10486
+ at SQ	SN:KI521032.1	LN:10470
+ at SQ	SN:KI521041.1	LN:10448
+ at SQ	SN:AYCK01029446.1	LN:10413
+ at SQ	SN:AYCK01029447.1	LN:10399
+ at SQ	SN:KI521127.1	LN:10384
+ at SQ	SN:AYCK01029448.1	LN:10372
+ at SQ	SN:AYCK01029449.1	LN:10313
+ at SQ	SN:KI521045.1	LN:10292
+ at SQ	SN:KI521055.1	LN:10279
+ at SQ	SN:KI521050.1	LN:10230
+ at SQ	SN:AYCK01029450.1	LN:10229
+ at SQ	SN:AYCK01029451.1	LN:10221
+ at SQ	SN:KI521046.1	LN:10202
+ at SQ	SN:KI521047.1	LN:10186
+ at SQ	SN:AYCK01029452.1	LN:10171
+ at SQ	SN:AYCK01029453.1	LN:10169
+ at SQ	SN:AYCK01029454.1	LN:10154
+ at SQ	SN:KI521056.1	LN:10148
+ at SQ	SN:KI521083.1	LN:10148
+ at SQ	SN:KI521053.1	LN:10116
+ at SQ	SN:KI521057.1	LN:10080
+ at SQ	SN:AYCK01029455.1	LN:10042
+ at SQ	SN:AYCK01029456.1	LN:10019
+ at SQ	SN:AYCK01029457.1	LN:10012
+ at SQ	SN:KI521088.1	LN:10009
+ at SQ	SN:KI521061.1	LN:9939
+ at SQ	SN:KI521044.1	LN:9936
+ at SQ	SN:AYCK01029458.1	LN:9929
+ at SQ	SN:KI521063.1	LN:9925
+ at SQ	SN:KI521060.1	LN:9919
+ at SQ	SN:AYCK01029459.1	LN:9910
+ at SQ	SN:AYCK01029460.1	LN:9908
+ at SQ	SN:KI521107.1	LN:9886
+ at SQ	SN:AYCK01029461.1	LN:9875
+ at SQ	SN:KI521094.1	LN:9872
+ at SQ	SN:AYCK01029462.1	LN:9865
+ at SQ	SN:KI521068.1	LN:9858
+ at SQ	SN:AYCK01029463.1	LN:9854
+ at SQ	SN:KI521070.1	LN:9846
+ at SQ	SN:KI521066.1	LN:9838
+ at SQ	SN:AYCK01029464.1	LN:9838
+ at SQ	SN:KI521075.1	LN:9814
+ at SQ	SN:KI521065.1	LN:9812
+ at SQ	SN:KI521161.1	LN:9788
+ at SQ	SN:KI521062.1	LN:9784
+ at SQ	SN:KI521151.1	LN:9778
+ at SQ	SN:KI521069.1	LN:9749
+ at SQ	SN:KI521072.1	LN:9710
+ at SQ	SN:KI521074.1	LN:9647
+ at SQ	SN:KI521073.1	LN:9622
+ at SQ	SN:KI521148.1	LN:9597
+ at SQ	SN:AYCK01029465.1	LN:9589
+ at SQ	SN:AYCK01029466.1	LN:9553
+ at SQ	SN:KI521067.1	LN:9547
+ at SQ	SN:AYCK01029467.1	LN:9528
+ at SQ	SN:AYCK01029468.1	LN:9527
+ at SQ	SN:KI521082.1	LN:9508
+ at SQ	SN:KI521078.1	LN:9468
+ at SQ	SN:KI521079.1	LN:9443
+ at SQ	SN:AYCK01027989.1	LN:9421
+ at SQ	SN:AYCK01029469.1	LN:9421
+ at SQ	SN:AYCK01029470.1	LN:9399
+ at SQ	SN:AYCK01029471.1	LN:9390
+ at SQ	SN:AYCK01029472.1	LN:9352
+ at SQ	SN:KI521172.1	LN:9345
+ at SQ	SN:KI521084.1	LN:9332
+ at SQ	SN:KI521076.1	LN:9328
+ at SQ	SN:AYCK01029473.1	LN:9320
+ at SQ	SN:AYCK01029474.1	LN:9317
+ at SQ	SN:KI521095.1	LN:9312
+ at SQ	SN:KI521022.1	LN:9281
+ at SQ	SN:AYCK01029475.1	LN:9267
+ at SQ	SN:AYCK01028016.1	LN:9260
+ at SQ	SN:KI521071.1	LN:9222
+ at SQ	SN:AYCK01029476.1	LN:9200
+ at SQ	SN:AYCK01029477.1	LN:9199
+ at SQ	SN:KI521090.1	LN:9193
+ at SQ	SN:KI521142.1	LN:9189
+ at SQ	SN:KI521089.1	LN:9186
+ at SQ	SN:KI521105.1	LN:9163
+ at SQ	SN:KI521091.1	LN:9153
+ at SQ	SN:KI521085.1	LN:9141
+ at SQ	SN:AYCK01029478.1	LN:9140
+ at SQ	SN:AYCK01029479.1	LN:9118
+ at SQ	SN:AYCK01029480.1	LN:9103
+ at SQ	SN:KI521087.1	LN:9101
+ at SQ	SN:KI521100.1	LN:9085
+ at SQ	SN:KI521086.1	LN:9074
+ at SQ	SN:AYCK01029481.1	LN:9068
+ at SQ	SN:KI521097.1	LN:9031
+ at SQ	SN:AYCK01029482.1	LN:9029
+ at SQ	SN:AYCK01029483.1	LN:9020
+ at SQ	SN:AYCK01029484.1	LN:9015
+ at SQ	SN:KI521098.1	LN:9014
+ at SQ	SN:AYCK01029485.1	LN:9006
+ at SQ	SN:AYCK01029486.1	LN:8974
+ at SQ	SN:KI521101.1	LN:8965
+ at SQ	SN:AYCK01029487.1	LN:8959
+ at SQ	SN:AYCK01029488.1	LN:8959
+ at SQ	SN:AYCK01029489.1	LN:8946
+ at SQ	SN:AYCK01029490.1	LN:8946
+ at SQ	SN:KI521093.1	LN:8944
+ at SQ	SN:AYCK01029491.1	LN:8938
+ at SQ	SN:AYCK01029492.1	LN:8883
+ at SQ	SN:AYCK01029493.1	LN:8875
+ at SQ	SN:KI521102.1	LN:8872
+ at SQ	SN:AYCK01029494.1	LN:8866
+ at SQ	SN:KI521104.1	LN:8823
+ at SQ	SN:KI521106.1	LN:8817
+ at SQ	SN:KI521116.1	LN:8796
+ at SQ	SN:AYCK01029495.1	LN:8781
+ at SQ	SN:AYCK01029496.1	LN:8758
+ at SQ	SN:AYCK01028067.1	LN:8738
+ at SQ	SN:KI521108.1	LN:8730
+ at SQ	SN:KI521103.1	LN:8727
+ at SQ	SN:KI521109.1	LN:8698
+ at SQ	SN:KI521113.1	LN:8694
+ at SQ	SN:AYCK01029497.1	LN:8687
+ at SQ	SN:KI521112.1	LN:8615
+ at SQ	SN:KI521110.1	LN:8592
+ at SQ	SN:AYCK01029498.1	LN:8592
+ at SQ	SN:AYCK01029499.1	LN:8578
+ at SQ	SN:AYCK01029500.1	LN:8575
+ at SQ	SN:KI521111.1	LN:8556
+ at SQ	SN:KI521114.1	LN:8529
+ at SQ	SN:AYCK01029501.1	LN:8439
+ at SQ	SN:KI521115.1	LN:8435
+ at SQ	SN:KI521118.1	LN:8402
+ at SQ	SN:AYCK01029502.1	LN:8395
+ at SQ	SN:KI521122.1	LN:8369
+ at SQ	SN:AYCK01029503.1	LN:8363
+ at SQ	SN:AYCK01029504.1	LN:8356
+ at SQ	SN:AYCK01029505.1	LN:8355
+ at SQ	SN:KI521121.1	LN:8333
+ at SQ	SN:AYCK01028103.1	LN:8332
+ at SQ	SN:KI521149.1	LN:8301
+ at SQ	SN:KI521125.1	LN:8285
+ at SQ	SN:AYCK01029506.1	LN:8252
+ at SQ	SN:AYCK01028117.1	LN:8249
+ at SQ	SN:KI521117.1	LN:8234
+ at SQ	SN:KI521120.1	LN:8232
+ at SQ	SN:KI521129.1	LN:8229
+ at SQ	SN:KI521119.1	LN:8203
+ at SQ	SN:KI521126.1	LN:8177
+ at SQ	SN:AYCK01029507.1	LN:8173
+ at SQ	SN:KI521130.1	LN:8163
+ at SQ	SN:AYCK01029508.1	LN:8158
+ at SQ	SN:AYCK01029509.1	LN:8155
+ at SQ	SN:AYCK01029510.1	LN:8154
+ at SQ	SN:AYCK01029511.1	LN:8147
+ at SQ	SN:KI521123.1	LN:8145
+ at SQ	SN:AYCK01029512.1	LN:8136
+ at SQ	SN:AYCK01028135.1	LN:8133
+ at SQ	SN:AYCK01028136.1	LN:8133
+ at SQ	SN:AYCK01028137.1	LN:8132
+ at SQ	SN:KI521269.1	LN:8112
+ at SQ	SN:KI521124.1	LN:8111
+ at SQ	SN:KI521132.1	LN:8092
+ at SQ	SN:KI521145.1	LN:8074
+ at SQ	SN:KI521135.1	LN:8062
+ at SQ	SN:AYCK01029513.1	LN:8061
+ at SQ	SN:AYCK01029514.1	LN:8060
+ at SQ	SN:AYCK01029515.1	LN:8054
+ at SQ	SN:AYCK01029516.1	LN:8054
+ at SQ	SN:KI521136.1	LN:8048
+ at SQ	SN:AYCK01029517.1	LN:8040
+ at SQ	SN:KI521134.1	LN:8029
+ at SQ	SN:KI521133.1	LN:8027
+ at SQ	SN:AYCK01029518.1	LN:7989
+ at SQ	SN:AYCK01029519.1	LN:7952
+ at SQ	SN:AYCK01029520.1	LN:7940
+ at SQ	SN:KI521128.1	LN:7937
+ at SQ	SN:KI521137.1	LN:7925
+ at SQ	SN:KI521138.1	LN:7921
+ at SQ	SN:AYCK01029521.1	LN:7892
+ at SQ	SN:KI521141.1	LN:7891
+ at SQ	SN:AYCK01029522.1	LN:7849
+ at SQ	SN:AYCK01029523.1	LN:7815
+ at SQ	SN:AYCK01029524.1	LN:7804
+ at SQ	SN:KI521175.1	LN:7792
+ at SQ	SN:KI521139.1	LN:7788
+ at SQ	SN:AYCK01029525.1	LN:7773
+ at SQ	SN:AYCK01029526.1	LN:7759
+ at SQ	SN:AYCK01029527.1	LN:7746
+ at SQ	SN:AYCK01029528.1	LN:7726
+ at SQ	SN:AYCK01029529.1	LN:7722
+ at SQ	SN:AYCK01029530.1	LN:7706
+ at SQ	SN:KI521140.1	LN:7705
+ at SQ	SN:KI521164.1	LN:7698
+ at SQ	SN:AYCK01029531.1	LN:7696
+ at SQ	SN:AYCK01029532.1	LN:7691
+ at SQ	SN:AYCK01029533.1	LN:7672
+ at SQ	SN:AYCK01029534.1	LN:7665
+ at SQ	SN:KI521147.1	LN:7657
+ at SQ	SN:KI521160.1	LN:7616
+ at SQ	SN:KI521146.1	LN:7605
+ at SQ	SN:AYCK01029535.1	LN:7551
+ at SQ	SN:KI521230.1	LN:7545
+ at SQ	SN:AYCK01029536.1	LN:7538
+ at SQ	SN:AYCK01029537.1	LN:7532
+ at SQ	SN:AYCK01029538.1	LN:7516
+ at SQ	SN:AYCK01029539.1	LN:7504
+ at SQ	SN:AYCK01029540.1	LN:7504
+ at SQ	SN:AYCK01029541.1	LN:7502
+ at SQ	SN:KI521154.1	LN:7499
+ at SQ	SN:KI521260.1	LN:7497
+ at SQ	SN:AYCK01029542.1	LN:7496
+ at SQ	SN:KI521155.1	LN:7495
+ at SQ	SN:AYCK01029543.1	LN:7491
+ at SQ	SN:AYCK01029544.1	LN:7474
+ at SQ	SN:KI521153.1	LN:7473
+ at SQ	SN:AYCK01029545.1	LN:7471
+ at SQ	SN:AYCK01029546.1	LN:7469
+ at SQ	SN:AYCK01029547.1	LN:7460
+ at SQ	SN:KI521158.1	LN:7455
+ at SQ	SN:AYCK01029548.1	LN:7441
+ at SQ	SN:AYCK01029549.1	LN:7435
+ at SQ	SN:AYCK01028195.1	LN:7433
+ at SQ	SN:AYCK01029550.1	LN:7429
+ at SQ	SN:AYCK01029551.1	LN:7424
+ at SQ	SN:KI521156.1	LN:7386
+ at SQ	SN:AYCK01029552.1	LN:7334
+ at SQ	SN:AYCK01029553.1	LN:7323
+ at SQ	SN:AYCK01029554.1	LN:7314
+ at SQ	SN:KI521157.1	LN:7309
+ at SQ	SN:AYCK01029555.1	LN:7299
+ at SQ	SN:AYCK01029556.1	LN:7291
+ at SQ	SN:KI521290.1	LN:7289
+ at SQ	SN:AYCK01029557.1	LN:7289
+ at SQ	SN:KI521165.1	LN:7284
+ at SQ	SN:AYCK01029558.1	LN:7263
+ at SQ	SN:KI521177.1	LN:7233
+ at SQ	SN:KI521176.1	LN:7212
+ at SQ	SN:AYCK01029559.1	LN:7211
+ at SQ	SN:AYCK01029560.1	LN:7200
+ at SQ	SN:KI521163.1	LN:7199
+ at SQ	SN:AYCK01029561.1	LN:7185
+ at SQ	SN:AYCK01029562.1	LN:7181
+ at SQ	SN:AYCK01029563.1	LN:7181
+ at SQ	SN:KI521170.1	LN:7173
+ at SQ	SN:AYCK01029564.1	LN:7166
+ at SQ	SN:AYCK01029565.1	LN:7164
+ at SQ	SN:KI521152.1	LN:7156
+ at SQ	SN:AYCK01029566.1	LN:7147
+ at SQ	SN:KI521131.1	LN:7146
+ at SQ	SN:AYCK01029567.1	LN:7146
+ at SQ	SN:KI521183.1	LN:7114
+ at SQ	SN:KI521167.1	LN:7101
+ at SQ	SN:AYCK01029568.1	LN:7101
+ at SQ	SN:AYCK01029569.1	LN:7089
+ at SQ	SN:KI521168.1	LN:7088
+ at SQ	SN:KI521174.1	LN:7083
+ at SQ	SN:AYCK01029570.1	LN:7038
+ at SQ	SN:KI521191.1	LN:7035
+ at SQ	SN:AYCK01029571.1	LN:7035
+ at SQ	SN:AYCK01029572.1	LN:7033
+ at SQ	SN:AYCK01029573.1	LN:7033
+ at SQ	SN:KI521249.1	LN:7018
+ at SQ	SN:AYCK01029574.1	LN:6999
+ at SQ	SN:KI521169.1	LN:6995
+ at SQ	SN:KI521173.1	LN:6982
+ at SQ	SN:AYCK01029575.1	LN:6976
+ at SQ	SN:AYCK01029576.1	LN:6963
+ at SQ	SN:AYCK01029577.1	LN:6956
+ at SQ	SN:KI521159.1	LN:6947
+ at SQ	SN:AYCK01029578.1	LN:6946
+ at SQ	SN:AYCK01029579.1	LN:6946
+ at SQ	SN:AYCK01029580.1	LN:6937
+ at SQ	SN:KI521224.1	LN:6928
+ at SQ	SN:KI521180.1	LN:6921
+ at SQ	SN:KI521181.1	LN:6910
+ at SQ	SN:AYCK01029581.1	LN:6891
+ at SQ	SN:KI521220.1	LN:6888
+ at SQ	SN:KI521178.1	LN:6870
+ at SQ	SN:AYCK01029582.1	LN:6818
+ at SQ	SN:AYCK01029583.1	LN:6793
+ at SQ	SN:AYCK01029584.1	LN:6757
+ at SQ	SN:KI521166.1	LN:6725
+ at SQ	SN:KI521150.1	LN:6713
+ at SQ	SN:KI521179.1	LN:6702
+ at SQ	SN:KI521187.1	LN:6689
+ at SQ	SN:KI521185.1	LN:6686
+ at SQ	SN:KI521197.1	LN:6686
+ at SQ	SN:AYCK01029585.1	LN:6666
+ at SQ	SN:KI521188.1	LN:6665
+ at SQ	SN:AYCK01029586.1	LN:6664
+ at SQ	SN:AYCK01029587.1	LN:6663
+ at SQ	SN:AYCK01029588.1	LN:6654
+ at SQ	SN:AYCK01029589.1	LN:6654
+ at SQ	SN:AYCK01029590.1	LN:6654
+ at SQ	SN:AYCK01029591.1	LN:6652
+ at SQ	SN:KI521186.1	LN:6650
+ at SQ	SN:AYCK01029592.1	LN:6634
+ at SQ	SN:KI521190.1	LN:6628
+ at SQ	SN:KI521198.1	LN:6620
+ at SQ	SN:AYCK01029593.1	LN:6618
+ at SQ	SN:KI521182.1	LN:6616
+ at SQ	SN:AYCK01029594.1	LN:6606
+ at SQ	SN:AYCK01029595.1	LN:6585
+ at SQ	SN:AYCK01028268.1	LN:6571
+ at SQ	SN:AYCK01028269.1	LN:6570
+ at SQ	SN:AYCK01028270.1	LN:6570
+ at SQ	SN:AYCK01029596.1	LN:6567
+ at SQ	SN:KI521284.1	LN:6560
+ at SQ	SN:KI521193.1	LN:6550
+ at SQ	SN:AYCK01028271.1	LN:6542
+ at SQ	SN:AYCK01028272.1	LN:6526
+ at SQ	SN:KI521195.1	LN:6519
+ at SQ	SN:AYCK01029597.1	LN:6518
+ at SQ	SN:AYCK01029598.1	LN:6518
+ at SQ	SN:KI521194.1	LN:6514
+ at SQ	SN:AYCK01029599.1	LN:6504
+ at SQ	SN:AYCK01029600.1	LN:6492
+ at SQ	SN:AYCK01029601.1	LN:6478
+ at SQ	SN:AYCK01029602.1	LN:6461
+ at SQ	SN:AYCK01029603.1	LN:6445
+ at SQ	SN:AYCK01029604.1	LN:6432
+ at SQ	SN:KI521196.1	LN:6420
+ at SQ	SN:AYCK01029605.1	LN:6418
+ at SQ	SN:KI521229.1	LN:6406
+ at SQ	SN:KI521189.1	LN:6396
+ at SQ	SN:AYCK01028287.1	LN:6395
+ at SQ	SN:AYCK01029606.1	LN:6376
+ at SQ	SN:KI521211.1	LN:6375
+ at SQ	SN:KI521199.1	LN:6372
+ at SQ	SN:KI521201.1	LN:6331
+ at SQ	SN:KI521192.1	LN:6321
+ at SQ	SN:AYCK01029607.1	LN:6320
+ at SQ	SN:KI521184.1	LN:6295
+ at SQ	SN:AYCK01029608.1	LN:6291
+ at SQ	SN:KI521202.1	LN:6285
+ at SQ	SN:AYCK01029609.1	LN:6284
+ at SQ	SN:KI521203.1	LN:6269
+ at SQ	SN:KI521204.1	LN:6268
+ at SQ	SN:AYCK01029610.1	LN:6260
+ at SQ	SN:AYCK01029611.1	LN:6250
+ at SQ	SN:KI521223.1	LN:6248
+ at SQ	SN:AYCK01029612.1	LN:6219
+ at SQ	SN:KI521200.1	LN:6212
+ at SQ	SN:AYCK01029613.1	LN:6212
+ at SQ	SN:KI521208.1	LN:6180
+ at SQ	SN:KI521205.1	LN:6169
+ at SQ	SN:AYCK01029614.1	LN:6153
+ at SQ	SN:AYCK01029615.1	LN:6147
+ at SQ	SN:KI521212.1	LN:6139
+ at SQ	SN:AYCK01029616.1	LN:6097
+ at SQ	SN:AYCK01029617.1	LN:6096
+ at SQ	SN:AYCK01029618.1	LN:6096
+ at SQ	SN:KI521213.1	LN:6074
+ at SQ	SN:KI521209.1	LN:6070
+ at SQ	SN:KI521207.1	LN:6020
+ at SQ	SN:KI521214.1	LN:6019
+ at SQ	SN:KI521219.1	LN:6014
+ at SQ	SN:KI521218.1	LN:5996
+ at SQ	SN:AYCK01029619.1	LN:5992
+ at SQ	SN:AYCK01028328.1	LN:5990
+ at SQ	SN:KI521210.1	LN:5989
+ at SQ	SN:KI521304.1	LN:5983
+ at SQ	SN:AYCK01029620.1	LN:5978
+ at SQ	SN:KI521238.1	LN:5974
+ at SQ	SN:AYCK01029621.1	LN:5962
+ at SQ	SN:AYCK01029622.1	LN:5960
+ at SQ	SN:AYCK01029623.1	LN:5959
+ at SQ	SN:AYCK01029624.1	LN:5954
+ at SQ	SN:AYCK01029625.1	LN:5953
+ at SQ	SN:KI521221.1	LN:5942
+ at SQ	SN:AYCK01029626.1	LN:5933
+ at SQ	SN:AYCK01029627.1	LN:5930
+ at SQ	SN:AYCK01029628.1	LN:5918
+ at SQ	SN:KI521231.1	LN:5902
+ at SQ	SN:AYCK01029629.1	LN:5897
+ at SQ	SN:KI521228.1	LN:5895
+ at SQ	SN:AYCK01028340.1	LN:5882
+ at SQ	SN:AYCK01029630.1	LN:5882
+ at SQ	SN:AYCK01029631.1	LN:5878
+ at SQ	SN:AYCK01029632.1	LN:5871
+ at SQ	SN:AYCK01028341.1	LN:5868
+ at SQ	SN:KI521215.1	LN:5868
+ at SQ	SN:AYCK01029633.1	LN:5860
+ at SQ	SN:AYCK01029634.1	LN:5850
+ at SQ	SN:AYCK01028342.1	LN:5849
+ at SQ	SN:AYCK01028343.1	LN:5849
+ at SQ	SN:KI521227.1	LN:5847
+ at SQ	SN:KI521206.1	LN:5844
+ at SQ	SN:KI521232.1	LN:5842
+ at SQ	SN:AYCK01029635.1	LN:5841
+ at SQ	SN:KI521349.1	LN:5820
+ at SQ	SN:AYCK01028346.1	LN:5816
+ at SQ	SN:AYCK01029636.1	LN:5813
+ at SQ	SN:AYCK01029637.1	LN:5800
+ at SQ	SN:KI521272.1	LN:5789
+ at SQ	SN:KI521235.1	LN:5785
+ at SQ	SN:KI521275.1	LN:5782
+ at SQ	SN:AYCK01028350.1	LN:5780
+ at SQ	SN:AYCK01029638.1	LN:5780
+ at SQ	SN:AYCK01029639.1	LN:5772
+ at SQ	SN:AYCK01029640.1	LN:5771
+ at SQ	SN:KI521217.1	LN:5756
+ at SQ	SN:AYCK01029641.1	LN:5744
+ at SQ	SN:KI521222.1	LN:5739
+ at SQ	SN:AYCK01028353.1	LN:5738
+ at SQ	SN:AYCK01029642.1	LN:5725
+ at SQ	SN:KI521241.1	LN:5717
+ at SQ	SN:KI521233.1	LN:5704
+ at SQ	SN:KI521226.1	LN:5703
+ at SQ	SN:KI521344.1	LN:5701
+ at SQ	SN:AYCK01029643.1	LN:5697
+ at SQ	SN:AYCK01029644.1	LN:5683
+ at SQ	SN:AYCK01029645.1	LN:5675
+ at SQ	SN:KI521225.1	LN:5673
+ at SQ	SN:AYCK01029646.1	LN:5672
+ at SQ	SN:AYCK01029647.1	LN:5665
+ at SQ	SN:KI521236.1	LN:5661
+ at SQ	SN:KI521244.1	LN:5660
+ at SQ	SN:AYCK01029648.1	LN:5658
+ at SQ	SN:AYCK01029649.1	LN:5645
+ at SQ	SN:KI521216.1	LN:5642
+ at SQ	SN:AYCK01028362.1	LN:5640
+ at SQ	SN:AYCK01028363.1	LN:5640
+ at SQ	SN:AYCK01029650.1	LN:5639
+ at SQ	SN:AYCK01029651.1	LN:5636
+ at SQ	SN:KI521247.1	LN:5618
+ at SQ	SN:KI521243.1	LN:5606
+ at SQ	SN:KI521248.1	LN:5605
+ at SQ	SN:KI521357.1	LN:5593
+ at SQ	SN:KI521239.1	LN:5589
+ at SQ	SN:AYCK01029652.1	LN:5584
+ at SQ	SN:AYCK01029653.1	LN:5560
+ at SQ	SN:AYCK01029654.1	LN:5545
+ at SQ	SN:AYCK01029655.1	LN:5528
+ at SQ	SN:KI521240.1	LN:5522
+ at SQ	SN:KI521252.1	LN:5511
+ at SQ	SN:KI521258.1	LN:5501
+ at SQ	SN:AYCK01029656.1	LN:5495
+ at SQ	SN:KI521261.1	LN:5482
+ at SQ	SN:KI521262.1	LN:5472
+ at SQ	SN:AYCK01028384.1	LN:5464
+ at SQ	SN:KI521234.1	LN:5462
+ at SQ	SN:KI521264.1	LN:5453
+ at SQ	SN:AYCK01029657.1	LN:5445
+ at SQ	SN:KI521245.1	LN:5444
+ at SQ	SN:AYCK01029658.1	LN:5442
+ at SQ	SN:KI521254.1	LN:5438
+ at SQ	SN:AYCK01029659.1	LN:5413
+ at SQ	SN:AYCK01029660.1	LN:5407
+ at SQ	SN:KI521255.1	LN:5392
+ at SQ	SN:KI521259.1	LN:5387
+ at SQ	SN:KI521268.1	LN:5378
+ at SQ	SN:KI521251.1	LN:5368
+ at SQ	SN:AYCK01029661.1	LN:5367
+ at SQ	SN:AYCK01029662.1	LN:5366
+ at SQ	SN:KI521266.1	LN:5362
+ at SQ	SN:KI521257.1	LN:5359
+ at SQ	SN:AYCK01029663.1	LN:5358
+ at SQ	SN:AYCK01029664.1	LN:5357
+ at SQ	SN:AYCK01029665.1	LN:5357
+ at SQ	SN:AYCK01029666.1	LN:5355
+ at SQ	SN:AYCK01029667.1	LN:5349
+ at SQ	SN:KI521270.1	LN:5346
+ at SQ	SN:AYCK01029668.1	LN:5340
+ at SQ	SN:KI521237.1	LN:5333
+ at SQ	SN:KI521273.1	LN:5327
+ at SQ	SN:KI521280.1	LN:5316
+ at SQ	SN:KI521265.1	LN:5297
+ at SQ	SN:AYCK01028395.1	LN:5289
+ at SQ	SN:KI521253.1	LN:5288
+ at SQ	SN:AYCK01029669.1	LN:5283
+ at SQ	SN:AYCK01028400.1	LN:5281
+ at SQ	SN:AYCK01029670.1	LN:5281
+ at SQ	SN:AYCK01029671.1	LN:5278
+ at SQ	SN:AYCK01029672.1	LN:5275
+ at SQ	SN:KI521317.1	LN:5268
+ at SQ	SN:AYCK01029673.1	LN:5264
+ at SQ	SN:KI521250.1	LN:5262
+ at SQ	SN:KI521274.1	LN:5258
+ at SQ	SN:KI521256.1	LN:5250
+ at SQ	SN:AYCK01029674.1	LN:5249
+ at SQ	SN:AYCK01029675.1	LN:5231
+ at SQ	SN:AYCK01029676.1	LN:5219
+ at SQ	SN:AYCK01029677.1	LN:5213
+ at SQ	SN:AYCK01029678.1	LN:5187
+ at SQ	SN:AYCK01029679.1	LN:5167
+ at SQ	SN:KI521287.1	LN:5148
+ at SQ	SN:AYCK01029680.1	LN:5142
+ at SQ	SN:KI521278.1	LN:5135
+ at SQ	SN:KI521277.1	LN:5124
+ at SQ	SN:AYCK01029681.1	LN:5115
+ at SQ	SN:KI521300.1	LN:5112
+ at SQ	SN:AYCK01029682.1	LN:5109
+ at SQ	SN:AYCK01029683.1	LN:5103
+ at SQ	SN:AYCK01029684.1	LN:5097
+ at SQ	SN:AYCK01029685.1	LN:5087
+ at SQ	SN:KI521271.1	LN:5061
+ at SQ	SN:KI521315.1	LN:5054
+ at SQ	SN:KI521279.1	LN:5041
+ at SQ	SN:AYCK01029686.1	LN:5025
+ at SQ	SN:AYCK01029687.1	LN:5005
+ at SQ	SN:KI521276.1	LN:5003
+ at SQ	SN:AYCK01029688.1	LN:4988
+ at SQ	SN:KI521288.1	LN:4987
+ at SQ	SN:AYCK01029689.1	LN:4981
+ at SQ	SN:AYCK01029690.1	LN:4980
+ at SQ	SN:AYCK01029691.1	LN:4975
+ at SQ	SN:AYCK01028453.1	LN:4934
+ at SQ	SN:AYCK01029692.1	LN:4929
+ at SQ	SN:AYCK01028456.1	LN:4913
+ at SQ	SN:KI521289.1	LN:4910
+ at SQ	SN:KI521263.1	LN:4899
+ at SQ	SN:KI521281.1	LN:4878
+ at SQ	SN:AYCK01029693.1	LN:4868
+ at SQ	SN:AYCK01029694.1	LN:4865
+ at SQ	SN:AYCK01029695.1	LN:4863
+ at SQ	SN:AYCK01029696.1	LN:4862
+ at SQ	SN:AYCK01029697.1	LN:4854
+ at SQ	SN:AYCK01029698.1	LN:4851
+ at SQ	SN:AYCK01029699.1	LN:4849
+ at SQ	SN:AYCK01029700.1	LN:4841
+ at SQ	SN:AYCK01029701.1	LN:4841
+ at SQ	SN:AYCK01029702.1	LN:4836
+ at SQ	SN:KI521246.1	LN:4828
+ at SQ	SN:AYCK01029703.1	LN:4825
+ at SQ	SN:KI521292.1	LN:4814
+ at SQ	SN:KI521295.1	LN:4811
+ at SQ	SN:KI521285.1	LN:4800
+ at SQ	SN:AYCK01029704.1	LN:4800
+ at SQ	SN:KI521298.1	LN:4772
+ at SQ	SN:AYCK01029705.1	LN:4751
+ at SQ	SN:KI521360.1	LN:4739
+ at SQ	SN:KI521301.1	LN:4738
+ at SQ	SN:AYCK01029706.1	LN:4737
+ at SQ	SN:AYCK01029707.1	LN:4736
+ at SQ	SN:AYCK01029708.1	LN:4732
+ at SQ	SN:KI521299.1	LN:4723
+ at SQ	SN:KI521294.1	LN:4716
+ at SQ	SN:KI521283.1	LN:4690
+ at SQ	SN:AYCK01029709.1	LN:4690
+ at SQ	SN:AYCK01029710.1	LN:4684
+ at SQ	SN:AYCK01029711.1	LN:4683
+ at SQ	SN:AYCK01029712.1	LN:4669
+ at SQ	SN:AYCK01029713.1	LN:4664
+ at SQ	SN:AYCK01029714.1	LN:4654
+ at SQ	SN:AYCK01029715.1	LN:4653
+ at SQ	SN:KI521267.1	LN:4650
+ at SQ	SN:AYCK01029716.1	LN:4646
+ at SQ	SN:KI521297.1	LN:4645
+ at SQ	SN:KI521291.1	LN:4644
+ at SQ	SN:KI521293.1	LN:4640
+ at SQ	SN:AYCK01029717.1	LN:4629
+ at SQ	SN:AYCK01028502.1	LN:4615
+ at SQ	SN:AYCK01029718.1	LN:4614
+ at SQ	SN:AYCK01029719.1	LN:4608
+ at SQ	SN:KI521282.1	LN:4594
+ at SQ	SN:AYCK01029720.1	LN:4572
+ at SQ	SN:KI521306.1	LN:4569
+ at SQ	SN:AYCK01029721.1	LN:4567
+ at SQ	SN:AYCK01029722.1	LN:4563
+ at SQ	SN:AYCK01029723.1	LN:4561
+ at SQ	SN:AYCK01029724.1	LN:4557
+ at SQ	SN:AYCK01028514.1	LN:4545
+ at SQ	SN:AYCK01029725.1	LN:4541
+ at SQ	SN:AYCK01029726.1	LN:4534
+ at SQ	SN:AYCK01029727.1	LN:4534
+ at SQ	SN:KI521305.1	LN:4512
+ at SQ	SN:KI521303.1	LN:4504
+ at SQ	SN:AYCK01029728.1	LN:4503
+ at SQ	SN:KI521308.1	LN:4500
+ at SQ	SN:AYCK01029729.1	LN:4500
+ at SQ	SN:AYCK01028523.1	LN:4492
+ at SQ	SN:AYCK01029730.1	LN:4492
+ at SQ	SN:KI521310.1	LN:4488
+ at SQ	SN:KI521296.1	LN:4485
+ at SQ	SN:KI521302.1	LN:4478
+ at SQ	SN:AYCK01029731.1	LN:4467
+ at SQ	SN:KI521319.1	LN:4456
+ at SQ	SN:AYCK01028542.1	LN:4454
+ at SQ	SN:KI521313.1	LN:4453
+ at SQ	SN:AYCK01029732.1	LN:4445
+ at SQ	SN:AYCK01029733.1	LN:4444
+ at SQ	SN:AYCK01029734.1	LN:4444
+ at SQ	SN:AYCK01029735.1	LN:4437
+ at SQ	SN:AYCK01029736.1	LN:4434
+ at SQ	SN:AYCK01029737.1	LN:4427
+ at SQ	SN:AYCK01029738.1	LN:4427
+ at SQ	SN:AYCK01029739.1	LN:4425
+ at SQ	SN:KI521312.1	LN:4424
+ at SQ	SN:KI521318.1	LN:4412
+ at SQ	SN:AYCK01029740.1	LN:4409
+ at SQ	SN:AYCK01029741.1	LN:4407
+ at SQ	SN:KI521324.1	LN:4394
+ at SQ	SN:KI521326.1	LN:4381
+ at SQ	SN:AYCK01029742.1	LN:4381
+ at SQ	SN:AYCK01029743.1	LN:4371
+ at SQ	SN:KI521307.1	LN:4369
+ at SQ	SN:AYCK01029744.1	LN:4369
+ at SQ	SN:AYCK01029745.1	LN:4367
+ at SQ	SN:AYCK01029746.1	LN:4361
+ at SQ	SN:AYCK01029747.1	LN:4352
+ at SQ	SN:AYCK01029748.1	LN:4350
+ at SQ	SN:AYCK01029749.1	LN:4337
+ at SQ	SN:AYCK01028563.1	LN:4332
+ at SQ	SN:KI521320.1	LN:4328
+ at SQ	SN:KI521331.1	LN:4325
+ at SQ	SN:AYCK01029750.1	LN:4315
+ at SQ	SN:AYCK01029751.1	LN:4308
+ at SQ	SN:AYCK01029752.1	LN:4300
+ at SQ	SN:AYCK01028566.1	LN:4295
+ at SQ	SN:KI521327.1	LN:4292
+ at SQ	SN:KI521323.1	LN:4285
+ at SQ	SN:KI521309.1	LN:4277
+ at SQ	SN:KI521321.1	LN:4275
+ at SQ	SN:KI521322.1	LN:4269
+ at SQ	SN:AYCK01029753.1	LN:4258
+ at SQ	SN:AYCK01029754.1	LN:4257
+ at SQ	SN:AYCK01029755.1	LN:4251
+ at SQ	SN:KI521329.1	LN:4249
+ at SQ	SN:AYCK01029756.1	LN:4247
+ at SQ	SN:AYCK01029757.1	LN:4243
+ at SQ	SN:AYCK01029758.1	LN:4238
+ at SQ	SN:KI521400.1	LN:4213
+ at SQ	SN:AYCK01029759.1	LN:4204
+ at SQ	SN:AYCK01029760.1	LN:4201
+ at SQ	SN:AYCK01029761.1	LN:4195
+ at SQ	SN:KI521341.1	LN:4192
+ at SQ	SN:AYCK01029762.1	LN:4184
+ at SQ	SN:AYCK01029763.1	LN:4184
+ at SQ	SN:AYCK01029764.1	LN:4176
+ at SQ	SN:AYCK01029765.1	LN:4175
+ at SQ	SN:AYCK01029766.1	LN:4169
+ at SQ	SN:AYCK01029767.1	LN:4169
+ at SQ	SN:AYCK01029768.1	LN:4167
+ at SQ	SN:AYCK01029769.1	LN:4163
+ at SQ	SN:AYCK01029770.1	LN:4158
+ at SQ	SN:AYCK01029771.1	LN:4155
+ at SQ	SN:KI521325.1	LN:4154
+ at SQ	SN:KI521314.1	LN:4151
+ at SQ	SN:KI521338.1	LN:4146
+ at SQ	SN:KI521348.1	LN:4143
+ at SQ	SN:AYCK01029772.1	LN:4143
+ at SQ	SN:AYCK01029773.1	LN:4135
+ at SQ	SN:AYCK01029774.1	LN:4132
+ at SQ	SN:AYCK01029775.1	LN:4128
+ at SQ	SN:KI521345.1	LN:4122
+ at SQ	SN:AYCK01029776.1	LN:4119
+ at SQ	SN:KI521337.1	LN:4112
+ at SQ	SN:AYCK01029777.1	LN:4093
+ at SQ	SN:AYCK01028585.1	LN:4087
+ at SQ	SN:AYCK01028586.1	LN:4079
+ at SQ	SN:AYCK01029778.1	LN:4076
+ at SQ	SN:AYCK01029779.1	LN:4066
+ at SQ	SN:KI521355.1	LN:4060
+ at SQ	SN:KI521339.1	LN:4057
+ at SQ	SN:KI521354.1	LN:4053
+ at SQ	SN:AYCK01028591.1	LN:4046
+ at SQ	SN:AYCK01029780.1	LN:4046
+ at SQ	SN:AYCK01029781.1	LN:4045
+ at SQ	SN:KI521330.1	LN:4043
+ at SQ	SN:KI521286.1	LN:4037
+ at SQ	SN:AYCK01029782.1	LN:4033
+ at SQ	SN:KI521356.1	LN:4032
+ at SQ	SN:AYCK01029783.1	LN:4030
+ at SQ	SN:KI521407.1	LN:4026
+ at SQ	SN:KI521332.1	LN:4022
+ at SQ	SN:AYCK01029784.1	LN:4018
+ at SQ	SN:AYCK01029785.1	LN:4011
+ at SQ	SN:KI521350.1	LN:4006
+ at SQ	SN:KI521328.1	LN:4005
+ at SQ	SN:AYCK01029786.1	LN:3998
+ at SQ	SN:KI521361.1	LN:3996
+ at SQ	SN:AYCK01029787.1	LN:3988
+ at SQ	SN:AYCK01029788.1	LN:3981
+ at SQ	SN:AYCK01029789.1	LN:3977
+ at SQ	SN:KI521359.1	LN:3973
+ at SQ	SN:AYCK01029790.1	LN:3965
+ at SQ	SN:KI521358.1	LN:3961
+ at SQ	SN:AYCK01029791.1	LN:3961
+ at SQ	SN:KI521343.1	LN:3951
+ at SQ	SN:AYCK01029792.1	LN:3951
+ at SQ	SN:AYCK01029793.1	LN:3950
+ at SQ	SN:KI521342.1	LN:3948
+ at SQ	SN:AYCK01029794.1	LN:3945
+ at SQ	SN:KI521369.1	LN:3944
+ at SQ	SN:AYCK01029795.1	LN:3937
+ at SQ	SN:KI521370.1	LN:3936
+ at SQ	SN:KI521367.1	LN:3929
+ at SQ	SN:AYCK01029796.1	LN:3929
+ at SQ	SN:AYCK01029797.1	LN:3925
+ at SQ	SN:KI521362.1	LN:3921
+ at SQ	SN:AYCK01029798.1	LN:3919
+ at SQ	SN:KI521352.1	LN:3916
+ at SQ	SN:AYCK01029799.1	LN:3912
+ at SQ	SN:KI521340.1	LN:3906
+ at SQ	SN:AYCK01029800.1	LN:3899
+ at SQ	SN:KI521351.1	LN:3898
+ at SQ	SN:AYCK01029801.1	LN:3896
+ at SQ	SN:KI521347.1	LN:3892
+ at SQ	SN:KI521427.1	LN:3883
+ at SQ	SN:AYCK01028610.1	LN:3882
+ at SQ	SN:KI521378.1	LN:3882
+ at SQ	SN:KI521346.1	LN:3879
+ at SQ	SN:AYCK01029802.1	LN:3876
+ at SQ	SN:AYCK01029803.1	LN:3876
+ at SQ	SN:AYCK01029804.1	LN:3874
+ at SQ	SN:AYCK01029805.1	LN:3869
+ at SQ	SN:AYCK01029806.1	LN:3865
+ at SQ	SN:AYCK01028611.1	LN:3861
+ at SQ	SN:AYCK01028612.1	LN:3861
+ at SQ	SN:KI521353.1	LN:3857
+ at SQ	SN:KI521379.1	LN:3857
+ at SQ	SN:AYCK01029807.1	LN:3854
+ at SQ	SN:AYCK01029808.1	LN:3831
+ at SQ	SN:KI521377.1	LN:3830
+ at SQ	SN:KI521366.1	LN:3815
+ at SQ	SN:AYCK01029809.1	LN:3813
+ at SQ	SN:KI521373.1	LN:3808
+ at SQ	SN:KI521381.1	LN:3800
+ at SQ	SN:KI521372.1	LN:3797
+ at SQ	SN:AYCK01029810.1	LN:3797
+ at SQ	SN:KI521334.1	LN:3796
+ at SQ	SN:AYCK01029811.1	LN:3791
+ at SQ	SN:AYCK01029812.1	LN:3790
+ at SQ	SN:AYCK01029813.1	LN:3789
+ at SQ	SN:KI521374.1	LN:3787
+ at SQ	SN:AYCK01029814.1	LN:3787
+ at SQ	SN:AYCK01029815.1	LN:3786
+ at SQ	SN:AYCK01029816.1	LN:3780
+ at SQ	SN:KI521385.1	LN:3779
+ at SQ	SN:AYCK01028627.1	LN:3773
+ at SQ	SN:AYCK01028632.1	LN:3770
+ at SQ	SN:AYCK01029817.1	LN:3768
+ at SQ	SN:KI521386.1	LN:3766
+ at SQ	SN:KI521375.1	LN:3765
+ at SQ	SN:AYCK01029818.1	LN:3741
+ at SQ	SN:AYCK01029819.1	LN:3741
+ at SQ	SN:AYCK01029820.1	LN:3738
+ at SQ	SN:AYCK01029821.1	LN:3729
+ at SQ	SN:KI521368.1	LN:3726
+ at SQ	SN:KI521393.1	LN:3714
+ at SQ	SN:KI521390.1	LN:3713
+ at SQ	SN:AYCK01029822.1	LN:3707
+ at SQ	SN:AYCK01029823.1	LN:3707
+ at SQ	SN:AYCK01029824.1	LN:3702
+ at SQ	SN:AYCK01029825.1	LN:3701
+ at SQ	SN:KI521371.1	LN:3700
+ at SQ	SN:KI521388.1	LN:3694
+ at SQ	SN:KI521363.1	LN:3693
+ at SQ	SN:AYCK01029826.1	LN:3693
+ at SQ	SN:KI521333.1	LN:3692
+ at SQ	SN:AYCK01029827.1	LN:3684
+ at SQ	SN:KI521383.1	LN:3681
+ at SQ	SN:AYCK01028646.1	LN:3679
+ at SQ	SN:AYCK01029828.1	LN:3674
+ at SQ	SN:KI521397.1	LN:3662
+ at SQ	SN:KI521365.1	LN:3661
+ at SQ	SN:AYCK01029829.1	LN:3661
+ at SQ	SN:AYCK01029830.1	LN:3661
+ at SQ	SN:AYCK01029831.1	LN:3656
+ at SQ	SN:KI521395.1	LN:3653
+ at SQ	SN:AYCK01029832.1	LN:3652
+ at SQ	SN:AYCK01029833.1	LN:3643
+ at SQ	SN:AYCK01029834.1	LN:3639
+ at SQ	SN:KI521376.1	LN:3637
+ at SQ	SN:KI521394.1	LN:3635
+ at SQ	SN:KI521336.1	LN:3631
+ at SQ	SN:AYCK01029835.1	LN:3630
+ at SQ	SN:KI521364.1	LN:3628
+ at SQ	SN:AYCK01029836.1	LN:3627
+ at SQ	SN:AYCK01029837.1	LN:3625
+ at SQ	SN:AYCK01029838.1	LN:3618
+ at SQ	SN:AYCK01029839.1	LN:3609
+ at SQ	SN:KI521391.1	LN:3608
+ at SQ	SN:AYCK01029840.1	LN:3608
+ at SQ	SN:KI521384.1	LN:3604
+ at SQ	SN:AYCK01029841.1	LN:3604
+ at SQ	SN:AYCK01029842.1	LN:3595
+ at SQ	SN:AYCK01029843.1	LN:3589
+ at SQ	SN:AYCK01029844.1	LN:3581
+ at SQ	SN:KI521402.1	LN:3578
+ at SQ	SN:KI521405.1	LN:3577
+ at SQ	SN:KI521404.1	LN:3574
+ at SQ	SN:AYCK01028653.1	LN:3569
+ at SQ	SN:AYCK01029845.1	LN:3569
+ at SQ	SN:KI521471.1	LN:3562
+ at SQ	SN:AYCK01029846.1	LN:3562
+ at SQ	SN:AYCK01029847.1	LN:3555
+ at SQ	SN:AYCK01029848.1	LN:3554
+ at SQ	SN:AYCK01029849.1	LN:3552
+ at SQ	SN:AYCK01029850.1	LN:3551
+ at SQ	SN:KI521406.1	LN:3549
+ at SQ	SN:KI521311.1	LN:3547
+ at SQ	SN:KI521392.1	LN:3542
+ at SQ	SN:AYCK01029851.1	LN:3542
+ at SQ	SN:KI521403.1	LN:3539
+ at SQ	SN:AYCK01028664.1	LN:3526
+ at SQ	SN:AYCK01028665.1	LN:3524
+ at SQ	SN:AYCK01029852.1	LN:3523
+ at SQ	SN:AYCK01029853.1	LN:3521
+ at SQ	SN:AYCK01029854.1	LN:3513
+ at SQ	SN:AYCK01029855.1	LN:3513
+ at SQ	SN:KI521396.1	LN:3509
+ at SQ	SN:AYCK01029856.1	LN:3509
+ at SQ	SN:KI521389.1	LN:3505
+ at SQ	SN:AYCK01029857.1	LN:3504
+ at SQ	SN:AYCK01028666.1	LN:3503
+ at SQ	SN:AYCK01029858.1	LN:3501
+ at SQ	SN:AYCK01029859.1	LN:3496
+ at SQ	SN:AYCK01029860.1	LN:3492
+ at SQ	SN:KI521335.1	LN:3488
+ at SQ	SN:AYCK01029861.1	LN:3486
+ at SQ	SN:AYCK01029862.1	LN:3483
+ at SQ	SN:KI521410.1	LN:3480
+ at SQ	SN:AYCK01029863.1	LN:3474
+ at SQ	SN:AYCK01029864.1	LN:3465
+ at SQ	SN:AYCK01029865.1	LN:3461
+ at SQ	SN:AYCK01029866.1	LN:3460
+ at SQ	SN:AYCK01029867.1	LN:3459
+ at SQ	SN:AYCK01029868.1	LN:3458
+ at SQ	SN:AYCK01029869.1	LN:3455
+ at SQ	SN:AYCK01029870.1	LN:3454
+ at SQ	SN:KI521408.1	LN:3448
+ at SQ	SN:AYCK01029871.1	LN:3448
+ at SQ	SN:KI521380.1	LN:3446
+ at SQ	SN:KI521398.1	LN:3445
+ at SQ	SN:AYCK01029872.1	LN:3442
+ at SQ	SN:KI521415.1	LN:3438
+ at SQ	SN:KI521401.1	LN:3433
+ at SQ	SN:AYCK01028689.1	LN:3426
+ at SQ	SN:KI521416.1	LN:3426
+ at SQ	SN:AYCK01029873.1	LN:3420
+ at SQ	SN:AYCK01029874.1	LN:3407
+ at SQ	SN:AYCK01029875.1	LN:3406
+ at SQ	SN:AYCK01029876.1	LN:3403
+ at SQ	SN:AYCK01029877.1	LN:3394
+ at SQ	SN:KI521387.1	LN:3389
+ at SQ	SN:AYCK01029878.1	LN:3384
+ at SQ	SN:AYCK01028698.1	LN:3380
+ at SQ	SN:AYCK01029879.1	LN:3377
+ at SQ	SN:KI521419.1	LN:3374
+ at SQ	SN:KI521417.1	LN:3373
+ at SQ	SN:AYCK01029880.1	LN:3364
+ at SQ	SN:KI521414.1	LN:3360
+ at SQ	SN:AYCK01029881.1	LN:3352
+ at SQ	SN:AYCK01029882.1	LN:3335
+ at SQ	SN:AYCK01029883.1	LN:3329
+ at SQ	SN:AYCK01028705.1	LN:3326
+ at SQ	SN:AYCK01029884.1	LN:3325
+ at SQ	SN:AYCK01029885.1	LN:3324
+ at SQ	SN:AYCK01029886.1	LN:3315
+ at SQ	SN:AYCK01029887.1	LN:3315
+ at SQ	SN:KI521399.1	LN:3311
+ at SQ	SN:KI521461.1	LN:3306
+ at SQ	SN:AYCK01029888.1	LN:3306
+ at SQ	SN:AYCK01029889.1	LN:3306
+ at SQ	SN:AYCK01029890.1	LN:3305
+ at SQ	SN:AYCK01028712.1	LN:3300
+ at SQ	SN:AYCK01028713.1	LN:3300
+ at SQ	SN:AYCK01028716.1	LN:3296
+ at SQ	SN:AYCK01029891.1	LN:3293
+ at SQ	SN:KI521411.1	LN:3287
+ at SQ	SN:AYCK01029892.1	LN:3285
+ at SQ	SN:AYCK01028721.1	LN:3283
+ at SQ	SN:AYCK01029893.1	LN:3279
+ at SQ	SN:AYCK01029894.1	LN:3273
+ at SQ	SN:AYCK01029895.1	LN:3272
+ at SQ	SN:AYCK01029896.1	LN:3269
+ at SQ	SN:AYCK01029897.1	LN:3264
+ at SQ	SN:AYCK01029898.1	LN:3264
+ at SQ	SN:AYCK01029899.1	LN:3263
+ at SQ	SN:AYCK01029900.1	LN:3258
+ at SQ	SN:AYCK01029901.1	LN:3256
+ at SQ	SN:AYCK01029902.1	LN:3255
+ at SQ	SN:AYCK01029903.1	LN:3252
+ at SQ	SN:AYCK01029904.1	LN:3248
+ at SQ	SN:AYCK01029905.1	LN:3246
+ at SQ	SN:AYCK01029906.1	LN:3237
+ at SQ	SN:KI521428.1	LN:3227
+ at SQ	SN:KI521433.1	LN:3222
+ at SQ	SN:KI521431.1	LN:3220
+ at SQ	SN:KI521434.1	LN:3219
+ at SQ	SN:KI521425.1	LN:3215
+ at SQ	SN:KI521435.1	LN:3215
+ at SQ	SN:AYCK01028734.1	LN:3213
+ at SQ	SN:KI521421.1	LN:3212
+ at SQ	SN:AYCK01029907.1	LN:3211
+ at SQ	SN:AYCK01029908.1	LN:3211
+ at SQ	SN:AYCK01029909.1	LN:3205
+ at SQ	SN:KI521424.1	LN:3204
+ at SQ	SN:AYCK01029910.1	LN:3204
+ at SQ	SN:AYCK01028737.1	LN:3203
+ at SQ	SN:AYCK01028738.1	LN:3201
+ at SQ	SN:KI521422.1	LN:3200
+ at SQ	SN:AYCK01029911.1	LN:3199
+ at SQ	SN:AYCK01029912.1	LN:3198
+ at SQ	SN:AYCK01029913.1	LN:3196
+ at SQ	SN:AYCK01029914.1	LN:3191
+ at SQ	SN:AYCK01029915.1	LN:3189
+ at SQ	SN:AYCK01028745.1	LN:3187
+ at SQ	SN:KI521437.1	LN:3179
+ at SQ	SN:AYCK01029916.1	LN:3173
+ at SQ	SN:AYCK01029917.1	LN:3172
+ at SQ	SN:AYCK01029918.1	LN:3172
+ at SQ	SN:KI521420.1	LN:3168
+ at SQ	SN:KI521438.1	LN:3153
+ at SQ	SN:AYCK01029919.1	LN:3153
+ at SQ	SN:AYCK01028752.1	LN:3151
+ at SQ	SN:AYCK01028753.1	LN:3151
+ at SQ	SN:AYCK01029920.1	LN:3147
+ at SQ	SN:KI521423.1	LN:3145
+ at SQ	SN:KI521439.1	LN:3143
+ at SQ	SN:AYCK01029921.1	LN:3143
+ at SQ	SN:AYCK01029922.1	LN:3140
+ at SQ	SN:AYCK01028756.1	LN:3139
+ at SQ	SN:AYCK01029923.1	LN:3139
+ at SQ	SN:AYCK01029924.1	LN:3138
+ at SQ	SN:KI521430.1	LN:3137
+ at SQ	SN:AYCK01029925.1	LN:3137
+ at SQ	SN:KI521440.1	LN:3135
+ at SQ	SN:KI521441.1	LN:3131
+ at SQ	SN:KI521443.1	LN:3123
+ at SQ	SN:AYCK01029926.1	LN:3113
+ at SQ	SN:KI521436.1	LN:3112
+ at SQ	SN:AYCK01029927.1	LN:3110
+ at SQ	SN:AYCK01029928.1	LN:3077
+ at SQ	SN:AYCK01029929.1	LN:3076
+ at SQ	SN:AYCK01029930.1	LN:3074
+ at SQ	SN:AYCK01029931.1	LN:3071
+ at SQ	SN:KI521382.1	LN:3070
+ at SQ	SN:KI521409.1	LN:3070
+ at SQ	SN:AYCK01029932.1	LN:3070
+ at SQ	SN:KI521418.1	LN:3069
+ at SQ	SN:AYCK01029933.1	LN:3069
+ at SQ	SN:AYCK01029934.1	LN:3065
+ at SQ	SN:KI521413.1	LN:3061
+ at SQ	SN:AYCK01029935.1	LN:3057
+ at SQ	SN:AYCK01029936.1	LN:3055
+ at SQ	SN:AYCK01029937.1	LN:3044
+ at SQ	SN:KI521444.1	LN:3041
+ at SQ	SN:AYCK01029938.1	LN:3035
+ at SQ	SN:AYCK01029939.1	LN:3034
+ at SQ	SN:AYCK01029940.1	LN:3034
+ at SQ	SN:AYCK01029941.1	LN:3024
+ at SQ	SN:KI521429.1	LN:3021
+ at SQ	SN:AYCK01029942.1	LN:3018
+ at SQ	SN:AYCK01029943.1	LN:3017
+ at SQ	SN:KI521448.1	LN:3011
+ at SQ	SN:KI521447.1	LN:3002
+ at SQ	SN:AYCK01029944.1	LN:3000
+ at SQ	SN:AYCK01029945.1	LN:3000
+ at SQ	SN:KI521426.1	LN:2991
+ at SQ	SN:AYCK01029946.1	LN:2985
+ at SQ	SN:AYCK01028790.1	LN:2979
+ at SQ	SN:AYCK01029947.1	LN:2973
+ at SQ	SN:AYCK01029948.1	LN:2960
+ at SQ	SN:AYCK01029949.1	LN:2959
+ at SQ	SN:AYCK01029950.1	LN:2958
+ at SQ	SN:KI521445.1	LN:2957
+ at SQ	SN:AYCK01029951.1	LN:2944
+ at SQ	SN:AYCK01029952.1	LN:2943
+ at SQ	SN:KI521442.1	LN:2921
+ at SQ	SN:AYCK01029953.1	LN:2916
+ at SQ	SN:KI521453.1	LN:2914
+ at SQ	SN:AYCK01029954.1	LN:2908
+ at SQ	SN:AYCK01029955.1	LN:2902
+ at SQ	SN:AYCK01029956.1	LN:2898
+ at SQ	SN:AYCK01029957.1	LN:2896
+ at SQ	SN:AYCK01029958.1	LN:2889
+ at SQ	SN:AYCK01029959.1	LN:2888
+ at SQ	SN:KI521455.1	LN:2882
+ at SQ	SN:AYCK01029960.1	LN:2882
+ at SQ	SN:AYCK01029961.1	LN:2879
+ at SQ	SN:AYCK01029962.1	LN:2875
+ at SQ	SN:KI521454.1	LN:2868
+ at SQ	SN:AYCK01029963.1	LN:2861
+ at SQ	SN:AYCK01029964.1	LN:2859
+ at SQ	SN:AYCK01029965.1	LN:2855
+ at SQ	SN:KI521456.1	LN:2854
+ at SQ	SN:AYCK01029966.1	LN:2854
+ at SQ	SN:AYCK01029967.1	LN:2848
+ at SQ	SN:KI521457.1	LN:2828
+ at SQ	SN:AYCK01029968.1	LN:2827
+ at SQ	SN:KI521432.1	LN:2820
+ at SQ	SN:AYCK01029969.1	LN:2819
+ at SQ	SN:AYCK01029970.1	LN:2814
+ at SQ	SN:KI521446.1	LN:2809
+ at SQ	SN:AYCK01029971.1	LN:2808
+ at SQ	SN:AYCK01029972.1	LN:2805
+ at SQ	SN:KI521450.1	LN:2803
+ at SQ	SN:AYCK01028833.1	LN:2792
+ at SQ	SN:KI521451.1	LN:2790
+ at SQ	SN:AYCK01028834.1	LN:2786
+ at SQ	SN:AYCK01028835.1	LN:2786
+ at SQ	SN:AYCK01029973.1	LN:2785
+ at SQ	SN:AYCK01029974.1	LN:2784
+ at SQ	SN:AYCK01029975.1	LN:2778
+ at SQ	SN:AYCK01029976.1	LN:2754
+ at SQ	SN:KI521449.1	LN:2751
+ at SQ	SN:AYCK01029977.1	LN:2740
+ at SQ	SN:AYCK01029978.1	LN:2738
+ at SQ	SN:AYCK01028850.1	LN:2735
+ at SQ	SN:KI521460.1	LN:2732
+ at SQ	SN:AYCK01029979.1	LN:2728
+ at SQ	SN:AYCK01029980.1	LN:2724
+ at SQ	SN:AYCK01029981.1	LN:2717
+ at SQ	SN:AYCK01028855.1	LN:2713
+ at SQ	SN:AYCK01029982.1	LN:2712
+ at SQ	SN:AYCK01029983.1	LN:2710
+ at SQ	SN:AYCK01029984.1	LN:2704
+ at SQ	SN:AYCK01029985.1	LN:2700
+ at SQ	SN:AYCK01029986.1	LN:2695
+ at SQ	SN:KI521459.1	LN:2694
+ at SQ	SN:AYCK01029987.1	LN:2693
+ at SQ	SN:AYCK01029988.1	LN:2692
+ at SQ	SN:AYCK01029989.1	LN:2688
+ at SQ	SN:AYCK01029990.1	LN:2682
+ at SQ	SN:AYCK01029991.1	LN:2682
+ at SQ	SN:AYCK01029992.1	LN:2673
+ at SQ	SN:AYCK01029993.1	LN:2673
+ at SQ	SN:KI521452.1	LN:2671
+ at SQ	SN:AYCK01029994.1	LN:2671
+ at SQ	SN:KI521458.1	LN:2670
+ at SQ	SN:AYCK01029995.1	LN:2666
+ at SQ	SN:AYCK01029996.1	LN:2658
+ at SQ	SN:AYCK01029997.1	LN:2657
+ at SQ	SN:AYCK01029998.1	LN:2654
+ at SQ	SN:AYCK01029999.1	LN:2654
+ at SQ	SN:AYCK01030000.1	LN:2651
+ at SQ	SN:AYCK01030001.1	LN:2644
+ at SQ	SN:AYCK01030002.1	LN:2643
+ at SQ	SN:AYCK01030003.1	LN:2632
+ at SQ	SN:AYCK01030004.1	LN:2631
+ at SQ	SN:AYCK01030005.1	LN:2626
+ at SQ	SN:AYCK01030006.1	LN:2625
+ at SQ	SN:AYCK01030007.1	LN:2623
+ at SQ	SN:AYCK01030008.1	LN:2619
+ at SQ	SN:AYCK01030009.1	LN:2619
+ at SQ	SN:KI521464.1	LN:2618
+ at SQ	SN:AYCK01030010.1	LN:2605
+ at SQ	SN:AYCK01030011.1	LN:2603
+ at SQ	SN:AYCK01030012.1	LN:2602
+ at SQ	SN:AYCK01030013.1	LN:2593
+ at SQ	SN:AYCK01030014.1	LN:2581
+ at SQ	SN:AYCK01030015.1	LN:2580
+ at SQ	SN:AYCK01030016.1	LN:2576
+ at SQ	SN:AYCK01030017.1	LN:2574
+ at SQ	SN:AYCK01030018.1	LN:2571
+ at SQ	SN:AYCK01028883.1	LN:2568
+ at SQ	SN:AYCK01030019.1	LN:2564
+ at SQ	SN:AYCK01030020.1	LN:2564
+ at SQ	SN:AYCK01030021.1	LN:2560
+ at SQ	SN:AYCK01028884.1	LN:2557
+ at SQ	SN:AYCK01028885.1	LN:2557
+ at SQ	SN:AYCK01030022.1	LN:2557
+ at SQ	SN:KI521466.1	LN:2547
+ at SQ	SN:AYCK01030023.1	LN:2540
+ at SQ	SN:AYCK01028891.1	LN:2538
+ at SQ	SN:AYCK01030024.1	LN:2537
+ at SQ	SN:AYCK01030025.1	LN:2530
+ at SQ	SN:AYCK01028892.1	LN:2527
+ at SQ	SN:KI521465.1	LN:2525
+ at SQ	SN:AYCK01028860.1	LN:2524
+ at SQ	SN:AYCK01030026.1	LN:2524
+ at SQ	SN:AYCK01030027.1	LN:2520
+ at SQ	SN:AYCK01028893.1	LN:2518
+ at SQ	SN:AYCK01030028.1	LN:2518
+ at SQ	SN:AYCK01030029.1	LN:2517
+ at SQ	SN:AYCK01028894.1	LN:2512
+ at SQ	SN:AYCK01030030.1	LN:2512
+ at SQ	SN:AYCK01028895.1	LN:2509
+ at SQ	SN:AYCK01030031.1	LN:2507
+ at SQ	SN:AYCK01030032.1	LN:2507
+ at SQ	SN:AYCK01030033.1	LN:2506
+ at SQ	SN:AYCK01028896.1	LN:2504
+ at SQ	SN:AYCK01030034.1	LN:2501
+ at SQ	SN:AYCK01030035.1	LN:2499
+ at SQ	SN:KI521412.1	LN:2497
+ at SQ	SN:AYCK01030036.1	LN:2496
+ at SQ	SN:AYCK01028901.1	LN:2495
+ at SQ	SN:AYCK01030037.1	LN:2495
+ at SQ	SN:AYCK01030038.1	LN:2493
+ at SQ	SN:AYCK01028872.1	LN:2490
+ at SQ	SN:KI521469.1	LN:2489
+ at SQ	SN:AYCK01030039.1	LN:2488
+ at SQ	SN:AYCK01030040.1	LN:2486
+ at SQ	SN:AYCK01030041.1	LN:2485
+ at SQ	SN:AYCK01028904.1	LN:2479
+ at SQ	SN:AYCK01030042.1	LN:2478
+ at SQ	SN:AYCK01030043.1	LN:2476
+ at SQ	SN:AYCK01030044.1	LN:2467
+ at SQ	SN:AYCK01028909.1	LN:2460
+ at SQ	SN:AYCK01030045.1	LN:2460
+ at SQ	SN:AYCK01030046.1	LN:2456
+ at SQ	SN:AYCK01030047.1	LN:2453
+ at SQ	SN:AYCK01030048.1	LN:2451
+ at SQ	SN:KI521463.1	LN:2448
+ at SQ	SN:AYCK01030049.1	LN:2448
+ at SQ	SN:KI521468.1	LN:2445
+ at SQ	SN:AYCK01030050.1	LN:2443
+ at SQ	SN:AYCK01030051.1	LN:2439
+ at SQ	SN:AYCK01030052.1	LN:2438
+ at SQ	SN:AYCK01030053.1	LN:2434
+ at SQ	SN:AYCK01030054.1	LN:2430
+ at SQ	SN:AYCK01030055.1	LN:2430
+ at SQ	SN:AYCK01030056.1	LN:2430
+ at SQ	SN:AYCK01030057.1	LN:2429
+ at SQ	SN:AYCK01030058.1	LN:2424
+ at SQ	SN:AYCK01030059.1	LN:2421
+ at SQ	SN:AYCK01030060.1	LN:2415
+ at SQ	SN:AYCK01030061.1	LN:2415
+ at SQ	SN:AYCK01030062.1	LN:2410
+ at SQ	SN:AYCK01030063.1	LN:2409
+ at SQ	SN:AYCK01030064.1	LN:2408
+ at SQ	SN:AYCK01030065.1	LN:2407
+ at SQ	SN:KI521462.1	LN:2398
+ at SQ	SN:AYCK01030066.1	LN:2397
+ at SQ	SN:AYCK01030067.1	LN:2392
+ at SQ	SN:AYCK01030068.1	LN:2386
+ at SQ	SN:AYCK01030069.1	LN:2385
+ at SQ	SN:AYCK01030070.1	LN:2382
+ at SQ	SN:AYCK01030071.1	LN:2380
+ at SQ	SN:AYCK01030072.1	LN:2379
+ at SQ	SN:AYCK01030073.1	LN:2378
+ at SQ	SN:AYCK01028922.1	LN:2377
+ at SQ	SN:AYCK01028923.1	LN:2377
+ at SQ	SN:AYCK01030074.1	LN:2377
+ at SQ	SN:AYCK01030075.1	LN:2372
+ at SQ	SN:AYCK01030076.1	LN:2371
+ at SQ	SN:AYCK01030077.1	LN:2369
+ at SQ	SN:AYCK01030078.1	LN:2368
+ at SQ	SN:AYCK01030079.1	LN:2366
+ at SQ	SN:AYCK01030080.1	LN:2357
+ at SQ	SN:AYCK01030081.1	LN:2355
+ at SQ	SN:AYCK01030082.1	LN:2354
+ at SQ	SN:AYCK01030083.1	LN:2353
+ at SQ	SN:AYCK01030084.1	LN:2349
+ at SQ	SN:KI521472.1	LN:2345
+ at SQ	SN:AYCK01030085.1	LN:2345
+ at SQ	SN:KI521473.1	LN:2338
+ at SQ	SN:AYCK01030086.1	LN:2333
+ at SQ	SN:AYCK01030087.1	LN:2332
+ at SQ	SN:KI521470.1	LN:2329
+ at SQ	SN:AYCK01030088.1	LN:2315
+ at SQ	SN:AYCK01030089.1	LN:2308
+ at SQ	SN:AYCK01030090.1	LN:2306
+ at SQ	SN:KI521479.1	LN:2305
+ at SQ	SN:AYCK01030091.1	LN:2304
+ at SQ	SN:AYCK01028934.1	LN:2301
+ at SQ	SN:AYCK01030092.1	LN:2300
+ at SQ	SN:AYCK01030093.1	LN:2299
+ at SQ	SN:AYCK01030094.1	LN:2294
+ at SQ	SN:KI521481.1	LN:2293
+ at SQ	SN:AYCK01030095.1	LN:2292
+ at SQ	SN:AYCK01030096.1	LN:2289
+ at SQ	SN:AYCK01030097.1	LN:2289
+ at SQ	SN:AYCK01030098.1	LN:2288
+ at SQ	SN:AYCK01030099.1	LN:2285
+ at SQ	SN:AYCK01030100.1	LN:2284
+ at SQ	SN:AYCK01030101.1	LN:2282
+ at SQ	SN:KI521476.1	LN:2268
+ at SQ	SN:AYCK01028941.1	LN:2265
+ at SQ	SN:AYCK01028947.1	LN:2259
+ at SQ	SN:AYCK01030102.1	LN:2259
+ at SQ	SN:AYCK01030103.1	LN:2258
+ at SQ	SN:AYCK01030104.1	LN:2254
+ at SQ	SN:AYCK01030105.1	LN:2252
+ at SQ	SN:AYCK01030106.1	LN:2252
+ at SQ	SN:AYCK01030107.1	LN:2244
+ at SQ	SN:KI521475.1	LN:2242
+ at SQ	SN:KI521467.1	LN:2240
+ at SQ	SN:AYCK01030108.1	LN:2237
+ at SQ	SN:AYCK01030109.1	LN:2236
+ at SQ	SN:AYCK01030110.1	LN:2234
+ at SQ	SN:AYCK01028954.1	LN:2232
+ at SQ	SN:AYCK01030111.1	LN:2229
+ at SQ	SN:AYCK01030112.1	LN:2225
+ at SQ	SN:AYCK01030113.1	LN:2223
+ at SQ	SN:AYCK01030114.1	LN:2223
+ at SQ	SN:AYCK01030115.1	LN:2221
+ at SQ	SN:KI521477.1	LN:2220
+ at SQ	SN:AYCK01030116.1	LN:2220
+ at SQ	SN:AYCK01030117.1	LN:2218
+ at SQ	SN:AYCK01030118.1	LN:2218
+ at SQ	SN:AYCK01030119.1	LN:2215
+ at SQ	SN:AYCK01030120.1	LN:2214
+ at SQ	SN:AYCK01030121.1	LN:2211
+ at SQ	SN:AYCK01030122.1	LN:2207
+ at SQ	SN:AYCK01030123.1	LN:2206
+ at SQ	SN:AYCK01030124.1	LN:2206
+ at SQ	SN:AYCK01028966.1	LN:2201
+ at SQ	SN:AYCK01030125.1	LN:2201
+ at SQ	SN:AYCK01030126.1	LN:2199
+ at SQ	SN:AYCK01030127.1	LN:2194
+ at SQ	SN:AYCK01030128.1	LN:2193
+ at SQ	SN:AYCK01030129.1	LN:2193
+ at SQ	SN:AYCK01030130.1	LN:2192
+ at SQ	SN:AYCK01030131.1	LN:2190
+ at SQ	SN:AYCK01030132.1	LN:2186
+ at SQ	SN:KI521485.1	LN:2184
+ at SQ	SN:KI521474.1	LN:2183
+ at SQ	SN:AYCK01030133.1	LN:2182
+ at SQ	SN:AYCK01030134.1	LN:2182
+ at SQ	SN:KI521480.1	LN:2181
+ at SQ	SN:AYCK01028969.1	LN:2177
+ at SQ	SN:AYCK01030135.1	LN:2172
+ at SQ	SN:KI521478.1	LN:2171
+ at SQ	SN:AYCK01030136.1	LN:2171
+ at SQ	SN:AYCK01030137.1	LN:2170
+ at SQ	SN:AYCK01030138.1	LN:2170
+ at SQ	SN:AYCK01030139.1	LN:2170
+ at SQ	SN:AYCK01030140.1	LN:2168
+ at SQ	SN:AYCK01030141.1	LN:2161
+ at SQ	SN:AYCK01030142.1	LN:2156
+ at SQ	SN:AYCK01030143.1	LN:2154
+ at SQ	SN:AYCK01030144.1	LN:2150
+ at SQ	SN:AYCK01030145.1	LN:2150
+ at SQ	SN:AYCK01030146.1	LN:2148
+ at SQ	SN:AYCK01030147.1	LN:2147
+ at SQ	SN:AYCK01030148.1	LN:2144
+ at SQ	SN:AYCK01030149.1	LN:2143
+ at SQ	SN:AYCK01030150.1	LN:2143
+ at SQ	SN:AYCK01030151.1	LN:2142
+ at SQ	SN:AYCK01030152.1	LN:2140
+ at SQ	SN:AYCK01030153.1	LN:2131
+ at SQ	SN:AYCK01030154.1	LN:2131
+ at SQ	SN:AYCK01030155.1	LN:2130
+ at SQ	SN:AYCK01030156.1	LN:2130
+ at SQ	SN:AYCK01028961.1	LN:2129
+ at SQ	SN:AYCK01030157.1	LN:2129
+ at SQ	SN:KI521484.1	LN:2128
+ at SQ	SN:AYCK01030158.1	LN:2127
+ at SQ	SN:AYCK01028982.1	LN:2120
+ at SQ	SN:AYCK01028983.1	LN:2115
+ at SQ	SN:AYCK01030159.1	LN:2113
+ at SQ	SN:AYCK01030160.1	LN:2113
+ at SQ	SN:AYCK01030161.1	LN:2111
+ at SQ	SN:AYCK01030162.1	LN:2110
+ at SQ	SN:AYCK01030163.1	LN:2107
+ at SQ	SN:AYCK01030164.1	LN:2106
+ at SQ	SN:AYCK01030165.1	LN:2106
+ at SQ	SN:AYCK01030166.1	LN:2105
+ at SQ	SN:AYCK01030167.1	LN:2105
+ at SQ	SN:AYCK01030168.1	LN:2102
+ at SQ	SN:AYCK01030169.1	LN:2098
+ at SQ	SN:AYCK01030170.1	LN:2098
+ at SQ	SN:AYCK01030171.1	LN:2096
+ at SQ	SN:AYCK01028986.1	LN:2091
+ at SQ	SN:AYCK01030172.1	LN:2090
+ at SQ	SN:AYCK01030173.1	LN:2085
+ at SQ	SN:AYCK01030174.1	LN:2084
+ at SQ	SN:AYCK01028987.1	LN:2078
+ at SQ	SN:AYCK01030175.1	LN:2077
+ at SQ	SN:AYCK01030176.1	LN:2072
+ at SQ	SN:AYCK01030177.1	LN:2072
+ at SQ	SN:AYCK01030178.1	LN:2070
+ at SQ	SN:AYCK01030179.1	LN:2068
+ at SQ	SN:AYCK01030180.1	LN:2061
+ at SQ	SN:AYCK01030181.1	LN:2059
+ at SQ	SN:AYCK01030182.1	LN:2058
+ at SQ	SN:AYCK01030183.1	LN:2057
+ at SQ	SN:AYCK01030184.1	LN:2055
+ at SQ	SN:AYCK01030185.1	LN:2054
+ at SQ	SN:AYCK01030186.1	LN:2053
+ at SQ	SN:AYCK01030187.1	LN:2051
+ at SQ	SN:AYCK01030188.1	LN:2049
+ at SQ	SN:AYCK01030189.1	LN:2048
+ at SQ	SN:AYCK01030190.1	LN:2044
+ at SQ	SN:AYCK01030191.1	LN:2043
+ at SQ	SN:KI521486.1	LN:2037
+ at SQ	SN:AYCK01030192.1	LN:2037
+ at SQ	SN:AYCK01030193.1	LN:2037
+ at SQ	SN:KI521482.1	LN:2030
+ at SQ	SN:AYCK01030194.1	LN:2030
+ at SQ	SN:AYCK01028993.1	LN:2029
+ at SQ	SN:AYCK01028994.1	LN:2026
+ at SQ	SN:AYCK01030195.1	LN:2024
+ at SQ	SN:AYCK01030196.1	LN:2019
+ at SQ	SN:AYCK01028995.1	LN:2017
+ at SQ	SN:AYCK01030197.1	LN:2016
+ at SQ	SN:AYCK01028998.1	LN:2012
+ at SQ	SN:AYCK01030198.1	LN:2010
+ at SQ	SN:AYCK01030199.1	LN:2009
+ at SQ	SN:AYCK01029001.1	LN:2008
+ at SQ	SN:AYCK01030200.1	LN:2005
+ at SQ	SN:AYCK01030201.1	LN:2005
+ at SQ	SN:AYCK01030202.1	LN:2003
+ at SQ	SN:AYCK01030203.1	LN:1999
+ at SQ	SN:AYCK01030204.1	LN:1995
+ at SQ	SN:AYCK01030205.1	LN:1995
+ at SQ	SN:AYCK01030206.1	LN:1994
+ at SQ	SN:AYCK01030207.1	LN:1989
+ at SQ	SN:AYCK01030208.1	LN:1988
+ at SQ	SN:KI521483.1	LN:1983
+ at SQ	SN:AYCK01030209.1	LN:1982
+ at SQ	SN:AYCK01030210.1	LN:1976
+ at SQ	SN:AYCK01030211.1	LN:1976
+ at SQ	SN:AYCK01030212.1	LN:1972
+ at SQ	SN:AYCK01030213.1	LN:1972
+ at SQ	SN:AYCK01030214.1	LN:1971
+ at SQ	SN:AYCK01030215.1	LN:1968
+ at SQ	SN:AYCK01030216.1	LN:1966
+ at SQ	SN:AYCK01030217.1	LN:1965
+ at SQ	SN:AYCK01030218.1	LN:1964
+ at SQ	SN:AYCK01030219.1	LN:1964
+ at SQ	SN:AYCK01030220.1	LN:1963
+ at SQ	SN:AYCK01030221.1	LN:1960
+ at SQ	SN:AYCK01030222.1	LN:1955
+ at SQ	SN:AYCK01030223.1	LN:1954
+ at SQ	SN:AYCK01030224.1	LN:1951
+ at SQ	SN:AYCK01030225.1	LN:1950
+ at SQ	SN:AYCK01030226.1	LN:1950
+ at SQ	SN:AYCK01030227.1	LN:1945
+ at SQ	SN:AYCK01030228.1	LN:1944
+ at SQ	SN:AYCK01030229.1	LN:1944
+ at SQ	SN:AYCK01030230.1	LN:1944
+ at SQ	SN:AYCK01030231.1	LN:1943
+ at SQ	SN:AYCK01030232.1	LN:1943
+ at SQ	SN:AYCK01030233.1	LN:1940
+ at SQ	SN:AYCK01030234.1	LN:1939
+ at SQ	SN:AYCK01030235.1	LN:1937
+ at SQ	SN:AYCK01030236.1	LN:1935
+ at SQ	SN:AYCK01030237.1	LN:1933
+ at SQ	SN:AYCK01029010.1	LN:1932
+ at SQ	SN:AYCK01030238.1	LN:1932
+ at SQ	SN:AYCK01030239.1	LN:1931
+ at SQ	SN:AYCK01030240.1	LN:1930
+ at SQ	SN:AYCK01030241.1	LN:1921
+ at SQ	SN:AYCK01029011.1	LN:1919
+ at SQ	SN:AYCK01030242.1	LN:1919
+ at SQ	SN:AYCK01029012.1	LN:1918
+ at SQ	SN:AYCK01030243.1	LN:1918
+ at SQ	SN:AYCK01030244.1	LN:1917
+ at SQ	SN:AYCK01030245.1	LN:1914
+ at SQ	SN:AYCK01030246.1	LN:1914
+ at SQ	SN:AYCK01030247.1	LN:1910
+ at SQ	SN:AYCK01030248.1	LN:1908
+ at SQ	SN:AYCK01030249.1	LN:1905
+ at SQ	SN:AYCK01030250.1	LN:1903
+ at SQ	SN:AYCK01030251.1	LN:1903
+ at SQ	SN:AYCK01030252.1	LN:1899
+ at SQ	SN:AYCK01030253.1	LN:1896
+ at SQ	SN:AYCK01030254.1	LN:1895
+ at SQ	SN:AYCK01029015.1	LN:1894
+ at SQ	SN:AYCK01030255.1	LN:1893
+ at SQ	SN:AYCK01030256.1	LN:1891
+ at SQ	SN:AYCK01030257.1	LN:1890
+ at SQ	SN:AYCK01029018.1	LN:1887
+ at SQ	SN:AYCK01030258.1	LN:1886
+ at SQ	SN:AYCK01030259.1	LN:1885
+ at SQ	SN:AYCK01030260.1	LN:1885
+ at SQ	SN:AYCK01030261.1	LN:1883
+ at SQ	SN:AYCK01028988.1	LN:1882
+ at SQ	SN:AYCK01030262.1	LN:1882
+ at SQ	SN:AYCK01030263.1	LN:1879
+ at SQ	SN:AYCK01030264.1	LN:1875
+ at SQ	SN:AYCK01030265.1	LN:1867
+ at SQ	SN:AYCK01030266.1	LN:1866
+ at SQ	SN:AYCK01030267.1	LN:1866
+ at SQ	SN:AYCK01029021.1	LN:1862
+ at SQ	SN:AYCK01030268.1	LN:1860
+ at SQ	SN:AYCK01030269.1	LN:1857
+ at SQ	SN:AYCK01030270.1	LN:1856
+ at SQ	SN:AYCK01030271.1	LN:1855
+ at SQ	SN:AYCK01029024.1	LN:1853
+ at SQ	SN:AYCK01030272.1	LN:1853
+ at SQ	SN:AYCK01030273.1	LN:1849
+ at SQ	SN:AYCK01030274.1	LN:1848
+ at SQ	SN:AYCK01030275.1	LN:1847
+ at SQ	SN:AYCK01029027.1	LN:1846
+ at SQ	SN:AYCK01030276.1	LN:1843
+ at SQ	SN:AYCK01030277.1	LN:1841
+ at SQ	SN:AYCK01030278.1	LN:1841
+ at SQ	SN:AYCK01030279.1	LN:1841
+ at SQ	SN:AYCK01030280.1	LN:1840
+ at SQ	SN:AYCK01029028.1	LN:1837
+ at SQ	SN:AYCK01030281.1	LN:1836
+ at SQ	SN:AYCK01030282.1	LN:1833
+ at SQ	SN:AYCK01030283.1	LN:1822
+ at SQ	SN:AYCK01030284.1	LN:1822
+ at SQ	SN:AYCK01030285.1	LN:1820
+ at SQ	SN:AYCK01030286.1	LN:1819
+ at SQ	SN:AYCK01030287.1	LN:1812
+ at SQ	SN:AYCK01029031.1	LN:1808
+ at SQ	SN:AYCK01030288.1	LN:1807
+ at SQ	SN:AYCK01030289.1	LN:1806
+ at SQ	SN:AYCK01030290.1	LN:1803
+ at SQ	SN:AYCK01029034.1	LN:1802
+ at SQ	SN:AYCK01030291.1	LN:1797
+ at SQ	SN:AYCK01030292.1	LN:1795
+ at SQ	SN:AYCK01030293.1	LN:1794
+ at SQ	SN:AYCK01030294.1	LN:1791
+ at SQ	SN:AYCK01030295.1	LN:1790
+ at SQ	SN:AYCK01030296.1	LN:1790
+ at SQ	SN:AYCK01030297.1	LN:1789
+ at SQ	SN:AYCK01030298.1	LN:1787
+ at SQ	SN:AYCK01030299.1	LN:1786
+ at SQ	SN:AYCK01030300.1	LN:1786
+ at SQ	SN:AYCK01029037.1	LN:1780
+ at SQ	SN:AYCK01030301.1	LN:1780
+ at SQ	SN:AYCK01029038.1	LN:1778
+ at SQ	SN:AYCK01030302.1	LN:1778
+ at SQ	SN:AYCK01029039.1	LN:1777
+ at SQ	SN:AYCK01030303.1	LN:1776
+ at SQ	SN:AYCK01030304.1	LN:1776
+ at SQ	SN:AYCK01030305.1	LN:1776
+ at SQ	SN:AYCK01030306.1	LN:1773
+ at SQ	SN:AYCK01030307.1	LN:1771
+ at SQ	SN:AYCK01030308.1	LN:1768
+ at SQ	SN:AYCK01030309.1	LN:1764
+ at SQ	SN:AYCK01030310.1	LN:1764
+ at SQ	SN:AYCK01030311.1	LN:1764
+ at SQ	SN:AYCK01030312.1	LN:1760
+ at SQ	SN:AYCK01030313.1	LN:1758
+ at SQ	SN:AYCK01030314.1	LN:1758
+ at SQ	SN:AYCK01030315.1	LN:1757
+ at SQ	SN:AYCK01030316.1	LN:1756
+ at SQ	SN:AYCK01030317.1	LN:1756
+ at SQ	SN:AYCK01030318.1	LN:1751
+ at SQ	SN:AYCK01030319.1	LN:1744
+ at SQ	SN:AYCK01029040.1	LN:1743
+ at SQ	SN:AYCK01030320.1	LN:1743
+ at SQ	SN:AYCK01029041.1	LN:1741
+ at SQ	SN:AYCK01030321.1	LN:1741
+ at SQ	SN:AYCK01030322.1	LN:1741
+ at SQ	SN:AYCK01030323.1	LN:1738
+ at SQ	SN:AYCK01030324.1	LN:1735
+ at SQ	SN:AYCK01030325.1	LN:1734
+ at SQ	SN:AYCK01030326.1	LN:1734
+ at SQ	SN:AYCK01030327.1	LN:1733
+ at SQ	SN:AYCK01029042.1	LN:1730
+ at SQ	SN:AYCK01030328.1	LN:1730
+ at SQ	SN:AYCK01030329.1	LN:1729
+ at SQ	SN:AYCK01030330.1	LN:1727
+ at SQ	SN:AYCK01030331.1	LN:1717
+ at SQ	SN:AYCK01030332.1	LN:1716
+ at SQ	SN:AYCK01030333.1	LN:1715
+ at SQ	SN:AYCK01030334.1	LN:1714
+ at SQ	SN:AYCK01030335.1	LN:1714
+ at SQ	SN:AYCK01030336.1	LN:1712
+ at SQ	SN:AYCK01030337.1	LN:1711
+ at SQ	SN:AYCK01029046.1	LN:1709
+ at SQ	SN:AYCK01029047.1	LN:1706
+ at SQ	SN:AYCK01030338.1	LN:1705
+ at SQ	SN:AYCK01030339.1	LN:1703
+ at SQ	SN:AYCK01030340.1	LN:1698
+ at SQ	SN:AYCK01030341.1	LN:1698
+ at SQ	SN:AYCK01030342.1	LN:1698
+ at SQ	SN:AYCK01030343.1	LN:1697
+ at SQ	SN:AYCK01030344.1	LN:1694
+ at SQ	SN:AYCK01030345.1	LN:1689
+ at SQ	SN:AYCK01030346.1	LN:1688
+ at SQ	SN:AYCK01030347.1	LN:1686
+ at SQ	SN:AYCK01030348.1	LN:1686
+ at SQ	SN:AYCK01030349.1	LN:1685
+ at SQ	SN:AYCK01030350.1	LN:1684
+ at SQ	SN:AYCK01030351.1	LN:1677
+ at SQ	SN:AYCK01030352.1	LN:1676
+ at SQ	SN:AYCK01030353.1	LN:1673
+ at SQ	SN:AYCK01030354.1	LN:1673
+ at SQ	SN:AYCK01030355.1	LN:1671
+ at SQ	SN:AYCK01030356.1	LN:1671
+ at SQ	SN:AYCK01030357.1	LN:1663
+ at SQ	SN:AYCK01029048.1	LN:1661
+ at SQ	SN:KI521488.1	LN:1661
+ at SQ	SN:AYCK01030358.1	LN:1658
+ at SQ	SN:AYCK01030359.1	LN:1658
+ at SQ	SN:AYCK01030360.1	LN:1656
+ at SQ	SN:AYCK01029049.1	LN:1655
+ at SQ	SN:AYCK01030361.1	LN:1653
+ at SQ	SN:AYCK01030362.1	LN:1653
+ at SQ	SN:AYCK01029050.1	LN:1652
+ at SQ	SN:AYCK01030363.1	LN:1652
+ at SQ	SN:AYCK01030364.1	LN:1650
+ at SQ	SN:KI521487.1	LN:1649
+ at SQ	SN:AYCK01030365.1	LN:1649
+ at SQ	SN:AYCK01030366.1	LN:1649
+ at SQ	SN:AYCK01030367.1	LN:1648
+ at SQ	SN:AYCK01029051.1	LN:1646
+ at SQ	SN:AYCK01030368.1	LN:1645
+ at SQ	SN:AYCK01030369.1	LN:1642
+ at SQ	SN:AYCK01030370.1	LN:1641
+ at SQ	SN:AYCK01030371.1	LN:1639
+ at SQ	SN:AYCK01030372.1	LN:1638
+ at SQ	SN:AYCK01030373.1	LN:1637
+ at SQ	SN:AYCK01030374.1	LN:1637
+ at SQ	SN:AYCK01030375.1	LN:1635
+ at SQ	SN:AYCK01029054.1	LN:1634
+ at SQ	SN:AYCK01030376.1	LN:1631
+ at SQ	SN:AYCK01030377.1	LN:1631
+ at SQ	SN:AYCK01030378.1	LN:1626
+ at SQ	SN:AYCK01030379.1	LN:1625
+ at SQ	SN:AYCK01030380.1	LN:1624
+ at SQ	SN:AYCK01030381.1	LN:1623
+ at SQ	SN:AYCK01030382.1	LN:1621
+ at SQ	SN:AYCK01030383.1	LN:1619
+ at SQ	SN:AYCK01030384.1	LN:1618
+ at SQ	SN:AYCK01030385.1	LN:1617
+ at SQ	SN:AYCK01030386.1	LN:1617
+ at SQ	SN:AYCK01030387.1	LN:1616
+ at SQ	SN:AYCK01030388.1	LN:1615
+ at SQ	SN:AYCK01030389.1	LN:1612
+ at SQ	SN:AYCK01030390.1	LN:1611
+ at SQ	SN:AYCK01030391.1	LN:1610
+ at SQ	SN:AYCK01030392.1	LN:1610
+ at SQ	SN:AYCK01030393.1	LN:1609
+ at SQ	SN:AYCK01030394.1	LN:1609
+ at SQ	SN:AYCK01030395.1	LN:1609
+ at SQ	SN:AYCK01030396.1	LN:1608
+ at SQ	SN:AYCK01030397.1	LN:1608
+ at SQ	SN:AYCK01030398.1	LN:1607
+ at SQ	SN:AYCK01030399.1	LN:1605
+ at SQ	SN:AYCK01030400.1	LN:1603
+ at SQ	SN:AYCK01030401.1	LN:1601
+ at SQ	SN:AYCK01030402.1	LN:1599
+ at SQ	SN:AYCK01030403.1	LN:1598
+ at SQ	SN:AYCK01030404.1	LN:1598
+ at SQ	SN:AYCK01030405.1	LN:1593
+ at SQ	SN:AYCK01030406.1	LN:1592
+ at SQ	SN:AYCK01030407.1	LN:1591
+ at SQ	SN:AYCK01030408.1	LN:1591
+ at SQ	SN:AYCK01030409.1	LN:1591
+ at SQ	SN:AYCK01030410.1	LN:1589
+ at SQ	SN:AYCK01030411.1	LN:1588
+ at SQ	SN:AYCK01030412.1	LN:1586
+ at SQ	SN:AYCK01030413.1	LN:1586
+ at SQ	SN:AYCK01029062.1	LN:1584
+ at SQ	SN:AYCK01030414.1	LN:1584
+ at SQ	SN:AYCK01030415.1	LN:1584
+ at SQ	SN:AYCK01030416.1	LN:1582
+ at SQ	SN:AYCK01030417.1	LN:1581
+ at SQ	SN:AYCK01030418.1	LN:1574
+ at SQ	SN:AYCK01030419.1	LN:1574
+ at SQ	SN:AYCK01030420.1	LN:1572
+ at SQ	SN:AYCK01030421.1	LN:1568
+ at SQ	SN:AYCK01030422.1	LN:1568
+ at SQ	SN:AYCK01030423.1	LN:1568
+ at SQ	SN:AYCK01030424.1	LN:1567
+ at SQ	SN:AYCK01030425.1	LN:1567
+ at SQ	SN:AYCK01030426.1	LN:1565
+ at SQ	SN:AYCK01030427.1	LN:1565
+ at SQ	SN:AYCK01030428.1	LN:1565
+ at SQ	SN:AYCK01030429.1	LN:1565
+ at SQ	SN:AYCK01030430.1	LN:1564
+ at SQ	SN:AYCK01030431.1	LN:1563
+ at SQ	SN:AYCK01030432.1	LN:1561
+ at SQ	SN:AYCK01030433.1	LN:1561
+ at SQ	SN:AYCK01030434.1	LN:1560
+ at SQ	SN:AYCK01030435.1	LN:1559
+ at SQ	SN:AYCK01030436.1	LN:1559
+ at SQ	SN:AYCK01030437.1	LN:1558
+ at SQ	SN:AYCK01030438.1	LN:1558
+ at SQ	SN:AYCK01030439.1	LN:1557
+ at SQ	SN:AYCK01030440.1	LN:1556
+ at SQ	SN:AYCK01030441.1	LN:1556
+ at SQ	SN:AYCK01030442.1	LN:1555
+ at SQ	SN:AYCK01030443.1	LN:1553
+ at SQ	SN:AYCK01030444.1	LN:1552
+ at SQ	SN:AYCK01030445.1	LN:1551
+ at SQ	SN:AYCK01030446.1	LN:1550
+ at SQ	SN:AYCK01030447.1	LN:1548
+ at SQ	SN:AYCK01030448.1	LN:1546
+ at SQ	SN:AYCK01030449.1	LN:1546
+ at SQ	SN:AYCK01030450.1	LN:1544
+ at SQ	SN:AYCK01030451.1	LN:1543
+ at SQ	SN:AYCK01030452.1	LN:1542
+ at SQ	SN:AYCK01030453.1	LN:1541
+ at SQ	SN:AYCK01030454.1	LN:1540
+ at SQ	SN:AYCK01030455.1	LN:1539
+ at SQ	SN:AYCK01030456.1	LN:1539
+ at SQ	SN:AYCK01030457.1	LN:1537
+ at SQ	SN:AYCK01030458.1	LN:1536
+ at SQ	SN:AYCK01030459.1	LN:1535
+ at SQ	SN:AYCK01030460.1	LN:1535
+ at SQ	SN:AYCK01030461.1	LN:1534
+ at SQ	SN:AYCK01030462.1	LN:1534
+ at SQ	SN:AYCK01030463.1	LN:1533
+ at SQ	SN:AYCK01030464.1	LN:1530
+ at SQ	SN:AYCK01030465.1	LN:1527
+ at SQ	SN:AYCK01030466.1	LN:1527
+ at SQ	SN:AYCK01030467.1	LN:1526
+ at SQ	SN:AYCK01030468.1	LN:1523
+ at SQ	SN:AYCK01030469.1	LN:1522
+ at SQ	SN:AYCK01030470.1	LN:1517
+ at SQ	SN:AYCK01030471.1	LN:1516
+ at SQ	SN:AYCK01030472.1	LN:1516
+ at SQ	SN:AYCK01030473.1	LN:1515
+ at SQ	SN:AYCK01030474.1	LN:1514
+ at SQ	SN:AYCK01030475.1	LN:1514
+ at SQ	SN:AYCK01030476.1	LN:1512
+ at SQ	SN:AYCK01030477.1	LN:1511
+ at SQ	SN:AYCK01030478.1	LN:1509
+ at SQ	SN:AYCK01030479.1	LN:1507
+ at SQ	SN:AYCK01030480.1	LN:1507
+ at SQ	SN:AYCK01030481.1	LN:1505
+ at SQ	SN:AYCK01029071.1	LN:1503
+ at SQ	SN:AYCK01030482.1	LN:1503
+ at SQ	SN:AYCK01030483.1	LN:1503
+ at SQ	SN:AYCK01030484.1	LN:1502
+ at SQ	SN:AYCK01030485.1	LN:1502
+ at SQ	SN:AYCK01030486.1	LN:1501
+ at SQ	SN:AYCK01029074.1	LN:1500
+ at SQ	SN:AYCK01030487.1	LN:1498
+ at SQ	SN:AYCK01030488.1	LN:1497
+ at SQ	SN:AYCK01030489.1	LN:1494
+ at SQ	SN:AYCK01030490.1	LN:1494
+ at SQ	SN:AYCK01030491.1	LN:1493
+ at SQ	SN:AYCK01030492.1	LN:1493
+ at SQ	SN:AYCK01030493.1	LN:1492
+ at SQ	SN:AYCK01030494.1	LN:1491
+ at SQ	SN:AYCK01030495.1	LN:1491
+ at SQ	SN:AYCK01030496.1	LN:1489
+ at SQ	SN:AYCK01030497.1	LN:1488
+ at SQ	SN:AYCK01030498.1	LN:1488
+ at SQ	SN:AYCK01029075.1	LN:1487
+ at SQ	SN:AYCK01030499.1	LN:1487
+ at SQ	SN:AYCK01029076.1	LN:1486
+ at SQ	SN:AYCK01030500.1	LN:1486
+ at SQ	SN:AYCK01030501.1	LN:1483
+ at SQ	SN:AYCK01030502.1	LN:1481
+ at SQ	SN:AYCK01030503.1	LN:1479
+ at SQ	SN:AYCK01030504.1	LN:1478
+ at SQ	SN:AYCK01030505.1	LN:1478
+ at SQ	SN:AYCK01030506.1	LN:1478
+ at SQ	SN:AYCK01030507.1	LN:1474
+ at SQ	SN:AYCK01030508.1	LN:1473
+ at SQ	SN:AYCK01030509.1	LN:1473
+ at SQ	SN:AYCK01030510.1	LN:1472
+ at SQ	SN:AYCK01030511.1	LN:1471
+ at SQ	SN:AYCK01030512.1	LN:1468
+ at SQ	SN:AYCK01030513.1	LN:1467
+ at SQ	SN:AYCK01030514.1	LN:1467
+ at SQ	SN:AYCK01030515.1	LN:1464
+ at SQ	SN:AYCK01030516.1	LN:1463
+ at SQ	SN:AYCK01030517.1	LN:1461
+ at SQ	SN:AYCK01030518.1	LN:1460
+ at SQ	SN:AYCK01030519.1	LN:1458
+ at SQ	SN:AYCK01030520.1	LN:1457
+ at SQ	SN:AYCK01030521.1	LN:1456
+ at SQ	SN:AYCK01030522.1	LN:1456
+ at SQ	SN:AYCK01030523.1	LN:1456
+ at SQ	SN:AYCK01030524.1	LN:1455
+ at SQ	SN:AYCK01030525.1	LN:1454
+ at SQ	SN:AYCK01030526.1	LN:1453
+ at SQ	SN:AYCK01030527.1	LN:1453
+ at SQ	SN:AYCK01029079.1	LN:1451
+ at SQ	SN:AYCK01030528.1	LN:1448
+ at SQ	SN:AYCK01030529.1	LN:1446
+ at SQ	SN:AYCK01030530.1	LN:1445
+ at SQ	SN:AYCK01029080.1	LN:1444
+ at SQ	SN:AYCK01030531.1	LN:1443
+ at SQ	SN:AYCK01030532.1	LN:1441
+ at SQ	SN:AYCK01030533.1	LN:1440
+ at SQ	SN:AYCK01030534.1	LN:1438
+ at SQ	SN:AYCK01030535.1	LN:1438
+ at SQ	SN:AYCK01030536.1	LN:1437
+ at SQ	SN:AYCK01030537.1	LN:1436
+ at SQ	SN:AYCK01030538.1	LN:1435
+ at SQ	SN:AYCK01030539.1	LN:1434
+ at SQ	SN:AYCK01030540.1	LN:1434
+ at SQ	SN:AYCK01030541.1	LN:1433
+ at SQ	SN:AYCK01029083.1	LN:1432
+ at SQ	SN:AYCK01030542.1	LN:1431
+ at SQ	SN:AYCK01030543.1	LN:1430
+ at SQ	SN:AYCK01030544.1	LN:1430
+ at SQ	SN:AYCK01029084.1	LN:1428
+ at SQ	SN:AYCK01030545.1	LN:1428
+ at SQ	SN:AYCK01030546.1	LN:1428
+ at SQ	SN:AYCK01030547.1	LN:1428
+ at SQ	SN:AYCK01029085.1	LN:1426
+ at SQ	SN:AYCK01030548.1	LN:1425
+ at SQ	SN:AYCK01030549.1	LN:1425
+ at SQ	SN:AYCK01029088.1	LN:1424
+ at SQ	SN:AYCK01030550.1	LN:1423
+ at SQ	SN:AYCK01030551.1	LN:1421
+ at SQ	SN:AYCK01030552.1	LN:1421
+ at SQ	SN:AYCK01030553.1	LN:1421
+ at SQ	SN:AYCK01030554.1	LN:1420
+ at SQ	SN:AYCK01029091.1	LN:1419
+ at SQ	SN:AYCK01030555.1	LN:1419
+ at SQ	SN:AYCK01030556.1	LN:1418
+ at SQ	SN:AYCK01030557.1	LN:1418
+ at SQ	SN:AYCK01029092.1	LN:1417
+ at SQ	SN:AYCK01030558.1	LN:1416
+ at SQ	SN:AYCK01030559.1	LN:1416
+ at SQ	SN:AYCK01030560.1	LN:1414
+ at SQ	SN:AYCK01030561.1	LN:1413
+ at SQ	SN:AYCK01030562.1	LN:1413
+ at SQ	SN:AYCK01029061.1	LN:1412
+ at SQ	SN:AYCK01030563.1	LN:1412
+ at SQ	SN:AYCK01030564.1	LN:1409
+ at SQ	SN:AYCK01030565.1	LN:1407
+ at SQ	SN:AYCK01030566.1	LN:1406
+ at SQ	SN:AYCK01030567.1	LN:1405
+ at SQ	SN:AYCK01030568.1	LN:1405
+ at SQ	SN:AYCK01030569.1	LN:1404
+ at SQ	SN:AYCK01030570.1	LN:1403
+ at SQ	SN:AYCK01030571.1	LN:1402
+ at SQ	SN:AYCK01030572.1	LN:1400
+ at SQ	SN:AYCK01030573.1	LN:1399
+ at SQ	SN:AYCK01030574.1	LN:1399
+ at SQ	SN:AYCK01029095.1	LN:1398
+ at SQ	SN:AYCK01030575.1	LN:1398
+ at SQ	SN:AYCK01030576.1	LN:1398
+ at SQ	SN:AYCK01030577.1	LN:1398
+ at SQ	SN:AYCK01030578.1	LN:1397
+ at SQ	SN:AYCK01030579.1	LN:1395
+ at SQ	SN:AYCK01030580.1	LN:1395
+ at SQ	SN:AYCK01030581.1	LN:1395
+ at SQ	SN:AYCK01030582.1	LN:1394
+ at SQ	SN:AYCK01030583.1	LN:1393
+ at SQ	SN:AYCK01030584.1	LN:1393
+ at SQ	SN:AYCK01030585.1	LN:1393
+ at SQ	SN:AYCK01030586.1	LN:1391
+ at SQ	SN:AYCK01030587.1	LN:1390
+ at SQ	SN:AYCK01029096.1	LN:1388
+ at SQ	SN:AYCK01030588.1	LN:1388
+ at SQ	SN:AYCK01030589.1	LN:1387
+ at SQ	SN:AYCK01030590.1	LN:1383
+ at SQ	SN:AYCK01030591.1	LN:1383
+ at SQ	SN:AYCK01030592.1	LN:1380
+ at SQ	SN:AYCK01030593.1	LN:1378
+ at SQ	SN:AYCK01030594.1	LN:1378
+ at SQ	SN:AYCK01030595.1	LN:1375
+ at SQ	SN:AYCK01030596.1	LN:1373
+ at SQ	SN:AYCK01030597.1	LN:1373
+ at SQ	SN:AYCK01030598.1	LN:1372
+ at SQ	SN:AYCK01029097.1	LN:1371
+ at SQ	SN:AYCK01029098.1	LN:1369
+ at SQ	SN:AYCK01030599.1	LN:1368
+ at SQ	SN:AYCK01029099.1	LN:1367
+ at SQ	SN:AYCK01030600.1	LN:1367
+ at SQ	SN:AYCK01030601.1	LN:1367
+ at SQ	SN:AYCK01030602.1	LN:1366
+ at SQ	SN:AYCK01030603.1	LN:1363
+ at SQ	SN:AYCK01030604.1	LN:1361
+ at SQ	SN:AYCK01030605.1	LN:1361
+ at SQ	SN:AYCK01030606.1	LN:1359
+ at SQ	SN:AYCK01030607.1	LN:1359
+ at SQ	SN:AYCK01030608.1	LN:1358
+ at SQ	SN:AYCK01030609.1	LN:1357
+ at SQ	SN:AYCK01030610.1	LN:1356
+ at SQ	SN:AYCK01029102.1	LN:1355
+ at SQ	SN:AYCK01030611.1	LN:1354
+ at SQ	SN:AYCK01030612.1	LN:1354
+ at SQ	SN:AYCK01029103.1	LN:1353
+ at SQ	SN:AYCK01030613.1	LN:1352
+ at SQ	SN:AYCK01030614.1	LN:1352
+ at SQ	SN:AYCK01030615.1	LN:1351
+ at SQ	SN:AYCK01029104.1	LN:1350
+ at SQ	SN:AYCK01030616.1	LN:1350
+ at SQ	SN:AYCK01030617.1	LN:1350
+ at SQ	SN:AYCK01030618.1	LN:1349
+ at SQ	SN:AYCK01030619.1	LN:1349
+ at SQ	SN:AYCK01030620.1	LN:1348
+ at SQ	SN:AYCK01029105.1	LN:1347
+ at SQ	SN:AYCK01030621.1	LN:1347
+ at SQ	SN:AYCK01030622.1	LN:1346
+ at SQ	SN:AYCK01030623.1	LN:1344
+ at SQ	SN:AYCK01029106.1	LN:1343
+ at SQ	SN:AYCK01030624.1	LN:1343
+ at SQ	SN:AYCK01030625.1	LN:1341
+ at SQ	SN:AYCK01030626.1	LN:1340
+ at SQ	SN:AYCK01030627.1	LN:1339
+ at SQ	SN:AYCK01030628.1	LN:1338
+ at SQ	SN:AYCK01030629.1	LN:1338
+ at SQ	SN:AYCK01030630.1	LN:1338
+ at SQ	SN:AYCK01030631.1	LN:1338
+ at SQ	SN:AYCK01030632.1	LN:1337
+ at SQ	SN:AYCK01030633.1	LN:1337
+ at SQ	SN:AYCK01030634.1	LN:1337
+ at SQ	SN:AYCK01030635.1	LN:1337
+ at SQ	SN:AYCK01030636.1	LN:1337
+ at SQ	SN:AYCK01030637.1	LN:1336
+ at SQ	SN:AYCK01030638.1	LN:1333
+ at SQ	SN:AYCK01030639.1	LN:1333
+ at SQ	SN:AYCK01030640.1	LN:1332
+ at SQ	SN:AYCK01030641.1	LN:1332
+ at SQ	SN:AYCK01030642.1	LN:1332
+ at SQ	SN:AYCK01030643.1	LN:1329
+ at SQ	SN:AYCK01030644.1	LN:1329
+ at SQ	SN:AYCK01030645.1	LN:1327
+ at SQ	SN:AYCK01030646.1	LN:1327
+ at SQ	SN:AYCK01029109.1	LN:1326
+ at SQ	SN:AYCK01030647.1	LN:1326
+ at SQ	SN:AYCK01030648.1	LN:1325
+ at SQ	SN:AYCK01030649.1	LN:1325
+ at SQ	SN:AYCK01030650.1	LN:1324
+ at SQ	SN:AYCK01030651.1	LN:1323
+ at SQ	SN:AYCK01030652.1	LN:1323
+ at SQ	SN:AYCK01029110.1	LN:1321
+ at SQ	SN:AYCK01030653.1	LN:1320
+ at SQ	SN:AYCK01029113.1	LN:1319
+ at SQ	SN:AYCK01029114.1	LN:1317
+ at SQ	SN:AYCK01030654.1	LN:1317
+ at SQ	SN:AYCK01030655.1	LN:1317
+ at SQ	SN:AYCK01029115.1	LN:1316
+ at SQ	SN:AYCK01030656.1	LN:1316
+ at SQ	SN:AYCK01030657.1	LN:1316
+ at SQ	SN:AYCK01030658.1	LN:1316
+ at SQ	SN:AYCK01030659.1	LN:1315
+ at SQ	SN:AYCK01030660.1	LN:1315
+ at SQ	SN:AYCK01030661.1	LN:1315
+ at SQ	SN:AYCK01030662.1	LN:1312
+ at SQ	SN:AYCK01030663.1	LN:1312
+ at SQ	SN:AYCK01030664.1	LN:1312
+ at SQ	SN:AYCK01030665.1	LN:1312
+ at SQ	SN:AYCK01030666.1	LN:1310
+ at SQ	SN:AYCK01030667.1	LN:1305
+ at SQ	SN:AYCK01030668.1	LN:1305
+ at SQ	SN:AYCK01030669.1	LN:1305
+ at SQ	SN:AYCK01030670.1	LN:1305
+ at SQ	SN:AYCK01030671.1	LN:1304
+ at SQ	SN:AYCK01030672.1	LN:1304
+ at SQ	SN:AYCK01030673.1	LN:1303
+ at SQ	SN:AYCK01030674.1	LN:1303
+ at SQ	SN:AYCK01030675.1	LN:1303
+ at SQ	SN:AYCK01030676.1	LN:1302
+ at SQ	SN:AYCK01030677.1	LN:1302
+ at SQ	SN:AYCK01030678.1	LN:1301
+ at SQ	SN:AYCK01029118.1	LN:1300
+ at SQ	SN:AYCK01030679.1	LN:1300
+ at SQ	SN:AYCK01030680.1	LN:1299
+ at SQ	SN:AYCK01030681.1	LN:1298
+ at SQ	SN:AYCK01030682.1	LN:1296
+ at SQ	SN:AYCK01030683.1	LN:1295
+ at SQ	SN:AYCK01030684.1	LN:1294
+ at SQ	SN:AYCK01030685.1	LN:1293
+ at SQ	SN:AYCK01030686.1	LN:1292
+ at SQ	SN:AYCK01029123.1	LN:1291
+ at SQ	SN:AYCK01030687.1	LN:1291
+ at SQ	SN:AYCK01030688.1	LN:1291
+ at SQ	SN:AYCK01030689.1	LN:1291
+ at SQ	SN:AYCK01029124.1	LN:1290
+ at SQ	SN:AYCK01030690.1	LN:1289
+ at SQ	SN:AYCK01030691.1	LN:1289
+ at SQ	SN:AYCK01030692.1	LN:1288
+ at SQ	SN:AYCK01030693.1	LN:1286
+ at SQ	SN:AYCK01030694.1	LN:1286
+ at SQ	SN:AYCK01029125.1	LN:1285
+ at SQ	SN:AYCK01030695.1	LN:1285
+ at SQ	SN:AYCK01030696.1	LN:1285
+ at SQ	SN:AYCK01029126.1	LN:1284
+ at SQ	SN:AYCK01030697.1	LN:1283
+ at SQ	SN:AYCK01029127.1	LN:1282
+ at SQ	SN:AYCK01030698.1	LN:1282
+ at SQ	SN:AYCK01030699.1	LN:1282
+ at SQ	SN:AYCK01029128.1	LN:1281
+ at SQ	SN:AYCK01029131.1	LN:1281
+ at SQ	SN:AYCK01030700.1	LN:1281
+ at SQ	SN:AYCK01030701.1	LN:1281
+ at SQ	SN:AYCK01030702.1	LN:1280
+ at SQ	SN:AYCK01030703.1	LN:1278
+ at SQ	SN:AYCK01030704.1	LN:1278
+ at SQ	SN:AYCK01030705.1	LN:1276
+ at SQ	SN:AYCK01030706.1	LN:1275
+ at SQ	SN:AYCK01030707.1	LN:1274
+ at SQ	SN:AYCK01030708.1	LN:1273
+ at SQ	SN:AYCK01030709.1	LN:1273
+ at SQ	SN:AYCK01030710.1	LN:1271
+ at SQ	SN:AYCK01029132.1	LN:1268
+ at SQ	SN:AYCK01030711.1	LN:1268
+ at SQ	SN:AYCK01030712.1	LN:1268
+ at SQ	SN:AYCK01030713.1	LN:1266
+ at SQ	SN:AYCK01030714.1	LN:1266
+ at SQ	SN:AYCK01030715.1	LN:1266
+ at SQ	SN:AYCK01030716.1	LN:1264
+ at SQ	SN:AYCK01030717.1	LN:1263
+ at SQ	SN:AYCK01030718.1	LN:1263
+ at SQ	SN:AYCK01030719.1	LN:1263
+ at SQ	SN:AYCK01030720.1	LN:1263
+ at SQ	SN:AYCK01030721.1	LN:1262
+ at SQ	SN:AYCK01030722.1	LN:1262
+ at SQ	SN:AYCK01030723.1	LN:1261
+ at SQ	SN:AYCK01030724.1	LN:1261
+ at SQ	SN:AYCK01030725.1	LN:1260
+ at SQ	SN:AYCK01030726.1	LN:1260
+ at SQ	SN:AYCK01030727.1	LN:1260
+ at SQ	SN:AYCK01029133.1	LN:1257
+ at SQ	SN:AYCK01030728.1	LN:1257
+ at SQ	SN:AYCK01030729.1	LN:1257
+ at SQ	SN:AYCK01030730.1	LN:1257
+ at SQ	SN:AYCK01030731.1	LN:1257
+ at SQ	SN:AYCK01030732.1	LN:1257
+ at SQ	SN:AYCK01030733.1	LN:1257
+ at SQ	SN:AYCK01029136.1	LN:1255
+ at SQ	SN:AYCK01030734.1	LN:1253
+ at SQ	SN:AYCK01030735.1	LN:1253
+ at SQ	SN:AYCK01030736.1	LN:1252
+ at SQ	SN:AYCK01030737.1	LN:1252
+ at SQ	SN:AYCK01030738.1	LN:1252
+ at SQ	SN:AYCK01030739.1	LN:1250
+ at SQ	SN:AYCK01030740.1	LN:1250
+ at SQ	SN:AYCK01030741.1	LN:1249
+ at SQ	SN:AYCK01030742.1	LN:1249
+ at SQ	SN:AYCK01030743.1	LN:1248
+ at SQ	SN:AYCK01029137.1	LN:1247
+ at SQ	SN:AYCK01030744.1	LN:1246
+ at SQ	SN:AYCK01029138.1	LN:1245
+ at SQ	SN:AYCK01030745.1	LN:1245
+ at SQ	SN:AYCK01030746.1	LN:1244
+ at SQ	SN:AYCK01030747.1	LN:1244
+ at SQ	SN:AYCK01030748.1	LN:1243
+ at SQ	SN:AYCK01029140.1	LN:1240
+ at SQ	SN:AYCK01030749.1	LN:1240
+ at SQ	SN:AYCK01030750.1	LN:1239
+ at SQ	SN:AYCK01030751.1	LN:1238
+ at SQ	SN:AYCK01030752.1	LN:1237
+ at SQ	SN:AYCK01030753.1	LN:1236
+ at SQ	SN:AYCK01029143.1	LN:1235
+ at SQ	SN:AYCK01029144.1	LN:1235
+ at SQ	SN:AYCK01030754.1	LN:1234
+ at SQ	SN:AYCK01030755.1	LN:1234
+ at SQ	SN:AYCK01030756.1	LN:1233
+ at SQ	SN:AYCK01030757.1	LN:1233
+ at SQ	SN:AYCK01030758.1	LN:1232
+ at SQ	SN:AYCK01030759.1	LN:1232
+ at SQ	SN:AYCK01030760.1	LN:1231
+ at SQ	SN:AYCK01029147.1	LN:1230
+ at SQ	SN:AYCK01030761.1	LN:1230
+ at SQ	SN:AYCK01029148.1	LN:1228
+ at SQ	SN:AYCK01030762.1	LN:1228
+ at SQ	SN:AYCK01030763.1	LN:1228
+ at SQ	SN:AYCK01030764.1	LN:1227
+ at SQ	SN:AYCK01030765.1	LN:1226
+ at SQ	SN:AYCK01030766.1	LN:1225
+ at SQ	SN:AYCK01029149.1	LN:1222
+ at SQ	SN:AYCK01030767.1	LN:1222
+ at SQ	SN:AYCK01030768.1	LN:1221
+ at SQ	SN:AYCK01029150.1	LN:1220
+ at SQ	SN:AYCK01030769.1	LN:1220
+ at SQ	SN:AYCK01029151.1	LN:1219
+ at SQ	SN:AYCK01030770.1	LN:1219
+ at SQ	SN:AYCK01030771.1	LN:1219
+ at SQ	SN:AYCK01030772.1	LN:1219
+ at SQ	SN:AYCK01030773.1	LN:1218
+ at SQ	SN:AYCK01030774.1	LN:1217
+ at SQ	SN:AYCK01030775.1	LN:1215
+ at SQ	SN:AYCK01030776.1	LN:1214
+ at SQ	SN:AYCK01030777.1	LN:1214
+ at SQ	SN:AYCK01030778.1	LN:1213
+ at SQ	SN:AYCK01029154.1	LN:1212
+ at SQ	SN:AYCK01029155.1	LN:1211
+ at SQ	SN:AYCK01030779.1	LN:1211
+ at SQ	SN:AYCK01030780.1	LN:1210
+ at SQ	SN:AYCK01030781.1	LN:1208
+ at SQ	SN:AYCK01030782.1	LN:1208
+ at SQ	SN:AYCK01030783.1	LN:1207
+ at SQ	SN:AYCK01030784.1	LN:1206
+ at SQ	SN:AYCK01030785.1	LN:1205
+ at SQ	SN:AYCK01030786.1	LN:1205
+ at SQ	SN:AYCK01030787.1	LN:1204
+ at SQ	SN:AYCK01030788.1	LN:1204
+ at SQ	SN:AYCK01030789.1	LN:1203
+ at SQ	SN:AYCK01030790.1	LN:1203
+ at SQ	SN:AYCK01030791.1	LN:1203
+ at SQ	SN:AYCK01029156.1	LN:1202
+ at SQ	SN:AYCK01030792.1	LN:1202
+ at SQ	SN:AYCK01030793.1	LN:1199
+ at SQ	SN:AYCK01030794.1	LN:1197
+ at SQ	SN:AYCK01030795.1	LN:1196
+ at SQ	SN:AYCK01030796.1	LN:1196
+ at SQ	SN:AYCK01030797.1	LN:1195
+ at SQ	SN:AYCK01030798.1	LN:1195
+ at SQ	SN:AYCK01030799.1	LN:1193
+ at SQ	SN:AYCK01030800.1	LN:1192
+ at SQ	SN:AYCK01030801.1	LN:1192
+ at SQ	SN:AYCK01029157.1	LN:1191
+ at SQ	SN:AYCK01030802.1	LN:1191
+ at SQ	SN:AYCK01030803.1	LN:1190
+ at SQ	SN:AYCK01030804.1	LN:1188
+ at SQ	SN:AYCK01030805.1	LN:1188
+ at SQ	SN:AYCK01030806.1	LN:1188
+ at SQ	SN:AYCK01030807.1	LN:1188
+ at SQ	SN:AYCK01030808.1	LN:1187
+ at SQ	SN:AYCK01030809.1	LN:1187
+ at SQ	SN:AYCK01029158.1	LN:1186
+ at SQ	SN:AYCK01029159.1	LN:1186
+ at SQ	SN:AYCK01030810.1	LN:1185
+ at SQ	SN:AYCK01030811.1	LN:1185
+ at SQ	SN:AYCK01030812.1	LN:1185
+ at SQ	SN:AYCK01030813.1	LN:1184
+ at SQ	SN:AYCK01029160.1	LN:1183
+ at SQ	SN:AYCK01030814.1	LN:1183
+ at SQ	SN:AYCK01030815.1	LN:1181
+ at SQ	SN:AYCK01030816.1	LN:1181
+ at SQ	SN:AYCK01030817.1	LN:1180
+ at SQ	SN:AYCK01030818.1	LN:1180
+ at SQ	SN:AYCK01030819.1	LN:1178
+ at SQ	SN:AYCK01030820.1	LN:1178
+ at SQ	SN:AYCK01030821.1	LN:1178
+ at SQ	SN:AYCK01030822.1	LN:1178
+ at SQ	SN:AYCK01030823.1	LN:1178
+ at SQ	SN:AYCK01030824.1	LN:1177
+ at SQ	SN:AYCK01030825.1	LN:1177
+ at SQ	SN:AYCK01030826.1	LN:1176
+ at SQ	SN:AYCK01030827.1	LN:1175
+ at SQ	SN:AYCK01030828.1	LN:1174
+ at SQ	SN:AYCK01030829.1	LN:1174
+ at SQ	SN:AYCK01029161.1	LN:1173
+ at SQ	SN:AYCK01030830.1	LN:1172
+ at SQ	SN:AYCK01030831.1	LN:1172
+ at SQ	SN:AYCK01030832.1	LN:1169
+ at SQ	SN:AYCK01030833.1	LN:1169
+ at SQ	SN:AYCK01030834.1	LN:1169
+ at SQ	SN:AYCK01029162.1	LN:1168
+ at SQ	SN:AYCK01030835.1	LN:1168
+ at SQ	SN:AYCK01030836.1	LN:1168
+ at SQ	SN:AYCK01029163.1	LN:1167
+ at SQ	SN:AYCK01029164.1	LN:1167
+ at SQ	SN:AYCK01030837.1	LN:1167
+ at SQ	SN:AYCK01030838.1	LN:1167
+ at SQ	SN:AYCK01030839.1	LN:1167
+ at SQ	SN:AYCK01030840.1	LN:1167
+ at SQ	SN:AYCK01029165.1	LN:1163
+ at SQ	SN:AYCK01030841.1	LN:1163
+ at SQ	SN:AYCK01030842.1	LN:1163
+ at SQ	SN:AYCK01030843.1	LN:1162
+ at SQ	SN:AYCK01029166.1	LN:1161
+ at SQ	SN:AYCK01030844.1	LN:1161
+ at SQ	SN:AYCK01030845.1	LN:1161
+ at SQ	SN:AYCK01030846.1	LN:1160
+ at SQ	SN:AYCK01030847.1	LN:1160
+ at SQ	SN:AYCK01030848.1	LN:1160
+ at SQ	SN:AYCK01030849.1	LN:1160
+ at SQ	SN:AYCK01030850.1	LN:1159
+ at SQ	SN:AYCK01030851.1	LN:1158
+ at SQ	SN:AYCK01030852.1	LN:1158
+ at SQ	SN:AYCK01030853.1	LN:1157
+ at SQ	SN:AYCK01030854.1	LN:1157
+ at SQ	SN:AYCK01030855.1	LN:1156
+ at SQ	SN:AYCK01030856.1	LN:1155
+ at SQ	SN:AYCK01030857.1	LN:1155
+ at SQ	SN:AYCK01030858.1	LN:1154
+ at SQ	SN:AYCK01030859.1	LN:1153
+ at SQ	SN:AYCK01029167.1	LN:1152
+ at SQ	SN:AYCK01029168.1	LN:1150
+ at SQ	SN:AYCK01030860.1	LN:1150
+ at SQ	SN:AYCK01030861.1	LN:1149
+ at SQ	SN:AYCK01030862.1	LN:1149
+ at SQ	SN:AYCK01030863.1	LN:1148
+ at SQ	SN:AYCK01029169.1	LN:1146
+ at SQ	SN:AYCK01030864.1	LN:1146
+ at SQ	SN:AYCK01030865.1	LN:1146
+ at SQ	SN:AYCK01029170.1	LN:1145
+ at SQ	SN:AYCK01030866.1	LN:1145
+ at SQ	SN:AYCK01030867.1	LN:1145
+ at SQ	SN:AYCK01029171.1	LN:1144
+ at SQ	SN:AYCK01030868.1	LN:1144
+ at SQ	SN:AYCK01030869.1	LN:1144
+ at SQ	SN:AYCK01030870.1	LN:1144
+ at SQ	SN:AYCK01030871.1	LN:1144
+ at SQ	SN:AYCK01030872.1	LN:1143
+ at SQ	SN:AYCK01030873.1	LN:1143
+ at SQ	SN:AYCK01030874.1	LN:1143
+ at SQ	SN:AYCK01030875.1	LN:1142
+ at SQ	SN:AYCK01030876.1	LN:1142
+ at SQ	SN:AYCK01030877.1	LN:1142
+ at SQ	SN:AYCK01029172.1	LN:1141
+ at SQ	SN:AYCK01029173.1	LN:1141
+ at SQ	SN:AYCK01029174.1	LN:1140
+ at SQ	SN:AYCK01030878.1	LN:1140
+ at SQ	SN:AYCK01030879.1	LN:1140
+ at SQ	SN:AYCK01029175.1	LN:1139
+ at SQ	SN:AYCK01030880.1	LN:1139
+ at SQ	SN:AYCK01030881.1	LN:1139
+ at SQ	SN:AYCK01030882.1	LN:1138
+ at SQ	SN:AYCK01030883.1	LN:1137
+ at SQ	SN:AYCK01030884.1	LN:1136
+ at SQ	SN:AYCK01030885.1	LN:1134
+ at SQ	SN:AYCK01030886.1	LN:1133
+ at SQ	SN:AYCK01030887.1	LN:1132
+ at SQ	SN:AYCK01030888.1	LN:1132
+ at SQ	SN:AYCK01030889.1	LN:1132
+ at SQ	SN:AYCK01030890.1	LN:1132
+ at SQ	SN:AYCK01030891.1	LN:1130
+ at SQ	SN:AYCK01030892.1	LN:1130
+ at SQ	SN:AYCK01029176.1	LN:1126
+ at SQ	SN:AYCK01029177.1	LN:1125
+ at SQ	SN:AYCK01030893.1	LN:1125
+ at SQ	SN:AYCK01030894.1	LN:1125
+ at SQ	SN:AYCK01029178.1	LN:1124
+ at SQ	SN:AYCK01030895.1	LN:1124
+ at SQ	SN:AYCK01030896.1	LN:1123
+ at SQ	SN:AYCK01030897.1	LN:1123
+ at SQ	SN:AYCK01030898.1	LN:1123
+ at SQ	SN:AYCK01030899.1	LN:1123
+ at SQ	SN:AYCK01029179.1	LN:1122
+ at SQ	SN:AYCK01030900.1	LN:1122
+ at SQ	SN:AYCK01030901.1	LN:1121
+ at SQ	SN:AYCK01030902.1	LN:1121
+ at SQ	SN:AYCK01030903.1	LN:1119
+ at SQ	SN:AYCK01030904.1	LN:1119
+ at SQ	SN:AYCK01030905.1	LN:1117
+ at SQ	SN:AYCK01030906.1	LN:1116
+ at SQ	SN:AYCK01030907.1	LN:1116
+ at SQ	SN:AYCK01030908.1	LN:1116
+ at SQ	SN:AYCK01030909.1	LN:1115
+ at SQ	SN:AYCK01030910.1	LN:1115
+ at SQ	SN:AYCK01029180.1	LN:1114
+ at SQ	SN:AYCK01030911.1	LN:1114
+ at SQ	SN:AYCK01030912.1	LN:1114
+ at SQ	SN:AYCK01030913.1	LN:1113
+ at SQ	SN:AYCK01030914.1	LN:1113
+ at SQ	SN:AYCK01030915.1	LN:1112
+ at SQ	SN:AYCK01030916.1	LN:1112
+ at SQ	SN:AYCK01030917.1	LN:1111
+ at SQ	SN:AYCK01030918.1	LN:1111
+ at SQ	SN:AYCK01030919.1	LN:1111
+ at SQ	SN:AYCK01030920.1	LN:1110
+ at SQ	SN:AYCK01030921.1	LN:1109
+ at SQ	SN:AYCK01030922.1	LN:1107
+ at SQ	SN:AYCK01030923.1	LN:1106
+ at SQ	SN:AYCK01030924.1	LN:1106
+ at SQ	SN:AYCK01029181.1	LN:1105
+ at SQ	SN:AYCK01030925.1	LN:1104
+ at SQ	SN:AYCK01029182.1	LN:1103
+ at SQ	SN:AYCK01030926.1	LN:1103
+ at SQ	SN:AYCK01030927.1	LN:1102
+ at SQ	SN:AYCK01030928.1	LN:1098
+ at SQ	SN:AYCK01030929.1	LN:1095
+ at SQ	SN:AYCK01030930.1	LN:1094
+ at SQ	SN:AYCK01029183.1	LN:1092
+ at SQ	SN:AYCK01029184.1	LN:1092
+ at SQ	SN:AYCK01030931.1	LN:1092
+ at SQ	SN:AYCK01030932.1	LN:1092
+ at SQ	SN:AYCK01030933.1	LN:1090
+ at SQ	SN:AYCK01030934.1	LN:1089
+ at SQ	SN:AYCK01030935.1	LN:1086
+ at SQ	SN:AYCK01030936.1	LN:1085
+ at SQ	SN:AYCK01030937.1	LN:1084
+ at SQ	SN:AYCK01030938.1	LN:1083
+ at SQ	SN:AYCK01029185.1	LN:1082
+ at SQ	SN:AYCK01030939.1	LN:1082
+ at SQ	SN:AYCK01030940.1	LN:1082
+ at SQ	SN:AYCK01030941.1	LN:1082
+ at SQ	SN:AYCK01030942.1	LN:1081
+ at SQ	SN:AYCK01030943.1	LN:1080
+ at SQ	SN:AYCK01030944.1	LN:1080
+ at SQ	SN:AYCK01030945.1	LN:1079
+ at SQ	SN:AYCK01030946.1	LN:1079
+ at SQ	SN:AYCK01030947.1	LN:1079
+ at SQ	SN:AYCK01029139.1	LN:1078
+ at SQ	SN:AYCK01029186.1	LN:1078
+ at SQ	SN:AYCK01030948.1	LN:1078
+ at SQ	SN:AYCK01029187.1	LN:1077
+ at SQ	SN:AYCK01030949.1	LN:1077
+ at SQ	SN:AYCK01030950.1	LN:1075
+ at SQ	SN:AYCK01030951.1	LN:1074
+ at SQ	SN:AYCK01030952.1	LN:1073
+ at SQ	SN:AYCK01030953.1	LN:1073
+ at SQ	SN:AYCK01030954.1	LN:1072
+ at SQ	SN:AYCK01030955.1	LN:1072
+ at SQ	SN:AYCK01029188.1	LN:1071
+ at SQ	SN:AYCK01030956.1	LN:1070
+ at SQ	SN:AYCK01030957.1	LN:1067
+ at SQ	SN:AYCK01030958.1	LN:1067
+ at SQ	SN:AYCK01030959.1	LN:1065
+ at SQ	SN:AYCK01030960.1	LN:1064
+ at SQ	SN:AYCK01030961.1	LN:1064
+ at SQ	SN:AYCK01030962.1	LN:1064
+ at SQ	SN:AYCK01029189.1	LN:1063
+ at SQ	SN:AYCK01029190.1	LN:1061
+ at SQ	SN:AYCK01029191.1	LN:1061
+ at SQ	SN:AYCK01030963.1	LN:1061
+ at SQ	SN:AYCK01029192.1	LN:1060
+ at SQ	SN:AYCK01029193.1	LN:1060
+ at SQ	SN:AYCK01030964.1	LN:1059
+ at SQ	SN:AYCK01030965.1	LN:1058
+ at SQ	SN:AYCK01030966.1	LN:1057
+ at SQ	SN:AYCK01030967.1	LN:1056
+ at SQ	SN:AYCK01029194.1	LN:1054
+ at SQ	SN:AYCK01030968.1	LN:1053
+ at SQ	SN:AYCK01030969.1	LN:1050
+ at SQ	SN:AYCK01030970.1	LN:1050
+ at SQ	SN:AYCK01030971.1	LN:1050
+ at SQ	SN:AYCK01030972.1	LN:1048
+ at SQ	SN:AYCK01029195.1	LN:1047
+ at SQ	SN:AYCK01029196.1	LN:1047
+ at SQ	SN:AYCK01030973.1	LN:1047
+ at SQ	SN:AYCK01030974.1	LN:1046
+ at SQ	SN:AYCK01030975.1	LN:1045
+ at SQ	SN:AYCK01030976.1	LN:1045
+ at SQ	SN:AYCK01030977.1	LN:1044
+ at SQ	SN:AYCK01030978.1	LN:1040
+ at SQ	SN:AYCK01029197.1	LN:1038
+ at SQ	SN:AYCK01029198.1	LN:1038
+ at SQ	SN:AYCK01030979.1	LN:1038
+ at SQ	SN:AYCK01030980.1	LN:1038
+ at SQ	SN:AYCK01030981.1	LN:1037
+ at SQ	SN:AYCK01030982.1	LN:1037
+ at SQ	SN:AYCK01030983.1	LN:1035
+ at SQ	SN:AYCK01030984.1	LN:1035
+ at SQ	SN:AYCK01029199.1	LN:1029
+ at SQ	SN:AYCK01030985.1	LN:1028
+ at SQ	SN:AYCK01029200.1	LN:1026
+ at SQ	SN:AYCK01030986.1	LN:1024
+ at SQ	SN:AYCK01029201.1	LN:1022
+ at SQ	SN:AYCK01030987.1	LN:1022
+ at SQ	SN:AYCK01030988.1	LN:1021
+ at SQ	SN:AYCK01029202.1	LN:1016
+ at SQ	SN:AYCK01030989.1	LN:1016
+ at SQ	SN:AYCK01030990.1	LN:1015
+ at SQ	SN:AYCK01030991.1	LN:1014
+ at SQ	SN:AYCK01030992.1	LN:1014
+ at SQ	SN:AYCK01029203.1	LN:1012
+ at SQ	SN:AYCK01030993.1	LN:1011
+ at SQ	SN:AYCK01030994.1	LN:1011
+ at SQ	SN:AYCK01029204.1	LN:1010
+ at SQ	SN:AYCK01030995.1	LN:1010
+ at SQ	SN:AYCK01029205.1	LN:1008
+ at SQ	SN:AYCK01030996.1	LN:1007
+ at SQ	SN:AYCK01030997.1	LN:1007
+ at SQ	SN:AYCK01030998.1	LN:1006
+ at SQ	SN:AYCK01030999.1	LN:1006
+ at SQ	SN:AYCK01031000.1	LN:1004
+ at SQ	SN:AYCK01029206.1	LN:1002
+ at SQ	SN:AYCK01031001.1	LN:1002
+ at SQ	SN:AYCK01031002.1	LN:1002
+ at SQ	SN:AYCK01031003.1	LN:1001
+ at SQ	SN:AYCK01031004.1	LN:1001
+ at SQ	SN:AYCK01031005.1	LN:992
+ at SQ	SN:AYCK01031006.1	LN:992
+ at SQ	SN:AYCK01031007.1	LN:992
+ at SQ	SN:AYCK01031008.1	LN:990
+ at SQ	SN:AYCK01029207.1	LN:989
+ at SQ	SN:AYCK01031009.1	LN:987
+ at SQ	SN:AYCK01031010.1	LN:987
+ at SQ	SN:AYCK01031011.1	LN:986
+ at SQ	SN:AYCK01029208.1	LN:983
+ at SQ	SN:AYCK01031012.1	LN:983
+ at SQ	SN:AYCK01031013.1	LN:982
+ at SQ	SN:AYCK01031014.1	LN:980
+ at SQ	SN:AYCK01031015.1	LN:979
+ at SQ	SN:AYCK01031016.1	LN:976
+ at SQ	SN:AYCK01031017.1	LN:974
+ at SQ	SN:AYCK01031018.1	LN:973
+ at SQ	SN:AYCK01031019.1	LN:970
+ at SQ	SN:AYCK01029209.1	LN:968
+ at SQ	SN:AYCK01031020.1	LN:967
+ at SQ	SN:AYCK01031021.1	LN:967
+ at SQ	SN:AYCK01031022.1	LN:966
+ at SQ	SN:AYCK01029210.1	LN:965
+ at SQ	SN:AYCK01031023.1	LN:963
+ at SQ	SN:AYCK01029211.1	LN:959
+ at SQ	SN:AYCK01031024.1	LN:957
+ at SQ	SN:AYCK01031025.1	LN:948
+ at SQ	SN:AYCK01031026.1	LN:947
+ at SQ	SN:AYCK01029212.1	LN:940
+ at SQ	SN:AYCK01029213.1	LN:934
+ at SQ	SN:AYCK01031027.1	LN:932
+ at SQ	SN:AYCK01031028.1	LN:927
+ at SQ	SN:AYCK01029214.1	LN:925
+ at SQ	SN:AYCK01029215.1	LN:922
+ at SQ	SN:AYCK01031029.1	LN:919
+ at SQ	SN:AYCK01031030.1	LN:917
+ at SQ	SN:AYCK01029216.1	LN:914
+ at SQ	SN:AYCK01029217.1	LN:900
+ at SQ	SN:AYCK01029218.1	LN:890
+ at SQ	SN:AYCK01029219.1	LN:888
+ at SQ	SN:AYCK01029220.1	LN:864
+ at SQ	SN:AYCK01029221.1	LN:855
+ at SQ	SN:AYCK01029222.1	LN:827
+ at SQ	SN:AYCK01029223.1	LN:826
+ at SQ	SN:AYCK01031031.1	LN:823
+ at SQ	SN:AYCK01029224.1	LN:812
+ at SQ	SN:AYCK01029225.1	LN:811
+ at SQ	SN:AYCK01029228.1	LN:787
+ at SQ	SN:AYCK01029229.1	LN:776
+ at SQ	SN:AYCK01029230.1	LN:774
+ at SQ	SN:AYCK01029231.1	LN:773
+ at SQ	SN:AYCK01029232.1	LN:773
+ at SQ	SN:AYCK01029233.1	LN:768
+ at SQ	SN:AYCK01029234.1	LN:760
+ at SQ	SN:AYCK01029235.1	LN:758
+ at SQ	SN:AYCK01029236.1	LN:756
+ at SQ	SN:AYCK01031032.1	LN:737
+ at SQ	SN:AYCK01029237.1	LN:723
+ at SQ	SN:AYCK01031033.1	LN:719
+ at SQ	SN:AYCK01029238.1	LN:714
+ at SQ	SN:AYCK01029239.1	LN:712
+ at SQ	SN:AYCK01029240.1	LN:709
+ at SQ	SN:AYCK01029241.1	LN:698
+ at SQ	SN:AYCK01031034.1	LN:677
+ at SQ	SN:AYCK01029244.1	LN:634
+ at SQ	SN:AYCK01029245.1	LN:621
+ at SQ	SN:AYCK01031035.1	LN:614
+ at SQ	SN:AYCK01031036.1	LN:608
+ at SQ	SN:AYCK01029246.1	LN:604
+ at SQ	SN:AYCK01029247.1	LN:595
+ at SQ	SN:AYCK01029248.1	LN:592
+ at SQ	SN:AYCK01029249.1	LN:586
+ at SQ	SN:AYCK01029250.1	LN:578
+ at SQ	SN:AYCK01029251.1	LN:563
+ at SQ	SN:AYCK01029252.1	LN:559
+ at SQ	SN:AYCK01031037.1	LN:556
+ at SQ	SN:AYCK01029253.1	LN:553
+ at SQ	SN:AYCK01031038.1	LN:550
+ at SQ	SN:AYCK01029254.1	LN:545
+ at SQ	SN:AYCK01029255.1	LN:545
+ at SQ	SN:AYCK01031039.1	LN:541
+ at SQ	SN:AYCK01029256.1	LN:532
+ at SQ	SN:AYCK01029257.1	LN:500
+ at SQ	SN:AYCK01031040.1	LN:499
+ at SQ	SN:AYCK01031041.1	LN:492
+ at SQ	SN:AYCK01029258.1	LN:489
+ at SQ	SN:AYCK01029259.1	LN:473
+ at SQ	SN:AYCK01029260.1	LN:471
+ at SQ	SN:AYCK01031042.1	LN:466
+ at SQ	SN:AYCK01029261.1	LN:461
+ at SQ	SN:AYCK01029262.1	LN:456
+ at SQ	SN:AYCK01031043.1	LN:456
+ at SQ	SN:AYCK01029263.1	LN:439
+ at SQ	SN:AYCK01029264.1	LN:435
+ at SQ	SN:AYCK01031044.1	LN:417
+ at SQ	SN:AYCK01029265.1	LN:397
+ at SQ	SN:AYCK01031045.1	LN:388
+ at SQ	SN:AYCK01031046.1	LN:387
+ at SQ	SN:AYCK01031047.1	LN:384
+ at SQ	SN:AYCK01031048.1	LN:379
+ at SQ	SN:AYCK01029266.1	LN:377
+ at SQ	SN:AYCK01029267.1	LN:366
+ at SQ	SN:AYCK01029268.1	LN:364
+ at SQ	SN:AYCK01029269.1	LN:361
+ at SQ	SN:AYCK01031049.1	LN:356
+ at SQ	SN:AYCK01029270.1	LN:353
+ at SQ	SN:AYCK01029271.1	LN:353
+ at SQ	SN:AYCK01031050.1	LN:333
+ at SQ	SN:AYCK01029272.1	LN:329
+ at SQ	SN:AYCK01029273.1	LN:324
+ at SQ	SN:AYCK01029274.1	LN:320
+ at SQ	SN:AYCK01029275.1	LN:316
+ at SQ	SN:AYCK01029276.1	LN:314
+ at SQ	SN:AYCK01029277.1	LN:309
+ at SQ	SN:AYCK01031051.1	LN:301
+ at SQ	SN:AYCK01031052.1	LN:301
+ at SQ	SN:AYCK01029278.1	LN:298
+ at SQ	SN:AYCK01029279.1	LN:295
+ at SQ	SN:AYCK01029280.1	LN:294
+ at SQ	SN:AYCK01031053.1	LN:293
+ at SQ	SN:AYCK01031054.1	LN:289
+ at SQ	SN:AYCK01029281.1	LN:277
+ at SQ	SN:AYCK01029282.1	LN:276
+ at SQ	SN:AYCK01031055.1	LN:269
+ at SQ	SN:AYCK01031056.1	LN:268
+ at SQ	SN:AYCK01029283.1	LN:267
+ at SQ	SN:AYCK01029284.1	LN:252
+ at SQ	SN:AYCK01031057.1	LN:245
+ at SQ	SN:AYCK01031058.1	LN:240
+ at SQ	SN:AYCK01029285.1	LN:233
+ at SQ	SN:AYCK01029286.1	LN:218
+ at SQ	SN:AYCK01029287.1	LN:202
+ at PG	ID:bwa	PN:bwa	VN:0.7.10-r789	CL:/gscmnt/gc2719/halllab/src/speedseq/bin/bwa mem -t 3 -C -M -p /gscmnt/gc6149/assembly/Amazon_Molly_Speedseq_Analysis/Indexed_Reference/Poecilia_formosa.PoeFor_5.1.2.dna.nonchromosomal.fa s1M.fastq.gz
+ at RG	PL:ILLUMINA	LB:"PFAF-Pfa-D55-1-Pfa-D55-1.1-lg1-lib1"	ID:2895027965	SM:PFAF-Pfa-D55-1-Pfa-D55-1.1	PU:C5NKBACXX.1
+ at RG	PL:ILLUMINA	LB:"PFAF-Pfa-D55-1-Pfa-D55-1.1-lg1-lib1"	ID:2895027918	SM:PFAF-Pfa-D55-1-Pfa-D55-1.1	PU:C5NKBACXX.2
+ at RG	PL:ILLUMINA	LB:"PFAF-Pfa-D55-1-Pfa-D55-1.1-lg1-lib1"	ID:2895028003	SM:PFAF-Pfa-D55-1-Pfa-D55-1.1	PU:C5NKBACXX.3
+2895027965.1	83	KI519620.1	2637391	60	100M	=	2637138	-353	AAATATATTTGGACTGTAAATCCGAATTTTCACTTAAGAAAGCATGCTGTAACTATTTTTCATTCAGATTTTAAATTTTTAAGAGCTATTGAGATCACTA	EEFDFDCCFFFFFFHHHHHIGJIIIIGGGBIGIIGJJJJJJJJJIJJIIIJIIIJJIHHFIHHGIJJJIJJJJJJIJJIJJJJJJJGHHHHHFFFFDCC@	NM:i:2	MD:Z:85G12C1	AS:i:93	XS:i:0	RG:Z:2895027965	MC:Z:100M	MQ:i:60
+2895027965.1	163	KI519620.1	2637138	60	100M	=	2637391	353	GTTGAGTTAACTCTGAATGTTTTACAGATTCACATTTTCAAGTTACTGAACTAACCAGAAAACGCATGTGGCTTGTAAAATCAAACAGTGAATCTGTGAC	CCCFFFFFHHHHHJJJJJJJJJJHIIJIIJJIJIJJJJJEHIIJJIJJIJJIJIJJJJJJJJJJJIJJFHIJJJDCCHEDBCBDFA;;6>CC;ACDCDCC	NM:i:0	MD:Z:100	AS:i:100	XS:i:0	RG:Z:2895027965	MC:Z:100M	MQ:i:60
+2895027965.2	99	KI519750.1	1400016	60	100M	=	1400283	367	NGCCACAAGTGCTCACAAAGAAATGTCAGCTGTTTATTTCGTACAGCTGGAGTCAAAGTCTAATTGGTGTGGTATTTGTAGAGACAGGTGTATTCATACA	#4=DDDDDDDDDEIDEI:CEEIIIIEIIIIIEIIICFIICDDDIDEEEIICDDEEIEEDDDEEIIIIDDCDDADDDEDEEDDDDDDAA>AAADEEDEEAA	NM:i:4	MD:Z:0T2A9T36G49	AS:i:86	XS:i:0	RG:Z:2895027965	MC:Z:100M	MQ:i:60
+2895027965.2	147	KI519750.1	1400283	60	100M	=	1400016	-367	GGTGTGAAATCTGAATTTTAAAGTCAGGAACTAAATTTCTAGAAATAAAGCCATATTTTAGTACTGGATGGTAAAAACTCCCAATCTTTAAGCCATTAAA	DDDEECEEEEFFFFFFDHFHHHHIJJJJJIJIJJJJJHJIJJJJIGJJJJJJJJJIJJJJJJIJJJJJIJJIJIIGEHGJJJJIGJJHGHHHFFFFFCCC	NM:i:0	MD:Z:100	AS:i:100	XS:i:0	RG:Z:2895027965	MC:Z:100M	MQ:i:60
diff --git a/test/data/b7_295_chunk.bam b/test/data/b7_295_chunk.bam
new file mode 100644
index 0000000..6eb87ed
Binary files /dev/null and b/test/data/b7_295_chunk.bam differ
diff --git a/test/data/bins.bam b/test/data/bins.bam
new file mode 100644
index 0000000..d04b8da
Binary files /dev/null and b/test/data/bins.bam differ
diff --git a/test/data/bins.bam.bai b/test/data/bins.bam.bai
new file mode 100644
index 0000000..134d1f5
Binary files /dev/null and b/test/data/bins.bam.bai differ
diff --git a/test/data/corrupted_zlib_archive.bam b/test/data/corrupted_zlib_archive.bam
new file mode 100644
index 0000000..8ceaf9c
Binary files /dev/null and b/test/data/corrupted_zlib_archive.bam differ
diff --git a/test/data/duplicated_block_size.bam b/test/data/duplicated_block_size.bam
new file mode 100644
index 0000000..22d1855
Binary files /dev/null and b/test/data/duplicated_block_size.bam differ
diff --git a/test/data/ex1_header.bam b/test/data/ex1_header.bam
new file mode 100644
index 0000000..9f43127
Binary files /dev/null and b/test/data/ex1_header.bam differ
diff --git a/test/data/ex1_header.bam.bai b/test/data/ex1_header.bam.bai
new file mode 100644
index 0000000..e6165bb
Binary files /dev/null and b/test/data/ex1_header.bam.bai differ
diff --git a/test/data/ex1_header.sam b/test/data/ex1_header.sam
new file mode 100644
index 0000000..81a4229
--- /dev/null
+++ b/test/data/ex1_header.sam
@@ -0,0 +1,3273 @@
+ at HD	VN:1.3	SO:coordinate
+ at SQ	SN:chr1	LN:1575
+ at SQ	SN:chr2	LN:1584
+EAS56_57:6:190:289:82	69	chr1	100	0	*	=	100	0	CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA	<<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<;	MF:i:192
+EAS56_57:6:190:289:82	137	chr1	100	73	35M	=	100	0	AGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCAC	<<<<<<;<<<<<<<<<<;<<;<<<<;8<6;9;;2;	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:190:727:308	99	chr1	103	99	35M	=	263	195	GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:141:80:875	99	chr1	110	99	35M	=	265	190	AGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAA	<<<<<<<<<<<<<<<<<<<<<<:<<8;<<8+7;-7	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:40:1128:1940	163	chr1	112	99	35M	=	291	214	CCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACC	<<<<<<<<<<<<<<<<<<<;<<5;;<<<9;;;;7:	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:290:319:736	69	chr1	113	0	*	=	113	0	GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC	<<<<<<:7:<.<<<<7<<.<.<<.9*<4<:<4%74	MF:i:192
+EAS51_62:5:290:319:736	137	chr1	113	73	35M	=	113	0	CGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCT	==;=======7====6=;==:;;====66=::27:	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:132:493:921	69	chr1	119	0	*	=	119	0	GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC	<<<<<<<<<<<<<<<<<<<;<<<<77;0<;;6777	MF:i:192
+B7_597:2:132:493:921	137	chr1	119	75	35M	=	119	0	ACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTG	<<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;;88:	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:283:799:560	163	chr1	121	66	35M	=	283	197	GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGAC	<<<<+<<<<8<<<+<<<<<;<<:07;8;7402447	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:1:225:195:543	99	chr1	123	99	35M	=	299	211	GGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTG	<<<<<<<<<<<<<<<<<<<<<<<9<<;::388998	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:6:114:714:317	99	chr1	126	99	35M	=	311	220	TGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5;<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:70:147:84	163	chr1	128	73	35M	=	285	192	CCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGA	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;(5<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:187:227:818	163	chr1	129	99	35M	=	290	196	CAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<;<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:77:29:126	99	chr1	131	99	35M	=	315	219	GCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCT	<<<<<<<<<<3<<<<<<<;;;7<;<<449<-:977	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:327:795:103	99	chr1	133	99	35M	=	302	204	ACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:139:117:262	69	chr1	135	0	*	=	135	0	GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC	<<<7<<<<<<<<<<<<<<<<<<<;<;<<<<<37;3	MF:i:192
+EAS114_30:3:139:117:262	137	chr1	135	76	35M	=	135	0	AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG	<<<<;<<<<<<<<<<<<<:<<<<<:<<8<<<<:<:	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:29:817:854	73	chr1	135	77	35M	=	135	0	AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:29:817:854	133	chr1	135	0	*	=	135	0	GTTCTCAAGGTTGTTGCAAGGGGGTTTATGTGAAC	<<<<<<<<<<<<<<<1..;:;;;;1%407)07&7.	MF:i:192
+EAS192_3:6:170:169:57	163	chr1	138	99	35M	=	296	193	GGCTTGACCTCTGGTGACTGCCAGAGCTGCTGGCC	<<<<<;<<<<<<;<<<<<<<<<<<<:<<<<<;;+%	MF:i:18	Aq:i:45	NM:i:2	UQ:i:30	H0:i:0	H1:i:1
+B7_595:4:84:802:737	99	chr1	140	68	35M	=	284	179	CTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAG	<<<<<<<<<<;9<9<<<;<<;73;<<<<<37;1+.	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:78:583:670	163	chr1	142	99	35M	=	316	209	TAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCT	<<<<<<<<<<;;;<;;<<<:7;5;<5;;<2--8-;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:90:435:691	99	chr1	147	99	35M	=	318	206	TCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGT	<<<<<<<<<<;<<<;<<<<:<<<;<81;<<1;784	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:13:122:187	163	chr1	153	99	35M	=	343	225	GACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCCTT	<<<<<<<;<;<<<;<<<<:;6<<<<;;;;:<<%%<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS221_1:6:69:735:1915	99	chr1	154	99	35M	=	321	202	ACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTT	<<<<<<<<;<<<<<<<<<;<<<<;<8<<<<;1:<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:66:959:1311	163	chr1	159	95	35M	=	336	212	CAGAGCTGCTGGCAAGCTAGAGGCCCATCTGGAGC	;;4;;;+;;;-01;;&-;;4;;&;;73)(&**274	MF:i:18	Aq:i:31	NM:i:2	UQ:i:12	H0:i:0	H1:i:1
+EAS56_57:6:325:759:288	99	chr1	163	99	35M	=	341	213	GCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCT	8<;<<<<81<<<<<;<<;<<<;9</;6;;809034	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:7:82:926:112	99	chr1	164	99	35M	=	328	199	CTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTC	<;<<<<<<<<<5<<<<<<<<<<<<<<<;<<1:<4<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:324:728:956	99	chr1	165	99	35M	=	322	192	TGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCT	<<<<<<<<<<<<<<<<<<<<8<<<:<::;;;;<:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:294:525:849	163	chr1	167	99	35M	=	340	208	CTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAA	<<<<<<<<<<<<<<<<<<<<<<9+<:<<<<9;;15	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:159:125:297	163	chr1	170	99	35M	=	337	202	GCAAGCTAGAGTCCCATTTGGAGCCACTCTAAGAC	<<<<<<<<<<<<<<;<<<;<;<<6;)<:9;26;39	MF:i:18	Aq:i:43	NM:i:2	UQ:i:26	H0:i:0	H1:i:1
+EAS54_65:6:164:797:930	99	chr1	173	99	35M	=	332	194	AGCTAGAGACCCATTTGGAGCCCCTCTAAGCCGTT	<<<<<<<<<<<<<<<;;;:<<<<<;<;<<<<<,::	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_81:7:293:355:321	163	chr1	174	99	35M	=	356	217	GCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTC	<<<:<;<<<<<<<;<<<<<<<<<;<<;4<<<:+:<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:1:209:653:400	163	chr1	175	99	35M	=	340	200	CTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCT	<;<9<<+<2<9<,;;64;<<<<;8<00*1<48:+8	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:62:1109:804	163	chr1	176	99	35M	=	350	209	TAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTA	<<<<<<<<<<<<<:<<:<<<<<<:<:<<<<;;;;;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:303:402:142	163	chr1	181	99	35M	=	343	197	TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT	<8<<<<<<<<<<<<<<<<<<<<<<<46<648;;';	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:321:642:388	163	chr1	181	99	35M	=	357	209	TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<8;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:1:1140:1206	163	chr1	181	99	35M	=	368	222	TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT	;;;;;;;;;;;;;:9;;7;;:;:;97;:;:88888	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:155:68:326	99	chr1	182	99	36M	=	332	186	CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:7:19:886:279	99	chr1	182	99	35M	=	337	190	CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTA	<9<<<<<<<<<<<<6<28:<<85<<<<<2<;<9<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:4:143:69:578	147	chr1	185	98	35M	=	36	-184	ATTGGGAGCCCCTCTAAGCCGTTCTATTTGTAATG	222&<21<<<<12<7<01<<<<<0<<<<<<<20<<	MF:i:18	Aq:i:35	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS54_71:4:13:981:659	181	chr1	187	0	*	=	188	0	CGGGACAATGGACGAGGTAAACCGCACATTGACAA	+)---3&&3&--+0)&+3:7777).333:<06<<<	MF:i:192
+EAS54_71:4:13:981:659	121	chr1	188	37	34M	=	187	0	TGTAGCCCCTCTAAGGCGTTCTATTTGTAATGAA	()&)06636;;<664*6;<<<<<<<<<<<<<<<1	MF:i:64	Aq:i:0	NM:i:2	UQ:i:14	H0:i:0	H1:i:1
+B7_610:1:37:652:403	163	chr1	193	99	35M	=	347	189	CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT	<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:1:282:274:50	163	chr1	193	99	35M	=	371	213	CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT	<<<<<<<<<<<<<<<<<;<<<<<99<9<5909;5;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:133:460:542	99	chr1	195	99	36M	=	356	197	CCTATAAGCCGTTCTATTTGTAATGAAAACTATATT	<<<<<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<;	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_73:5:44:498:945	99	chr1	195	82	35M	=	377	217	CCTATAAGCCGTTCTATTTGTAATGAAAACTATAT	;<;<<<<<<<<<<9<;<:<<<<<<:<<<<;:;<3<	MF:i:18	Aq:i:37	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_610:1:139:152:856	99	chr1	198	99	35M	=	392	229	CTAAGCCGTTCTATTTGTAATGAAAACTATATTTA	<<<<<<<<;<<<<<<<<<<;<;<<<;<<<<;<;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:323:639:311	163	chr1	200	99	36M	=	357	193	AAGCCGTTCTATTTGTAATGAAAACTATATTTAGGC	<<<<<<<<<<<<<<<<<<<2<<<<<<;<<<<<<81<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:23	H0:i:1	H1:i:0
+EAS114_39:2:18:967:582	163	chr1	200	99	35M	=	398	233	AAGCCGTTCTATTTGTAATGAAAACTATATTTATG	<<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<<<8	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:8:186:850:838	99	chr1	205	99	35M	=	389	219	GTTCTATTTGTAATGAAAACTATATTTATGCTATT	<<<<<;<<<<<<<<<<<:<<<<<;<<<;</<<;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:126:558:408	163	chr1	206	99	35M	=	368	197	TTCTATTTGTAATGAAAACTATATTTATGCTATTC	<<<<<<<<<<<<<:<<<<<<<<<<<<<<7<;<<;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:157:643:175	163	chr1	206	99	35M	=	380	209	TTCTATTTGTAATGAAAACTATATTTATGCTATTC	<<<<<<<<;<<<<<<<<<<<<<<<<<<<)<<<<;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:141:711:813	99	chr1	209	99	35M	=	370	196	TATTTGTAATGAAAACTATATTTATGCTATTCAGT	<<<<<<<<<<;<<<<<<<<<<<<<<;<<<<<<:+<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:115:538:276	163	chr1	209	99	35M	=	360	186	TATTTGTAATGAAAACTATATTTATGCTATTCAGT	<<<<<<<<;<<<;;<<<;<:<<<:<<<<<<;;;7;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:51:1429:1043	83	chr1	209	99	35M	=	59	-185	TATTTGTAATGAAAACTATATTTATGCTATTCAGT	9<5<<<<<<<<<<<<<9<<<9<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:176:168:513	163	chr1	210	99	35M	=	410	235	ATTTGTAATGAAAACTATATTTATGCTATTCAGTT	<<<<;<<<<<<<<<<<<<<<<<<<:&<<<<:;0;;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:282:817:710	99	chr1	211	99	35M	=	384	208	TTTGTAATGAAAACTATATTTATGCTATTCAGTTC	<<<<<<<<<<<<<<<<<<<<<<<;:<<<<:8,<<8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:65:787:74	83	chr1	213	88	35M	=	61	-187	TGTAATGAAAACTATATTTATGCTATTCAGTTCTA	44848=:1661/66==?:<=:?6><<<<1>><<<<	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:240:264:231	121	chr1	213	66	35M	=	213	0	TGTAATGAAAACTATATTTATGCTATTCAGTTCTA	9;,;;62<9<)29<<<;96<<<;<<7<<<<<<;<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:240:264:231	181	chr1	213	0	*	=	213	0	CAACAGATCAAGAAGGAGGGGCAATGGACGAGTTA	%15+5022))0&<<)0)+7:4+&<0<<:0<<<7<<	MF:i:192
+EAS1_93:7:14:426:613	99	chr1	214	99	35M	=	379	200	GTAATGAAAACTATATTTATGCTATTCAGTTCTAA	======;=;==========;;==3=;==-=<;<;<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:2:173:995:93	163	chr1	215	99	35M	=	382	202	TAATGAAAACTATATTTATGCTATTCAGTTCTAAA	<<<<<<<<<<<<<<<<<<<7:<<<<;:<:<<<<:7	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:195:348:703	163	chr1	215	99	35M	=	353	173	TAATGAAAACTATATTTATGCTATTCAGTTCTAAA	<<<<<<<;<<<<<;:<<<<<<<<<<<<:<1:<:7<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:62:879:264	163	chr1	216	99	35M	=	396	215	AATGAAAACTATATTTATGCTATTCAGTTCTAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:4:83:452:970	99	chr1	216	99	35M	=	379	198	AATGAAAACTATATTTATGCTATTCAGTTCTAAAT	==========================;========	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:64:1318:1711	99	chr1	218	99	35M	=	389	206	TGAAAACTATATTTATGCTATTCAGTTCTAAATAT	<<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:113:968:19	83	chr1	219	99	35M	=	50	-204	GAAAACTATATTTATGCTATTCAGTTCTAAATATA	8;<;8;9<<<<<<<9<:<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:4:160:896:275	163	chr1	220	99	35M	=	387	202	AAAACTATATTTATGCTATTCAGTTCTAAATATAG	============<====<==<====<==<==;=:6	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:181:191:418	163	chr1	221	99	36M	=	387	202	AAACTATATTTATGCTATTCAGTTCTAAATATAGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<988	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:242:354:637	99	chr1	222	99	36M	=	417	231	AACTATATTTATGCTATTCAGTTCTAAATATAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<6<;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:122:77:789	163	chr1	223	99	35M	=	396	208	ACTATATTTATGCTATTCAGTTCTAAATATAGAAA	<<<:<4<<9<:7<<<:<<<7<<<<<<<<<<9<9<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:42:540:501	147	chr1	224	99	36M	=	60	-200	CTATATTTATGCTATTCAGTTCTAAATATAGAAATT	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:155:12:674	83	chr1	224	99	36M	=	52	-208	CTATATTTATGCTATTCAGTTCTAAATATAGAAATT	;<<<<<<<<<<;<<<<;<<<<8<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:106:316:452	147	chr1	224	99	36M	=	49	-211	CTATATTTATGCTATTCAGTTCTAAATATAGAAATT	:<<<<<;<<<<:<<:<<<<<<7<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:89:525:113	163	chr1	227	78	40M	=	397	210	TATTTATGCTATTCAGTTATAAATATAGAAATTGAAACAG	<1<7<6;+0;7;7'<70;-<7<:<:<<5<<:9<5:7:%:7	MF:i:18	Aq:i:39	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS54_65:3:321:311:983	147	chr1	228	99	35M	=	51	-212	ATTTATGCTATTCAGTTCTAAATATAGAAATTGAA	;;4;;<7<<<<<<77<<<<<<<<<<17<<<<<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:76:493:708	147	chr1	229	44	35M	=	73	-191	TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA	5/)63.&1517(544(055(0454&7706566679	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:2:125:628:79	163	chr1	229	99	35M	=	400	205	TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA	==================<6<====<<:<==7;::	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:5:78:583:499	83	chr1	229	74	35M	=	37	-227	TTTACGCTATTCAGTACTAAATATAGAAATTGAAA	&6&9774&<;67<44&-4<;<9<7<<<<<;<<<<<	MF:i:18	Aq:i:37	NM:i:2	UQ:i:27	H0:i:0	H1:i:1
+EAS54_67:3:175:730:949	83	chr1	230	99	35M	=	70	-195	TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC	<<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:84:275:1572	163	chr1	230	99	35M	=	394	199	TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC	/6;;;4;;;;;;;;7;;4;.4;;;;;6;;;77077	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:248:753:731	99	chr1	231	99	35M	=	402	206	TATGCTATTCAGTTCTAAATATAGAAATTGAAACA	<<<<<<<<<<<8<<<<<<<<<<<<:<<<<&<:<.:	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:9:1289:215	99	chr1	231	99	35M	=	394	198	TATGCTATTCAGTTCTAAATATAGAAATTGAAACA	;;;;;;9;;;67;;;;;99;9;;;;;;;;977747	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:188:802:71	163	chr1	232	99	35M	=	415	218	ATGCTATTCAGTTCTAAATATAGAAATTGAAACAG	<<<<<<<<<;<<<<<9<<<:<<<:<<<<<<:<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:7:252:171:323	83	chr1	234	99	35M	=	43	-226	GCTATTCAGTTCTAAATATAGAAATTGAAACAGCT	;8<;<=3=6==:====;;======;==========	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:5:223:142:410	147	chr1	235	99	35M	=	60	-210	CTATTCAGTTCTAAATATAGAAATTGAAACAGCTG	8;<<<;<<<<;<<<<<<;<;<<<<<<<<<<<<;<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:243:10:911	83	chr1	236	99	35M	=	63	-208	TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT	;<;;;<4;9:<<<;<<;<<<<<;;<<<<<<<<<<<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:5:730:1436	163	chr1	236	99	35M	=	403	202	TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT	;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:57:1672:1890	121	chr1	236	75	40M	=	236	0	TATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTA	:;;;9<8;;*<<<<<<:<<<<<<<<1:<<<<<<<<<<<7<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:57:1672:1890	181	chr1	236	0	*	=	236	0	CCCCCCCCCCCCCCCCCAGCCACTGCGGCCCCCCCAGCCA	-+)%)'-'+,,<066,))090+:&486083:5&&:<<5<0	MF:i:192
+EAS1_105:2:299:360:220	99	chr1	237	99	35M	=	403	201	ATTCAGTTCTAAATATAGAAATTGAAACAGCTGTG	<<<<<<<9<9<<<<<<<<<<<<<<<<<5<;<0<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:24:1037:84	163	chr1	238	99	35M	=	415	212	TTCAGTTCTAAATATAGAAATTGAAACAGCTGTGT	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<;:<57<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:86:823:683	163	chr1	240	99	35M	=	408	203	CAGTTCTAAATATAGAAATTGAAACAGCTGTGTTT	<<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;9<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:130:568:978	99	chr1	246	88	35M	=	434	223	TAAATATAGAAATTGAAACAGCTGTGTTTAGTGAC	7<<;<<;<7<:;<7<<<<<<<<);4;+<7+3+%;<	MF:i:18	Aq:i:24	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS114_45:4:73:1208:495	163	chr1	246	99	35M	=	431	220	TAAATATAGAAATTGAAACAGCTGTGTTTAGTGCC	;;;;;;;;;;;;;;;;;;;;;;;;5;;;;;37377	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:264:642:506	99	chr1	247	99	35M	=	420	208	AAATATAGAAATTGAAACAGCTGTGTTTATTGTAT	<<;<<<<<<;<<<;:;;:;;<<;<<<<;*+;*&.4	MF:i:18	Aq:i:56	NM:i:3	UQ:i:28	H0:i:1	H1:i:0
+EAS114_28:5:104:350:749	163	chr1	247	99	36M	=	415	204	AAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT	<<8<<<<<<<<<<<;<<<<<<<<0;<<<9;<85;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:227:259:597	147	chr1	248	99	35M	=	61	-222	AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT	<8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:113:809:364	99	chr1	250	99	35M	=	413	198	TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG	<<<<<<<<<<<<<<<<<<<<<<<<<<7<;<;<<<4	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:218:877:489	83	chr1	250	86	35M	=	80	-205	TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG	9<<<8<<<;<9<<<<<<<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:20:979:96	83	chr1	254	99	35M	=	79	-210	GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA	'9996;(:;-<;1<<<<=<<<<=<<<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:259:219:114	99	chr1	254	99	35M	=	411	192	GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA	<<<<<<<<<<<<<<<;<<<<<<7<7<<<<<0<<9<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:13:1034:1144	99	chr1	256	99	35M	=	429	208	AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA	<<<<<<<<<<<<<<<<<<<<<<<<3<<<;<<;<++	MF:i:18	Aq:i:69	NM:i:2	UQ:i:48	H0:i:1	H1:i:0
+EAS221_1:2:29:1486:672	147	chr1	256	99	35M	=	79	-212	AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA	<<:<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<++	MF:i:18	Aq:i:29	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS139_11:7:46:695:738	163	chr1	259	74	35M	=	428	204	TGAAACAGCTGAGTTTAGCGCCTGTGTTCACATAG	<;<<<<;<<),&4<3<<7&7<0;)).3;79;7<;0	MF:i:130	Aq:i:74	NM:i:3	UQ:i:18	H0:i:0	H1:i:0
+EAS139_11:8:26:1221:222	163	chr1	261	99	35M	=	446	220	AAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:190:727:308	147	chr1	263	99	35M	=	103	-195	ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG	;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:3:284:261:124	83	chr1	263	99	35M	=	79	-219	ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG	===27===.====&===========;;========	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:141:80:875	147	chr1	265	99	35M	=	110	-190	AGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCA	6/<;84<;<;<<<<<<5<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:24:1135:563	163	chr1	266	99	40M	=	446	220	GCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACC	<<<<:<<<<:1:<<<<<<.<<<<<<<<;<;;;43+:30::	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:90:986:1224	83	chr1	267	99	35M	=	67	-235	CTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAAC	<7*37;;;;;;;9<<;<7<<<<<<<<<<<;;<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:287:492:169	99	chr1	269	99	36M	=	449	216	GTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAAC	<<<7<<<<<<<<<<<<<<<<<<<<<<<8;;<;6<<;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:48:9:409	99	chr1	271	75	18M5I12M	=	464	228	GTTTAGTGCCTTTGTTCACATAGACCCCCTTGCAA	<<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS139_19:1:87:1222:878	163	chr1	272	10	40M	=	435	203	TATAGGGCCTTTGTTCAAACCCCTTGCAACAACCTTGAGA	&+6<6&<:<<9<1112<<;)9227</);;;2-79;)/769	MF:i:18	Aq:i:10	NM:i:3	UQ:i:41	H0:i:0	H1:i:0
+B7_591:7:200:192:373	163	chr1	275	75	14M5I17M	=	451	212	AGTGCCTTTGTTCACATAGACCCCCTTGCAACAACC	<<<<<<<<<<<<<<<<<<<<<<<<<:<:<;5<<;<<	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS56_65:1:163:846:223	163	chr1	278	74	11M5I19M	=	463	220	GCCTTTGTTCACATAGACCCCCTTGCAACAACCTT	<<<<;<<;4<<<;;9<<<<<+<<;<</27;;47;.	MF:i:130	Aq:i:74	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_30:7:283:799:560	83	chr1	283	66	35M	=	121	-197	ACATAGACCCCCTTGCAACAACCTTGAGAACCCCA	<4<6<8;;6<<<+;<:<<;<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:66	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+B7_595:4:84:802:737	147	chr1	284	68	35M	=	140	-179	CATAGACCCCCTTGCAACAACCTTGAGAACCCCAG	+<1<-;69;;;;8;:<<6<;<<<<<<<<<<<<<<<	MF:i:130	Aq:i:68	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS51_66:5:308:400:602	163	chr1	285	71	35M	=	470	220	ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG	;<<<<<<<<<<<<<<<<<<<<<<<<;;;<<;<;76	MF:i:130	Aq:i:71	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS54_81:2:285:367:932	163	chr1	285	74	35M	=	440	190	ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG	===========;======;=====;=======5==	MF:i:130	Aq:i:74	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_39:1:70:147:84	83	chr1	285	73	35M	=	128	-192	ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG	<<<:<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<;	MF:i:130	Aq:i:73	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS51_62:3:314:386:190	99	chr1	287	98	35M	=	459	207	AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA	++<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<<<	MF:i:18	Aq:i:29	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS56_65:1:53:272:944	99	chr1	287	99	35M	=	447	195	CAACCCCCTTGCAACAACCTTGCGAACCCCAGGGA	<<<<<<<<<<<<.7<.<<<<<<-<-<<<<<&<222	MF:i:18	Aq:i:41	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS188_7:5:112:51:128	163	chr1	287	99	35M	=	477	225	AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA	++<<<<<<<<<<<<<5<<<<<<<<<<<<<<;<;<6	MF:i:18	Aq:i:29	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS56_57:6:44:280:641	163	chr1	288	99	35M	=	454	201	AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA	;<<<<<<<<<<66<;<<<<<;<<2;;;<<;;;;,;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:75:946:1035	99	chr1	288	99	35M	=	480	227	AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA	<<<<<<<<<<;<<<;<<<<<<<8;<6<<<<44<:4	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:187:227:818	83	chr1	290	99	35M	=	129	-196	CCCCCTTGCAACAACCTTGAGAACCCCAGGGAATT	<<9<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:40:1128:1940	83	chr1	291	99	35M	=	112	-214	CCCCTTACAACAACCTTGAGAACCCCAGGGAATTT	<<<:///77:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:14	H0:i:1	H1:i:0
+EAS54_71:4:72:63:435	99	chr1	293	99	34M	=	490	232	CCTTGCAACAACCTTGAGAACCCCAGGGAATTTG	<<<<<<<<<<<<<<<<<<<<;<<<;<;;39:7:7	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:271:244:568	99	chr1	294	99	35M	=	481	222	CTTGCAACAACCTTGAGAACCCCAGGGAATTTGTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:82:902:868	99	chr1	295	99	35M	=	471	211	TTGCAACAACCTTGAGAACCCCAGGGAATTTGTCA	<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:313:83:546	163	chr1	296	99	35M	=	454	193	TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA	<<<<<<<<<<;<<<<<<<<<<<<<<4<<<:<;<<9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:57:786:414	163	chr1	296	99	35M	=	453	192	TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA	<<<<<<<<<<<<<<<<<<<<<<<:<<:<<:;;7<7	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:260:985:520	163	chr1	296	99	35M	=	468	207	TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA	<<<<<<<<<<<<<<<<<;:;<<;<:<<<,:1;)<;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:170:169:57	83	chr1	296	99	35M	=	138	-193	TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA	778<:<<<9<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:199:327:965	163	chr1	297	91	35M	=	494	232	NCAACAACCTTGAGAACCCCAGGGAATTTGTCAAT	!,+*+++++++++++*+++++++**)+*+**+(**	MF:i:18	Aq:i:19	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+B7_610:5:147:68:353	163	chr1	299	99	35M	=	486	222	AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT	<;<;<<7<<<<<<<7<<;;<7<4<8<<<8.;4;;;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:1:225:195:543	147	chr1	299	99	35M	=	123	-211	AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT	;;8;;+;(<<<<<<<<7;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:1:303:184:14	163	chr1	301	99	35M	=	479	213	CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA	<<<<<<8<0<<<<-<-98<<--<<<6;076;75+&	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:326:309:149	163	chr1	301	99	35M	=	467	201	CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA	<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<;;;;:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:327:795:103	147	chr1	302	99	35M	=	133	-204	AACCTTGAGAACCCCAGGGAATTTGTCAATGTCAG	;::;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:110:355:323	99	chr1	303	99	35M	=	477	209	ACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGG	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<;;<<8;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:18:1418:237	99	chr1	304	99	35M	=	503	234	CCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<7<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:112:203:90	163	chr1	305	99	35M	=	470	200	CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA	<<:<<<<<<<<.<<<<<<<<<<<<6<:867<8884	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:319:246:304	99	chr1	305	99	35M	=	472	202	CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:6:114:714:317	147	chr1	311	99	35M	=	126	-220	AACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGC	;8<;:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:5:327:991:508	99	chr1	312	99	35M	=	495	218	ACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCA	<<<<<<<<<<<<<<<<<<<<<;<;:<7:47;:75;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:77:29:126	147	chr1	315	99	35M	=	131	-219	ACAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT	()9;;<<<<<<<<<<5<<<7<<<<<<;<<<;7<<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS219_1:1:37:1004:1136	99	chr1	315	99	35M	=	473	193	CCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT	<<<<<<<<<<<<<<;<<<;<<<<<:<<;;369<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:78:583:670	83	chr1	316	99	35M	=	142	-209	CAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTT	8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:90:435:691	147	chr1	318	99	35M	=	147	-206	GGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGT	;;<;;;+<<:<<<:<;;<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:69:735:1915	147	chr1	321	99	35M	=	154	-202	AATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAG	<<::<<<7<<<<7<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:324:728:956	147	chr1	322	99	35M	=	165	-192	ATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGT	<;;;;5;<<0<<<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:269:280:716	99	chr1	323	99	35M	=	490	202	TTTGTCAATGTCAGGGAAGGAGCATTTTTTCAGTT	<<<<<<<<<2<<:2:1<<7/2/:3<<<<*<3($<<	MF:i:18	Aq:i:58	NM:i:1	UQ:i:9	H0:i:1	H1:i:0
+EAS54_73:3:88:24:744	163	chr1	325	84	35M	=	484	194	TGTCAATGTCAGGGAAGGAGCATTTTTGAAGTTTA	<7*:<<::.'<<<<:<<:<<'<63'6+'303*%%+	MF:i:18	Aq:i:21	NM:i:5	UQ:i:53	H0:i:0	H1:i:0
+EAS1_108:7:82:926:112	147	chr1	328	99	35M	=	164	-199	CAATGTCAGGGAAGGAGCATTTTGTCAGTTGCCAA	<1:/<*6<<6<<<<<6<<<<<<4<<<<82<+<<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS56_63:7:185:213:330	163	chr1	328	99	35M	=	502	209	CAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAA	<<<<<<<<<;<<;<<<<<;<<<<;;;<<;<<;<38	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:277:458:330	163	chr1	329	99	36M	=	490	197	AATGTCAGGGAAGGAGCCTTTTGTCAGTTACCAAAT	<<7<<<<<<<<<2<<<%,<6<&<<,<<<<:<<<<(7	MF:i:18	Aq:i:41	NM:i:1	UQ:i:11	H0:i:0	H1:i:1
+B7_595:1:81:1000:375	163	chr1	329	90	35M	=	524	230	NATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAA	!.............................+.(+.	MF:i:18	Aq:i:19	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+EAS220_1:8:33:672:473	99	chr1	330	99	35M	=	515	220	ATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAAT	<<<<<<<<7<7<7<<62<<<<66<15*/99*5241	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:164:797:930	147	chr1	332	99	35M	=	173	-194	GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGT	;;:;8<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:155:68:326	147	chr1	332	99	36M	=	182	-186	GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTG	;<<<:6<<<<<<6<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:5:202:39:380	99	chr1	334	99	35M	=	513	214	CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT	<<<<<<<<<<<<<<<<<;<<:;<<18<84:<&<+<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:42:1091:1726	99	chr1	334	99	35M	=	502	203	CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT	<<<<<<<<<<<<<<<<<<<<<<8<<<<<<8:<.<:	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:66:959:1311	83	chr1	336	95	35M	=	159	-212	GGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT	67.68:4::6;;;7:6:;:5;8;;<<:;;<;;;;<	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:200:559:765	99	chr1	337	99	36M	=	521	220	GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTAT	<<<<<<<<<<<<<<7<<<<<<;<<;;4<7<9;<<-;	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:328:669:662	99	chr1	337	99	34M	=	512	210	GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT	<<<<<<<<<<<<<<<<<<<<<<<<+9;<;;.<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:159:125:297	83	chr1	337	99	35M	=	170	-202	GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA	89<;;8<<;<;<4<;<8<<<<;;8<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:7:19:886:279	147	chr1	337	99	35M	=	182	-190	GAAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA	9%<2)2.2::<;<<<2<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:67	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+B7_595:1:209:653:400	83	chr1	340	99	35M	=	175	-200	AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA	<69<98<+<<6<<4<<<<</4<<:<4<<<<<<<<<	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:294:525:849	83	chr1	340	99	35M	=	167	-208	AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA	;<;:;:<;<;<<<3<<<;<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:87:1375:1303	163	chr1	340	99	35M	=	529	224	AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA	<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:325:759:288	147	chr1	341	99	35M	=	163	-213	GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC	9;<9<;<;;<;<;<;<<<:<;<<<;<<<<<;<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:76:786:458	163	chr1	341	99	35M	=	502	196	GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC	<<.<<<<2<<:84<:<<<:<8<<)<)429<2<<8<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:1:210:880:606	163	chr1	341	99	35M	=	518	212	GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAT	<<<<<<<<<<<<<<<<<<;<<<<<<:<<<<3<<8&	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS192_3:3:257:611:440	99	chr1	341	99	35M	=	524	218	GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC	<<<<<<<<<<<<<<<<<<<<8<<<<;<<<<8<<+5	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:303:402:142	83	chr1	343	99	35M	=	181	-197	AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA	;;;;;<9<<8;<<<<7<<;<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:13:122:187	83	chr1	343	99	35M	=	153	-225	AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA	<<&<;;<<<;7<<<<;<;<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:80:885:513	163	chr1	344	99	35M	=	507	198	GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG	<<<<<<<<<<<<<<<<<<<:<<<<2:<;<<75<7;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:90:1873:89	99	chr1	344	99	35M	=	531	222	GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<7<<<7	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:1:37:652:403	83	chr1	347	99	35M	=	193	-189	TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG	<;<<<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:8:28:701:724	163	chr1	347	99	35M	=	521	209	TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG	<<<<<<7<<<<<<7::<:<<-<<::::::<747::	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:8:66:655:769	99	chr1	348	99	35M	=	515	202	TTTGTCAGTTACCAAATGTGTTTATTACCAGAGGG	8;<<<<<8<<<<<;<<<7<;<<<<<;<7<27<;;7	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:231:339:551	163	chr1	350	99	35M	=	527	212	TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT	<<<<<<;<<<<<<;<<<<<<<<<<;5<<46;<;:1	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:129:694:359	163	chr1	350	88	35M	=	525	210	TGTCAGTTACCAAATGTGTTTATTACCCGAGGGAT	============+7=======:==;;;'=;==7;=	MF:i:18	Aq:i:43	NM:i:1	UQ:i:6	H0:i:0	H1:i:1
+EAS220_1:2:62:1109:804	83	chr1	350	99	35M	=	176	-209	TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT	<<<<<:<<<::<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:157:935:374	99	chr1	353	99	35M	=	512	194	CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA	<<<<<<<<<<;<<;;<<<<<<<<<::8'5++;+11	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:103:111:720	99	chr1	353	99	36M	=	512	195	CAGTTACCAAATGTGTTTATTACCAGAGGGATGGAG	<<<<<<<<<<<<<<<<<<<<<<<<<5<<<5;<5<:;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:311:100:539	163	chr1	353	99	35M	=	508	190	CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA	<<<<;<<<<;<<<<<;<<<<<<<<<:<::;7;<0;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:195:348:703	83	chr1	353	99	35M	=	215	-173	CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA	<9<<9</<<<<<<<<<<<<<<2<8<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:72:308:839	163	chr1	354	99	40M	=	517	203	AGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG	<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<99494416:	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:133:460:542	147	chr1	356	99	36M	=	195	-197	TTACCAAATGTGTTTATTACCAGAGGGATGGAGGGA	;:;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:293:355:321	83	chr1	356	99	35M	=	174	-217	TTACCAAATGTGTTTATTACCAGAGGGATGGAGGG	<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:323:639:311	83	chr1	357	99	36M	=	200	-193	TACCAAATGTGTTTATTACCAGAGGGATGGAGGGAA	-94<<<<<<<4<<<<<<<<2<<<<<7<<<-<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:321:642:388	83	chr1	357	99	33M	=	181	-209	TACCAAATGTGTTTATTACCAGAGGGATGGAGG	19<<<<<8<<<<<<<<;<<<<<<<<<<7<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:4:262:456:74	99	chr1	357	99	35M	=	504	182	TACCAAATGTGTTTATTACCAGAGGGATGGAGGGA	<<<<<<<<<<<<<<<<<<<<:;;:;7:<::7<7:3	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:8:95:426:791	99	chr1	359	99	35M	=	547	223	CCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG	<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<,<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:115:538:276	83	chr1	360	99	35M	=	209	-186	CAAATGTGTTTATTACCAGAGGGATGGAGGGAAGA	:<<<<<<<<;;<5<<;<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:196:533:921	99	chr1	361	99	35M	=	526	200	AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAG	=====1========8===:===7======971=3=	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:121:380:656	99	chr1	362	99	35M	=	542	215	AATGTGTTTATTACCAGAGGGATGGAGGGAAGAGG	<<<<<<<<<<<<<<<<<<<<<<<<:<:<<83<:<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:34:970:1374	99	chr1	363	99	35M	=	520	192	ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG	<<<<<<<<<<<<<<;7<77;<<;<;;9;;:86:::	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:29:1061:574	163	chr1	363	99	35M	=	563	235	ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG	<<<<<<<<<<<<<<<<<<;<<<<<<;<<8<:<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:124:243:35	99	chr1	364	60	35M	=	544	215	TGTGTTTATTACCAGAGGGATGGAGGGAAGAGCGA	<<<<<;;<<<<<<:<<<.<<<:++5+:1(;1;$<(	MF:i:18	Aq:i:60	NM:i:1	UQ:i:3	H0:i:1	H1:i:0
+EAS114_30:2:272:750:698	163	chr1	365	80	35M	=	538	208	GTGTTTATTACCAGAGGGATGGAGGGATGACGGAC	<)<<<<<7;<<<4<;7<<<<78068:(%<3*861,	MF:i:18	Aq:i:37	NM:i:2	UQ:i:13	H0:i:0	H1:i:1
+EAS56_53:3:126:558:408	83	chr1	368	99	35M	=	206	-197	TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT	<:<<:;;<<<<<<<<8<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:1:1140:1206	83	chr1	368	99	35M	=	181	-222	TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT	77977::99;;;:;;<;;;:;;;<<;<;;;;<;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:141:711:813	147	chr1	370	99	35M	=	209	-196	TATTACCAGAGGGATGGAGGGAAGAGGGACGCTGA	=<5<5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:1:282:274:50	83	chr1	371	99	35M	=	193	-213	ATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAA	</7;/:<<<<<<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:46:485:482	99	chr1	371	94	35M	=	530	194	ATTACCAGAGGGATGAAGGGAAGAGGGACGCTGAA	<<<<<<<<<<<<<<<<<<<<<<<6<<<<<:<:89<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_63:1:119:446:185	163	chr1	372	99	35M	=	562	225	TTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAG	<<<<<<<7<<<4<<<<9<<54<:<7<5:<::7-5;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:168:69:605	163	chr1	373	67	36M	=	565	228	TACCCGAGGGATGGAGGGTAGAGGGACGCTGAAGTG	<<<4(<<<<<<<<<<<<<(1<6<-<2<<7<<6<<++	MF:i:18	Aq:i:26	NM:i:4	UQ:i:59	H0:i:0	H1:i:0
+EAS114_32:6:78:909:394	163	chr1	373	81	35M	=	554	216	TACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGA	<<<<<<8<<<&<<<-<<<14,4;<<-0<2+<)/82	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:5:41:118:1246	99	chr1	374	99	35M	=	548	209	ACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAA	<<<<<<<<<<<<<<<<<<<<<<<</<<<<<<1<<(	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:44:498:945	147	chr1	377	82	35M	=	195	-217	ATAGGGATGGAGGGAAGAGGGCCGCTGAAGAACTT	<%*50<7<4<<<7<,<<.<8/,9<:</<<<;<;<<	MF:i:18	Aq:i:37	NM:i:2	UQ:i:15	H0:i:0	H1:i:1
+EAS114_39:5:50:972:1286	163	chr1	377	99	35M	=	559	217	AGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTT	<<<<<<<<<<<<<<<<<;<<<<<<<<<6<<7:7:;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:82:164:1924	163	chr1	378	99	35M	=	542	199	GAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTT	<<<<<<<<<<<<<<<<<<<<8<<<<<<3<<'<7<8	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:7:14:426:613	147	chr1	379	99	35M	=	214	-200	AGGGAGGGAGGGAAGAGGGACGCTGAAGAACTTTG	:<<<<&<<<<<<<<<<<<<<6<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS54_61:4:83:452:970	147	chr1	379	99	35M	=	216	-198	AGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTG	<<<39<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:157:643:175	83	chr1	380	99	35M	=	206	-209	GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA	;<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:61:1797:113	99	chr1	380	99	35M	=	551	206	GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA	<<<<<<;<<<<;:<3<<<<;;<<<8<<;:<<;3<.	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:90:828:633	163	chr1	381	99	36M	=	537	192	GGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATG	<<<<<<<<<<<8<;96<;<<<<<99<2<<;<96<8;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:61:433:385	163	chr1	381	99	35M	=	579	233	GGATGGAGGGAAGAGGGACGCTGAAGCACTTTGAT	<<<<<<<<<<<<<<<<<;<<;<<6<<)91<<;;,;	MF:i:18	Aq:i:43	NM:i:1	UQ:i:8	H0:i:0	H1:i:1
+EAS1_93:2:173:995:93	83	chr1	382	99	35M	=	215	-202	GCTGGAGGGAAGAGGGACGCTGAAGAACTTTGATG	<(0<<9<<<7<<<<<<7<<<<<<<<<7<<<<<<<<	MF:i:18	Aq:i:73	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS54_71:3:254:32:275	99	chr1	382	99	34M	=	575	228	GATGGAGGGAAGAGGGACGCTGAAGAACTTTGAT	<<<<<<<<<<<<<<<<<<<<<<;;<:<::<:2*<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:282:817:710	147	chr1	384	99	35M	=	211	-208	TGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCC	366=6;======8====:========;========	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:75:217:337	163	chr1	386	99	35M	=	568	217	GAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT	;;;;;;;;;;;;;;;;;;8;;;;;;;;;;;88787	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:181:191:418	83	chr1	387	99	36M	=	221	-202	AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:4:160:896:275	83	chr1	387	99	35M	=	220	-202	AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTC	;;;9;<<<<<<;<;;<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:88:1656:896	99	chr1	387	99	40M	=	538	191	AGGGAAGAGGGATGCTGAAGAACTTTGATGCCCTCTTCTT	<<<9<<<<<<<9<<<;<<<<<<<<<;6<<;7<<<<::9:;	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_597:8:186:850:838	147	chr1	389	99	35M	=	205	-219	GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT	<;<;<;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:64:1318:1711	147	chr1	389	99	35M	=	218	-206	GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:78:1478:1446	99	chr1	389	99	35M	=	560	206	GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<:<<<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:82:879:246	163	chr1	391	99	35M	=	576	220	AAGAGGGACGCTGAAGAATTTTGATGCCCTCTTCT	<<<<<<<<<<<<<<<<<<&<<<77<<-<<<6<62<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_610:1:139:152:856	147	chr1	392	99	35M	=	198	-229	AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT	<<<<<;<<<<<<<<<<;<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:162:503:769	99	chr1	392	99	35M	=	571	214	AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT	========================:==========	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:3:216:988:883	163	chr1	392	99	35M	=	584	227	AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT	<<<<<<<<<<<<8;<;88<;8;;;;828;8;8;;;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:118:523:591	163	chr1	393	99	35M	=	563	205	GAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTC	<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<;;<;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:3:168:741:680	163	chr1	394	99	35M	=	562	203	AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC	<<<<<<<<<<<<<<<<<<<<<<<<<1<<<<<<<<<	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:9:1289:215	147	chr1	394	99	35M	=	231	-198	AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC	7747*7;;;;+;;:2;7;:1;;9:;:;:;;:;::;	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:84:275:1572	83	chr1	394	99	35M	=	230	-199	AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC	777777::7:;74;:;:7;:::;;;;:;;8;;;<;	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:122:77:789	83	chr1	396	99	35M	=	223	-208	GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA	9<;<:<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:62:879:264	83	chr1	396	99	35M	=	216	-215	GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA	====:=<============================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:89:525:113	83	chr1	397	78	40M	=	227	-210	GACGCTGAAGAACTTTGATTCCCTCTTCTTCCAAAGATGA	);:+4-&<<+<<:<+<)<<<7<8<8:<:<<:<82::<<2<	MF:i:18	Aq:i:39	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_39:2:18:967:582	83	chr1	398	99	35M	=	200	-233	ACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAG	<:<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:140:522:212	163	chr1	399	99	35M	=	568	204	CGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA	<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<;95;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:2:125:628:79	83	chr1	400	99	34M	=	229	-205	GCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA	95&<<<<<<<63<<<6<<<<8<;<<8<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:185:312:167	163	chr1	401	99	35M	=	562	196	CTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATG	===========================;855;===	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:248:753:731	147	chr1	402	99	35M	=	231	-206	TGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGA	7;55;=,=89=====3===9=======9=======	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:299:360:220	147	chr1	403	99	35M	=	237	-201	GAAGAACTTAGATGCCCTCTTCTTCCAAAGATGAA	66<;;4;<<()<<4<<<<<<;<<;<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:7	H0:i:0	H1:i:1
+EAS114_45:6:5:730:1436	83	chr1	403	99	35M	=	236	-202	GAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAA	7977979;;;;;;;;;7;3<;2<;26;<;<<;;<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:134:868:252	99	chr1	404	99	36M	=	595	227	AAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<<:<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:165:431:857	99	chr1	406	99	35M	=	559	188	GAACTTTGATGCCCTCTTCTTCCAAAGATGAAACG	<<<<<<<<<<<<<<<<<<<<<<<6&:<7<:76,;;	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:86:823:683	83	chr1	408	99	35M	=	240	-203	ACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCG	<4<<<<<<<<:<<6<<7<<<8<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:176:168:513	83	chr1	410	99	35M	=	210	-235	TTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTA	;0;;;7:<<<<<<<;<<:<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:259:219:114	147	chr1	411	99	35M	=	254	-192	TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA	666<:6/:6::6::<:::<<<;<<<<<<<<;<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:84:1013:1074	121	chr1	411	71	35M	=	411	0	TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA	8;;<;8744<7<<4<<47<<<<<<7<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:84:1013:1074	181	chr1	411	0	*	=	411	0	GCAAGGGGGTCTATGTGAACAAAGGCACTAAACAC	<7<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:192
+EAS54_81:7:325:150:465	99	chr1	412	99	35M	=	598	221	TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<3;;:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:179:13:782	163	chr1	412	99	35M	=	568	191	TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC	<<<<<<<<<<<<<<<<<:<<:7<<<<::<7<:-:1	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:113:809:364	147	chr1	413	99	35M	=	250	-198	GATGCCCTCTTCTTCCAAAGATGAAACGCGTAACT	;<;;;<<<:<6<<<::<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:188:802:71	83	chr1	415	99	35M	=	232	-218	TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC	;;;;<:::<<<<<7<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:2:204:264:413	99	chr1	415	96	34M	=	593	213	TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTG	<<<<<<<<<<<<<;:59<+<<:<<<9<<;:62<)	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:5:104:350:749	83	chr1	415	99	36M	=	247	-204	TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCG	;<93;9;<3;<<<;<<<<<;<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:24:1037:84	83	chr1	415	99	35M	=	238	-212	TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC	<;<<;<<<7<<7&<<<<<<;<<<;<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:242:354:637	147	chr1	417	99	36M	=	222	-231	CCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT	8<;;;;;<<<8;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:37:761:635	99	chr1	418	99	35M	=	581	198	CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT	<6<<<<<<6<<<<<<<<<<<<<<<<<8<8<<4<4<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:44:1578:1674	99	chr1	418	99	35M	=	573	190	CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT	;<<;<<;<<;;;;;9<;9;;<9:;;<:;9;76669	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:120:63:653	99	chr1	420	99	35M	=	598	213	TCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<9<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:264:642:506	147	chr1	420	99	35M	=	247	-208	ACTTCATCCAAAGATGAAACGCGTAACTGCGCTCT	&;(-/)-1&:<<9<25<<<<2<1<';8<<<:888<	MF:i:18	Aq:i:56	NM:i:2	UQ:i:13	H0:i:1	H1:i:0
+EAS188_7:3:101:572:491	99	chr1	425	99	35M	=	600	210	TTCCAAAGATGAAACGCGTAACTGCGCTCTCATTC	<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<1<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:27:1881:486	163	chr1	427	99	35M	=	607	215	CCAAAGATGAAACGCGTAACTGCGCTCTCATTCAC	;;;;;;;;;;;;;;1;;;;;;;;78;8;8;8878/	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:6:120:14:944	163	chr1	428	99	35M	=	621	228	CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT	<<<<<<<<<<<<<<<;<<<<<;<<<<<<<:;8;;7	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:46:695:738	83	chr1	428	74	35M	=	259	-204	CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT	<<<<2<5<<-<<<<<<<4<<<<<<<<<<<<<<3<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:13:1034:1144	147	chr1	429	99	35M	=	256	-208	AAAGATGAAACGCGTAACTGCGCTCTCATTCACTC	<<:%<9)<<<<<<8<<<<9<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:6:91:360:585	99	chr1	430	99	35M	=	586	191	AAGATGAAACGCGTAACTGCGCTCTCATTCACTCC	<<<<9<<<<<;<<<;<<77<<<;<;;<;;<;<;;<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:73:1208:495	83	chr1	431	99	35M	=	246	-220	AGATGAAACGCGTAACTGCGCTCTCATTCACTCCA	8-889<<;<;;:<;<;;;;;;<<;;<;;;;<<;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:16:1081:1894	163	chr1	431	99	35M	=	624	228	AGATGAAACGCGTAACTGGGCTCTCATTCACTCCA	<<<<<<<<<<<<<<<<<<8<<<<;<<;<<<<<<<+	MF:i:18	Aq:i:45	NM:i:1	UQ:i:23	H0:i:0	H1:i:1
+EAS188_4:7:35:408:348	117	chr1	433	0	*	=	433	0	GGTTCTCAAGGTTGTTGCAATGGGGTCTATGTGAA	.73<;<<:77<<<<<<<<<<-<<;<<<<<<<<<<<	MF:i:192
+EAS188_4:7:35:408:348	185	chr1	433	35	35M	=	433	0	AAGAAACGCGTAACTGCGCTCTCATACACTCCAGC	4,'3<6;)2);<3<-6<;<;7+7<5+<<<7<<<<<	MF:i:64	Aq:i:0	NM:i:2	UQ:i:21	H0:i:0	H1:i:1
+EAS56_53:4:130:568:978	147	chr1	434	88	35M	=	246	-223	TGAAACGCGAAACTGCACTCTCATTCACTCCAGCT	--;066;;62<<<2&<+<+<2;<<2<<<;<<<7<<	MF:i:18	Aq:i:24	NM:i:2	UQ:i:27	H0:i:0	H1:i:0
+EAS139_19:1:87:1222:878	83	chr1	435	34	40M	=	272	-203	TCAGCGCGTCACTCCGCTCTCATTCACCCCAGCTCCCTGT	!!;*:885<&<<<)8&<:<<<8<8<::*<4<88<<<8<<<	MF:i:18	Aq:i:10	NM:i:6	UQ:i:42	H0:i:0	H1:i:0
+EAS51_64:6:143:763:480	117	chr1	436	0	*	=	436	0	CTGAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA	;<&-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:192
+EAS51_64:6:143:763:480	185	chr1	436	70	35M	=	436	0	AAACGCGTAACTGCGCTCTCATTCACTCCAGCTCC	::3<:6<<<:<<<<7<<<<<<<<)6<<<1<<<<;<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:4:145:607:216	163	chr1	437	99	35M	=	596	194	AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC	<<<<<<<<8<<<<<<<<<<4<<<7<:<<1<<;;99	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:46:285:790	121	chr1	437	72	35M	=	437	0	AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC	;;<8<;<<<<88<8<<;;<;<<;<<<<<<<<;<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:46:285:790	181	chr1	437	0	*	=	437	0	TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG	!!<<3<<<;;<<<<<<<<<;<;7<<7<<<<<<;<<	MF:i:192
+EAS56_59:4:329:577:757	117	chr1	437	0	*	=	437	0	TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG	!!<<<<9;<:<<;<<<<<<<<;<<<<<<<<<<<<<	MF:i:192
+EAS56_59:4:329:577:757	185	chr1	437	72	35M	=	437	0	AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC	;;;888;<<<<<<6<<<2;<<<<<<;<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:57:722:347	163	chr1	439	99	35M	=	599	195	CGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:285:367:932	83	chr1	440	74	35M	=	285	-190	GCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGT	9=5==;=;7===;==;===================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:38:842:395	73	chr1	442	77	35M	*	0	0	GTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<93<;9	MF:i:32	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:8:14:601:624	163	chr1	446	99	35M	=	622	211	CTGCGCTCTCATTCACTCCAGCTCCCTGTCAACCC	<<1<<<<<<<<<<<<<<<<<3<<::<<7<<1,<:(	MF:i:18	Aq:i:69	NM:i:2	UQ:i:18	H0:i:1	H1:i:0
+EAS114_45:3:3:1377:1663	99	chr1	446	99	35M	=	626	215	CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA	<<;;;;<:;;:<;;<;;<;:;;<;9;;::977676	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:26:1221:222	83	chr1	446	99	35M	=	261	-220	CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA	<<<<<<<:<:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:82:566:1096	99	chr1	446	99	35M	=	621	210	CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA	<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<;<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:24:1135:563	83	chr1	446	99	40M	=	266	-220	CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA	6+96:87<&8<<79:<;<<<<:<<;<<<<<<;;<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:1:53:272:944	147	chr1	447	99	35M	=	287	-195	TGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAA	&94<4&8.6<6&;<:0:8;;:6;<;:<*<<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:287:492:169	147	chr1	449	99	36M	=	269	-216	CGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG	;/;6<<<<4(<(<<<<6<<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:49:163:904	163	chr1	450	99	35M	=	616	201	GCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78958	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:200:192:373	83	chr1	451	75	36M	=	275	-212	CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC	<<<8<<<4<4<<<<<:<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:253:285:104	163	chr1	451	99	35M	=	627	211	CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA	======================:========7==;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:151:159:43	99	chr1	452	99	35M	=	645	228	TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC	<<<<<<<;<<<8<<<;<;8<<<<7<77;;79<09+	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:1:115:868:887	163	chr1	452	99	35M	=	650	233	TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC	>>>>>>>>>>>>>>;<>>>>><<>>>;<+<</;;1	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:57:786:414	83	chr1	453	99	35M	=	296	-192	CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC	;;;8;1;:<<<<;<::;;<<<<;<;;<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:197:170:559	121	chr1	453	71	35M	=	453	0	CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC	<:<;;:<5<5<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:197:170:559	181	chr1	453	0	*	=	453	0	TTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAACA	:;;;;<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<	MF:i:192
+EAS1_103:7:313:83:546	83	chr1	454	99	35M	=	296	-193	TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT	;)<994<;<<<<<<<;<<<<<<<<<<<<<<5<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:44:280:641	83	chr1	454	99	35M	=	288	-201	TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT	9;<<9;9;;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:1:60:837:923	163	chr1	457	61	36M	=	641	220	TTCACGCCAGCTCCCTGTCACCCAATGGACCTCTGA	<<<<<4<<+<<*<<<<88<<<<<'*<4-+<<4&<40	MF:i:18	Aq:i:24	NM:i:2	UQ:i:24	H0:i:0	H1:i:1
+EAS114_45:5:85:401:1190	163	chr1	458	99	35M	=	652	229	TCACTCCAGCTCCCTGTCACCCAATGGACCTGTGA	4;;;1;;;;;;.6;;;(;;/;/;3;;;7;(3&063	MF:i:18	Aq:i:55	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:314:386:190	147	chr1	459	98	35M	=	287	-207	CACTCCAGCTCCCTGTCACCCAATGGACCTGTGAT	76;%;<<3<9;<69<<<7;;;<<<<<<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:2:831:692	99	chr1	462	99	35M	=	634	207	TCCAGCTCCCTGTCACCCAATGGACCTGTGATATC	<<<<<<<<;<<<<<<<<<<9<<:9<<<;;96<796	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:1:163:846:223	83	chr1	463	74	35M	=	278	-220	CCAGCTCCCTGTCACCCAATGGACCTGTGATATCT	<7<5<*<<<<0<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:48:9:409	147	chr1	464	75	35M	=	271	-228	CAGCTCCCTGTCACCCAATGGACCTGTGATATCTG	<<<<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:134:751:831	99	chr1	465	99	36M	=	651	222	AGCTCCCTGTCACCCAATGGACCTGTGATATCTGGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<948	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:326:309:149	83	chr1	467	99	35M	=	301	-201	CTCCCTGTCACCCAATGGACCTGTGATATCTGGAT	;;<<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:260:985:520	83	chr1	468	99	35M	=	296	-207	TCCCTGTCACCCAATGGACCTGTGATATCTGGATT	;9;7<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:112:203:90	83	chr1	470	99	35M	=	305	-200	CCTGTCACCCAATGGACCTGTGATATCTGGATTCT	;<;:;<;;;<<<<<<<<<:<<<7<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:308:400:602	83	chr1	470	71	35M	=	285	-220	CCTGTCACCCAATGGACCTGTGATATCTGGATTCT	;77;2<<;<7<<;<<<;<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:82:902:868	147	chr1	471	99	35M	=	295	-211	CTGTCACCCAATGGACCTGTGATATCTGGATTCTG	<<;;<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:153:977:200	163	chr1	472	99	35M	=	640	203	TGTCACCCAATGGACCTGTGATATCTGGATTCTGG	;<<;<<<<7<<;;;;;<<6<<<<<86;;8<;8;6;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:319:246:304	147	chr1	472	99	35M	=	305	-202	TGTCACCCAATGGACCTGTGATATCTGGATTCTGG	;;<;;;<<<<8;<<<<;<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:37:1004:1136	147	chr1	473	99	35M	=	315	-193	GTCACCCAATGGACCTGTGATATCTGGATTCTGGG	</8<<<<7<+<<<<<<<,<<<<<<<<<6<<<<1<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:59:396:359	99	chr1	474	99	35M	=	670	231	TCACCCAATGGACCTGTGATATCTGGATTCTGGGA	<<9;;<;<;;;;<;;9;;;;;<;;;;;<;;77677	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:45:1769:1130	163	chr1	476	99	35M	=	635	194	ACCCAATGGACCTGTGATATCTGGATTCTGGGAAA	;;;;;;;;;;;;9;;;;;;19;;;9;;;;176777	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:110:355:323	147	chr1	477	99	35M	=	303	-209	CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT	6069;1<<;4<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:28:708:463	99	chr1	477	99	36M	=	672	231	CCCAATGGACCTGTGATATCTGGATTCTGGGAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;<:<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:5:112:51:128	83	chr1	477	99	35M	=	287	-225	CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT	;9<;;:<<:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:1:303:184:14	83	chr1	479	99	35M	=	301	-213	CAATGGACCTGTGATATCTGGATTCTGGGAAATTC	:<<.<;;7<:<<<<<<7<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:84:101:328	163	chr1	480	99	35M	=	673	228	AATGGACCTGTGATATCTGGATTCTGGGAAATTCT	<<<;<<<<<<<<;<<<<<<<<<<:<;;<44;;<;<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:228:354:203	99	chr1	480	99	34M	=	643	198	AATGGACCTGTGATATCTGGATTCTGGGAAATTC	88<<<8<<<<<<<<<8<<<<<<<<<4<<<4/9/;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:38:856:336	99	chr1	480	99	33M	=	656	211	AATGGACCTGTGATATCTGGATTCTGGGAAATT	<<<<<<<<<<<;;<;<;<:69<<;<5-500373	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:75:946:1035	147	chr1	480	99	35M	=	288	-227	AATGGACCTGTGATATCTGGATTCTGGGAAATTCT	<<)4</<5<<<<<<<<<<<<<<<<<<<<<66<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:271:244:568	147	chr1	481	99	35M	=	294	-222	ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT	;<<<<<<;<;<<<<<<<<<<;;<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:8:129:477:427	99	chr1	481	99	35M	=	652	206	ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT	<<<<<<<<<<<<<<<<<<;;<<<<::<9<;<<;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:262:297:601	163	chr1	482	99	35M	=	635	188	TGGACCTGTGATATCTGGATTCTGGGAAATTCTTC	<<<<;<<9<<57<<7<<<;<<;77-;;53<<;;<7	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:88:24:744	83	chr1	484	84	35M	=	325	-194	GTCCTGTGATATCTGGATTCTGGGAAATTCTTCAT	4%++88;-9<;<<<+8<<<:<;8:<<<<<<<<<<<	MF:i:18	Aq:i:21	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+B7_610:5:147:68:353	83	chr1	486	99	35M	=	299	-222	CCTTTGATATCTGGATTCTGGGAAATTCTTCATCC	<<;;<<<<<<<<+;<<;<<0;<<<<;<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS51_78:7:316:961:576	99	chr1	488	65	35M	=	666	213	TGTGATATCTGGATTCTGGGAAATTCTTCATCCCG	<<<<<<<;<<<<;<<:<<;<;<<:;<9+34;;6%/	MF:i:18	Aq:i:65	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS56_61:8:7:171:402	99	chr1	489	99	35M	=	682	228	GTGATATCTGGATTCTGGGAAATTCTTCATCCTGG	<<<<<<<<<<<<<<<;/<<<<;<<<<<;<<1<<<4	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:277:458:330	83	chr1	490	99	36M	=	329	-197	TGATATCTGGATTCTGGGAAATTCTTCATCCTGGAC	<<<<<8;<<<1<;7<<<;<<<<<<<<7<<7<<<<;7	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:269:280:716	147	chr1	490	99	35M	=	323	-202	TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA	6;<;;6:;<<<;64;<<<<<<<<;<<;<<;<<<<<	MF:i:18	Aq:i:58	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:72:63:435	147	chr1	490	99	35M	=	293	-232	TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA	::<;<<<<;;;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:8:46:900:610	99	chr1	491	99	35M	=	684	228	GATATCTGGATTCTGGGAAATTCTTCATCCTGGAC	<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<;;4;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:189:467:475	99	chr1	493	99	35M	=	683	225	TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC	<<<<<<<<<<<<;;;<<<<<<<<<:<<<<:+<<;;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:201:959:19	99	chr1	493	99	35M	=	681	223	TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC	<<<<<<<<<<<<<<;<<<:<;<<;<<;+;+<3494	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:240:593:842	99	chr1	494	99	35M	=	660	201	ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT	============<================9===:=	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:29:381:169	163	chr1	494	99	35M	=	641	182	ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT	<<<<<<<<<<<2<288;<<;<<:4<:<<;&92929	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:199:327:965	83	chr1	494	91	35M	=	297	-232	ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT	<5<:<<<58<:<<<<<<8<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:87:323:895	99	chr1	494	99	35M	=	671	212	ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT	;<<;;;;<<;<959;;;<;:<<;9<;;;4377788	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:5:327:991:508	147	chr1	495	99	35M	=	312	-218	TCTGGATTCTGGGAAATTCTTCATCCTGGACCCTG	0:;::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:6:882:784	163	chr1	496	99	35M	=	686	225	CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGA	<<<<<<<<<<<<<:<<<<<<<<<<<<:6::::<,2	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:175:705:982	99	chr1	496	89	36M	=	660	200	CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG	<<<<;<<;<<<<<<<<<<<<<;<<+<:;39;+<40<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:30:92:753	99	chr1	497	99	35M	=	673	211	TGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG	<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:245:323:744	163	chr1	499	99	35M	=	679	215	GATTCTGGGAAATTCTTCATCCTGGACCCTGAGAG	<;<<<<<<<<<<<<<<<<<<<<<;<+<<<<<<<4<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:76:786:458	83	chr1	502	99	35M	=	341	-196	TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT	;<;:7<.<<<<<8;<<<<<<<6<;8<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:185:213:330	83	chr1	502	99	35M	=	328	-209	TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT	;4<<<;<<<<<<<<;<<;;;<<<<9<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:42:1091:1726	147	chr1	502	99	35M	=	334	-203	TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT	4443838<4<8<87<<3</8<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:12:158:458	99	chr1	503	84	36M	=	675	208	CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT	<77<<<7<<<<<<<<<<<<5<4;<<;5<;;+2<+;;	MF:i:18	Aq:i:15	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:277:590:364	163	chr1	503	99	35M	=	681	213	CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC	<<<<<8<<<<<<<<;<<<<<;;<7<<;;7858;;8	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:18:1418:237	147	chr1	503	99	35M	=	304	-234	CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC	<<:<<<<<<<<:<<<<<<<<<:<<<<<<<<<<<<:	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:4:262:456:74	147	chr1	504	99	35M	=	357	-182	TGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT	862;<<<:;<;<<<;;;<<<<;;<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:186:989:869	99	chr1	505	99	34M	=	655	185	GGGAAATTCTTCATCCTGGACCCTGAGAGATTCT	<<<<<<<<<<<<<<<<<<<<7;:<<<<<<<<<$<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:80:885:513	83	chr1	507	99	35M	=	344	-198	GAAATTCTTCATCCTGGACCCTGAGAGATTCTGCA	<7<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:311:100:539	83	chr1	508	99	35M	=	353	-190	AAATTCTTCATCCTGGACCCTGAGAGATTCTGCAG	;<;<<;;<;<<;<<<<<;9<<<;<<<<<<<<9<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:199:511:426	163	chr1	509	99	35M	=	669	195	AATTCTTCATCCTGGACCCTGAGAGATTCTGCAGC	<<<<<<<<<<<<<<;<<<<<<:<<<<<<<<<;:<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:6:26:227:1053	99	chr1	510	99	35M	=	663	188	ATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:172:622:707	99	chr1	511	99	35M	=	685	209	TTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCC	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<5:<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:157:935:374	147	chr1	512	99	35M	=	353	-194	TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCA	94988994.<:<+42::<<<<<:<:<4<<<<;<1<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:103:111:720	147	chr1	512	99	36M	=	353	-195	TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG	;4<<<;)<<-<9<;<<7<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:328:669:662	147	chr1	512	99	35M	=	337	-210	TCTTCATCCTGTACCCTGAGAGATTCTGCAGCCCA	4<<;<<8<.<88.<<;4<<<<<<<4<.<<<<7<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:23	H0:i:0	H1:i:1
+EAS51_64:5:202:39:380	147	chr1	513	99	35M	=	334	-214	CTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG	/92/;2<+2<<<<64<<<<<<<<<<<<<<<<7<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:8:66:655:769	147	chr1	515	99	35M	=	348	-202	TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT	8<<;:69<;:;9<2<*9<;6<<<<<17<;<3+<;<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:4:7:526:343	99	chr1	515	99	35M	=	698	218	TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT	<<<<<<<<<<<<<<<:<<<5<<<<<<5;<<<+8<;	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:33:672:473	147	chr1	515	99	35M	=	330	-220	TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT	5<70<<55<4<24.5<<<<<<<<<6<<<<<<2<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:72:308:839	83	chr1	517	99	40M	=	354	-203	ATCGTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT	:8:.:<;<<5<<<<<<<<<<<<<<<<;:<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:2	UQ:i:40	H0:i:0	H1:i:1
+EAS56_61:1:210:880:606	83	chr1	518	99	35M	=	341	-212	TCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCA	.<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:80:760:490	99	chr1	520	99	34M	=	686	201	CTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAG	<<<<<<<<<<8<;<7<<<<<<;<;;<2<;<<<1,	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:34:970:1374	147	chr1	520	99	35M	=	363	-192	CTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGA	<6<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_593:1:200:559:765	147	chr1	521	99	36M	=	337	-220	TGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT	8<;;4<3;<;<<<<<<5<<;;<<98;;<<<<;<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_53:8:28:701:724	83	chr1	521	99	35M	=	347	-209	TGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGAT	.;..3;8.8<8;<<;9<9<<<7;<<<<<<<<7<<7	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:318:345:156	163	chr1	522	99	35M	=	695	208	GGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT	<<<<<<<<:<<<<<<<<5<:5<<<3:'<72')*;9	MF:i:18	Aq:i:39	NM:i:1	UQ:i:6	H0:i:0	H1:i:1
+B7_595:1:81:1000:375	83	chr1	524	90	35M	=	329	-230	ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGC	;8<;+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:13:1155:631	163	chr1	524	99	40M	=	668	184	ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTG	<<<<<<;<<;<<<<<<;<<<<<9<;<;94<<%<<<7:777	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:257:611:440	147	chr1	524	99	35M	=	341	-218	ACCCTGAGAGATTCTGCAGCCCAGATCCAGATTGC	2<;;8<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_26:6:129:694:359	83	chr1	525	88	35M	=	350	-210	CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT	7777<7<7;77+<3<<;<<;<<<<;<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_11:6:11:285:1567	163	chr1	525	99	35M	=	685	195	CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_95:1:196:533:921	147	chr1	526	99	35M	=	361	-200	CCTGAGAGATTCTGCAGCCCAGATCCAGATTGCTT	7<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_11:2:6:251:1557	163	chr1	526	99	35M	=	700	209	CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:6:20:492:850	99	chr1	526	78	35M	=	694	203	CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT	<7<<<<<<<<<<<.<54<7&<<<7<74<2<<<2<<	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:231:339:551	83	chr1	527	99	35M	=	350	-212	CTGAGAGATTCTGCAGCCCAGATCCAGATTGCTTG	<;<<;<<<<<<<<<<;:<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_19:4:68:1122:79	99	chr1	528	99	40M	=	687	199	TGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCT	<<<<<<<<<<<<<;<<<<;<<<<<<;<<<4;<<4;99::;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:87:1375:1303	83	chr1	529	99	35M	=	340	-224	GAGAGATTCTGCAGCCCAGATCCAGATTGCTTGTG	:<;<(<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS220_1:8:46:485:482	147	chr1	530	94	35M	=	371	-194	AGAGATTCTGCAGCCCAGATCCAGATTGCTTGTGG	<<<<<::<<<<<<<<6<<<<<<<<<6<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS218_4:7:90:1873:89	147	chr1	531	99	35M	=	344	-222	GAGATTCTGCAGCCCAGATCCAGATTGCTTGTGGT	<<<<;49<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_26:5:238:31:968	99	chr1	534	99	35M	=	717	218	ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTG	9======8====*=====,=1=======<=7:::,	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:78:773:660	163	chr1	534	99	36M	=	711	213	ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGA	<<<<<<<<;<<<<<<<<<8<8<<;<<<;<<;7<<4:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:90:828:633	83	chr1	537	99	36M	=	381	-192	CTGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG	<<<;<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_30:2:272:750:698	83	chr1	538	80	35M	=	365	-208	TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG	0<;8;64;<<<;<;.<+;:<4;4<;<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_19:3:88:1656:896	147	chr1	538	99	40M	=	387	-191	TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCTGC	6/8::*9/*3*'<88<:9*<<<8<<<;<<<<<<<<;<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:9	H0:i:1	H1:i:0
+EAS54_61:6:126:541:194	163	chr1	540	97	35M	=	730	225	CAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGC	<<<<<<<<8<<<<<8<<<<<<<<<8<<<428+<80	MF:i:18	Aq:i:43	NM:i:1	UQ:i:23	H0:i:0	H1:i:1
+EAS114_28:4:9:55:730	163	chr1	540	99	36M	=	722	218	CAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT	>>=>>+==>>==<==<=8=><:;8/;7</5724-2;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:278:918:892	99	chr1	541	99	35M	=	720	214	AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT	=============:====================8	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:7:243:876:758	99	chr1	541	99	35M	=	712	206	AGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;78<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_65:5:121:380:656	147	chr1	542	99	35M	=	362	-215	GCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTG	:;<<;<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:82:164:1924	83	chr1	542	99	35M	=	378	-199	GCCCAGCACCAGATTGCTTGTGGTCTGACAGGCTG	6<<<<<<-<<<<<<<<<2<<06<9<<<<<1<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS114_30:6:163:312:891	99	chr1	543	99	35M	=	709	201	CCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGC	<<<<<<<<<;<<<<<<<<<<<<<<<<:;;<;;<;0	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:124:243:35	147	chr1	544	60	35M	=	364	-215	GCATATCCAGATTGCTGGTGGTCTGACAGGCAGCA	&+<+;<694;+&99<<2<;423<26<-<<<<,<3<	MF:i:130	Aq:i:60	NM:i:2	UQ:i:28	H0:i:0	H1:i:0
+B7_591:1:191:462:705	99	chr1	545	99	36M	=	721	212	CAGATCCAGATTGCTTGTGGTCTGACAGGCTGCAAC	<<<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<::<6	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_610:8:95:426:791	147	chr1	547	99	35M	=	359	-223	GNTCCAGATTGCTTGTGGTCTGACAGGCTGCAACT	!!!!<<<<<;;<<<<;<<;<;;<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:1	UQ:i:23	H0:i:1	H1:i:0
+EAS218_4:5:41:118:1246	147	chr1	548	99	35M	=	374	-209	CTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTG	<<<<<<<<<<<<<<<+<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:27:973:518	99	chr1	549	99	35M	=	691	177	TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT	<<<<<<<<<<<<<<;<<<<7<<<<<<<<88;0:8;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:4:679:110	99	chr1	549	99	35M	=	705	191	TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT	<<<<<<<<<<<<<<<<<<<;<<<<<<<<::<;;:7	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:297:283:948	163	chr1	550	99	35M	=	727	212	CCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTG	<<<<<<<<<<<<<<<<<<<<<<<:<<9;)+1;19-	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:61:1797:113	147	chr1	551	99	35M	=	380	-206	CAGATAGCTTGTGGTCTGACAGGCTGCAACTGTGA	<<0<<&<<<<;<<4;;3<;<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS188_7:6:205:873:464	99	chr1	552	99	35M	=	743	226	AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG	<<<<<<<<<7<<<<<<<<<<<<:<<,:<:<<<<::	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:33:1168:1762	99	chr1	552	99	35M	=	728	211	AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG	<<<<<<<<<<<<<<<<;<<;<;<<<<<<<<:;2::	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:78:909:394	83	chr1	554	81	35M	=	373	-216	ATTGCTTGGTGTCTGACAGGCTGCAACTGTGAGCC	6167&+&&/&//734/3<<<9*<;;3<3<;9<<3<	MF:i:18	Aq:i:21	NM:i:2	UQ:i:19	H0:i:0	H1:i:0
+EAS1_103:2:226:302:758	163	chr1	556	99	35M	=	751	230	TGCTTGTGGTCTGACAGGCTGCAACTTTGAGCGNT	<<<<<<<;;;,<;<92;66<;))42<&2&(/1!!!	MF:i:18	Aq:i:33	NM:i:2	UQ:i:9	H0:i:0	H1:i:1
+EAS114_28:5:206:671:49	163	chr1	557	99	36M	=	719	198	GCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCA	<<<<<<;<<<<8<<<;;<<<3<<8<8<35+,55;,3	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:165:431:857	147	chr1	559	99	35M	=	406	-188	TTGGGGTCTGACAGGCTGCAACTGTGAGCCATCAC	''7'/;'1%0447<<<*<6<<<*<*<<<<6<<<<<	MF:i:18	Aq:i:53	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS114_39:5:50:972:1286	83	chr1	559	99	35M	=	377	-217	TTGTGGTCTGACAGGCTGCAACTGTGAGCCATCAC	:;;7;7;;0<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:288:552:440	163	chr1	560	87	35M	=	747	222	TGTGGTCTGACAGGCTGCAACTGTGAGCCTTCCAT	<<<<71<77<<<:<<<&<4<<77<16<88&36+%%	MF:i:18	Aq:i:26	NM:i:4	UQ:i:26	H0:i:1	H1:i:0
+EAS221_1:8:78:1478:1446	147	chr1	560	99	35M	=	389	-206	TGTGGTCTGACAGGCTGCAACTGTGAGCCATCACA	<8,8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:275:851:240	99	chr1	561	99	35M	=	743	217	GTGGTCTGACAGGCTGCAACTGTGAGCCATCACAA	<<<<<<<<<<<<<<<<<<<<<<<:<<4<7<<<<<<	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:185:312:167	83	chr1	562	99	35M	=	401	-196	TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT	<<8:<8<<<<<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:1:119:446:185	83	chr1	562	99	35M	=	372	-225	TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT	+70730;<0<77;;<<<<<9<<<<<<9<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:3:168:741:680	83	chr1	562	99	35M	=	394	-203	TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT	<<5<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:67:1797:1931	99	chr1	562	99	35M	=	750	223	TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:228:182:717	99	chr1	563	99	35M	=	729	201	GGTCTGACAGGCTGCAACTGTGAGCCATCCCCATG	<=9============5==5=<,59<=1=<&;&;;7	MF:i:18	Aq:i:66	NM:i:2	UQ:i:10	H0:i:1	H1:i:0
+EAS112_34:7:118:523:591	83	chr1	563	99	35M	=	393	-205	GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG	4:--&0:67<<8:<<<<<<<<<<<:4<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:29:1061:574	83	chr1	563	99	35M	=	363	-235	GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG	<87<5<<9<<<66<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:168:69:605	83	chr1	565	67	36M	=	373	-228	TCTGACAGGCGGCAACTGTGAGCCATCACAATGAAC	'<'<144<0<&<<<<<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:26	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS221_3:4:90:247:212	99	chr1	567	99	35M	=	733	201	TGACAGGCTGCAACTGTGAGCCATCACAATGAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<8<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:140:522:212	83	chr1	568	99	35M	=	399	-204	GACAGGCTGCAACTGTGAGCCATCACAATGAACAA	:;8;:::<<:<<<<<<<<<7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:179:13:782	83	chr1	568	99	35M	=	412	-191	GACAGTCTACAACTGTGAGCCATCACAATGAACAA	&37.3&;3'*<3<;9<9<<5<<<<<<<<<9<<<<<	MF:i:18	Aq:i:39	NM:i:2	UQ:i:11	H0:i:0	H1:i:1
+EAS114_45:3:75:217:337	83	chr1	568	99	35M	=	386	-217	GACAGGCTGCAACTGTGAGCCATCACAATGAACAA	4779797;;;<;:4;;<<<77<;;;7<<;<;<;<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:168:528:288	163	chr1	570	99	35M	=	740	205	CAGGCTGCAACTGTGAGCCATCACAATGAACAACA	<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<;<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:162:503:769	147	chr1	571	99	35M	=	392	-214	AGGCTGCAACTGTGAGCCATCACAATGAACAACAG	;:;1;=8=;:+=====;&==7==============	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:163:618:570	163	chr1	571	99	35M	=	751	215	AGGCTGCAACTGTGAGCCATCACAATGAACAACAG	<<<<<<<8<<<<<<<<<<<<<+<.7<<..<;&;8;	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:2:251:121:479	163	chr1	572	99	35M	=	750	213	GGCTGCAACTGTGAGCCATCACAATGAACAACAGG	<<<<<<<<<<<;:<<<<;:;:<:<;:188;7:<+(	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:44:1578:1674	147	chr1	573	99	35M	=	418	-190	GCTGCAACTGTGAGCCATCACAATGAACAACAGGA	62631;;4;;;8;;48;;7;8;;;;;;;;;8;;;;	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:263:74:407	163	chr1	574	99	35M	=	754	215	CTGCAACTGTGAGCCATCACAATGAACAACAGGAA	<<<<2<<<<<<:<<<9<<4<<<<:<<<<9<999.7	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:254:32:275	147	chr1	575	99	35M	=	382	-228	TGCAACTGTGAGCCATCACAATGAACAACAGGAAG	(6+<;+6:9<<:7:<95<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:82:879:246	83	chr1	576	99	35M	=	391	-220	ACAACTGTGAGCCATCACAATGAACAACAGGAAGA	%+=661;&===:&==1<5======1==========	MF:i:18	Aq:i:43	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS54_71:4:165:397:25	163	chr1	576	99	35M	=	759	217	GCAACTGTGAGCCATCACAATGAACAACAGGAAGA	<<7<<<<<<)97<6<:3:60:3+37-37+<:33:3	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:148:776:486	163	chr1	578	99	35M	=	755	212	AACTGTGAGCCATCACAATGAACAACAGGAAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:59:1576:946	99	chr1	578	99	35M	=	761	218	AACTGTGAGCCATCACAATGAACAACAGGAAGAAA	<:<<<<<<<<<<<<:<:<<<<<<<8<<::1<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:61:433:385	83	chr1	579	99	35M	=	381	-233	ACTGTGAGCCATCACAATGAACAACAGGAAGAAAA	<*97<<<<&9<<;<&<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:37:761:635	147	chr1	581	99	35M	=	418	-198	TGTGAGCCATCACAATGAACAACAGGAAGAAAAGG	+37:<088<+<<;<<;<<<<<;<<;<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:178:192:499	163	chr1	582	99	35M	=	768	221	GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT	<<<<<<<;<1<<<<<<;<<;6<<3666;;;;;/6/	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:93:945:176	99	chr1	582	99	35M	=	745	198	GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT	<<<<<<<<<<<<<<<<<<<<<;<<<<;;<;:7;<3	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:3:216:988:883	83	chr1	584	99	35M	=	392	-227	AAGCCAACACAATGAACAACAGGAAGAAAAGGTCT	(=/1+=&:=&======<==<===============	MF:i:18	Aq:i:68	NM:i:2	UQ:i:12	H0:i:1	H1:i:0
+EAS114_39:1:12:884:219	99	chr1	584	99	35M	=	756	207	GAGCCATCACAATGAACAACAGGAAGAAAAGGTCT	<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<5:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:61:628:681	163	chr1	586	99	36M	=	746	196	GCCATCACAATGAACAACAGGAAGAAAAGGTCTTTC	<<<<<<<<<<<<<<<<<<<;<<<<<<<:<<;;;;;;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:6:91:360:585	147	chr1	586	99	35M	=	430	-191	GACATCACAATGAACAACAGGAAGAAAAGGTCTTT	5&&<<3:;<<<<<<)<<3<<<<<<<;;<<<<;<<<	MF:i:18	Aq:i:67	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS139_11:6:89:1151:1878	99	chr1	587	99	35M	=	757	205	CCATCACAATGAACAACAGGAAGAAAAGGTCTTTC	<;;<<<<<;;;<<<<4;;::;<;8;;<;;8:<8<4	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:40:1596:1433	99	chr1	587	99	40M	=	756	209	CCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<1<<<<<::;::	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:4:1620:413	99	chr1	588	99	35M	=	768	215	CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA	<<<<<<<<<<6<<<6<<<;<6<9-1<;<&66<<<2	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:65:1928:1125	99	chr1	588	99	35M	=	784	231	CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA	<<;<<<7<<7<;<7<<<<<<<7<<<<;<.-;<+88	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:123:998:248	163	chr1	589	99	35M	=	776	222	ATCACAATGAACAACAGGAAGAAAAGGTCTTTCAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;9<<<68<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:240:603:890	163	chr1	590	99	36M	=	740	186	TCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA	<<<<<<<<<<<<<<<<<<;<:<<:<<;<<<<<8865	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:3:20:762:748	163	chr1	591	99	35M	=	777	221	CACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA	===================================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:246:313:499	99	chr1	592	99	35M	=	757	200	ACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG	<<<<<<<<<<<<<;<;<<<<<<<<;<<<<<;;<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:6:7:858:437	99	chr1	593	99	35M	=	773	215	CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG	<<<<<<<<<<<<<<<<<<<<<;<3<<<<<<<<<33	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:3:150:933:810	163	chr1	593	99	35M	=	755	197	CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG	===================================	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:2:204:264:413	147	chr1	593	96	35M	=	415	-213	CAATGAACAACAGAAAGAAAAGTTCTTTCAAAAGG	1==(4=::;/7::&===;====/=;===;;=====	MF:i:18	Aq:i:27	NM:i:2	UQ:i:19	H0:i:0	H1:i:0
+EAS139_11:3:65:556:1505	163	chr1	593	99	35M	=	790	232	CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG	<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:62:386:959	99	chr1	594	99	35M	=	752	193	AATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGT	<<8<<<<;<<<<-<<87;</<;<+<;5<+;;<3;+	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:134:868:252	147	chr1	595	99	36M	=	404	-227	ATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGA	<;<<<8<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:1:252:19:955	99	chr1	596	84	35M	=	771	210	TGAACAAAAGGAAGAAAAGGTCTTTCAAAAGGTGA	<<<<<<<<<<4<<<<9<<+9)9<<4:9+<<0<909	MF:i:18	Aq:i:41	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_67:4:145:607:216	83	chr1	596	99	35M	=	437	-194	TGAAAAACAGGAAGAAAAGGTCTTTCAAAAGGTGA	/;<<&<<8<<<<<<<<<<<<<;872<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS54_65:8:140:924:923	163	chr1	597	99	35M	=	767	205	GAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGAT	<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<5;<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:120:63:653	147	chr1	598	99	35M	=	420	-213	AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG	<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:204:779:181	163	chr1	598	99	35M	=	779	216	AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG	<<<<<<5<<:<<<<<8<<,<<<<<<<<<<91<91<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:325:150:465	147	chr1	598	99	35M	=	412	-221	AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG	<<:<<<<<<<<;<:<<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:57:722:347	83	chr1	599	99	35M	=	439	-195	ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:177:266:842	163	chr1	599	99	35M	=	784	220	ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT	=====)===========8=====7882855355'5	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:183:852:253	163	chr1	599	99	35M	=	773	209	ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<;;<8	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:30:887:404	163	chr1	600	99	35M	=	789	224	CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG	<<<<<<<<<<;<<<<<<<<<<<<<<<<:(<<<7;7	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:101:572:491	147	chr1	600	99	35M	=	425	-210	CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG	8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:2:73:730:487	99	chr1	604	99	35M	=	770	201	AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT	<<<<<<<<<<<<<<<<<<<9<<<<<<:<<<;<;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:172:896:83	99	chr1	604	99	34M	=	786	217	AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGT	<<<<<<<<<<<<<<<<<:;;+;<<<<<<<<9;;;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:154:762:630	163	chr1	604	99	35M	=	792	223	AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:99:756:130	163	chr1	606	99	35M	=	798	227	GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:11:360:1577	99	chr1	606	99	35M	=	781	210	GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT	<<<<<<<<<<<<<<<<<4<;;<<;;<;<<<8<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:27:1881:486	83	chr1	607	99	35M	=	427	-215	AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC	99797;;9:<:;;;<;;;;<<<;;;;<;<;;<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:5:497:687	99	chr1	607	99	35M	=	789	217	AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:142:63:937	163	chr1	609	99	36M	=	777	204	GAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC	<<<<<<<<<<<<<<<<<:<<<<<<<<<;<<:<<:<:	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:36:485:632	163	chr1	610	99	36M	=	784	210	AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<;<18;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:8:36:927:478	99	chr1	610	99	35M	=	798	223	AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC	<<<<<<<<<<<<<<<<;<<<<<:<:<<<<8<9;<8	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:169:862:829	163	chr1	611	99	35M	=	772	195	AAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA	<<<<<<<<<<<<<<<<<;<<<;<;<<<<:<;;<78	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:63:424:1643	163	chr1	614	99	35M	=	798	219	GGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACC	;;<<<<<<;<<<<<<<<<<5;9;<<<<<<<<<<;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:20:41:138	99	chr1	615	99	35M	=	774	194	GTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCT	<<<<<<<<<<<<<<<<<<<<<<<<7<;<<<<<(<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:49:163:904	83	chr1	616	99	35M	=	450	-201	TCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTC	79779<<<<<;;;;9;;<<7<;*9<<<7<<;<<;<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:135:543:760	99	chr1	619	99	35M	=	787	203	TTCAAAAGGTGATGTGTGTTCTCATCAACCTCATA	<<<<;;<;<<<<<<<9<<<<<<<<<<<;<<<<5<:	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:131:742:561	163	chr1	620	99	35M	=	790	205	TCAAAAGGTGATGTGTGTTCTCATCAACCTCATAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:6:120:14:944	83	chr1	621	99	35M	=	428	-228	CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA	:;<<;<;<;<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:82:566:1096	147	chr1	621	99	35M	=	446	-210	CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA	<<<<<<<<<<:<<<<<<<:<<<<<<:<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:8:14:601:624	83	chr1	622	99	35M	=	446	-211	AAAAGGTGATGTGTGTTCTCATCAACCTCATACAC	1;;;;==5===.(=9=5=========8====;===	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:5:538:401	99	chr1	624	99	40M	=	788	204	AAGGTGATGTGTGTTCTCATCAACCTCATACACACACATG	<<<<;<<<<<<<<<<<<<<<;<::7<<;<53:<98;;;;;	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:16:1081:1894	83	chr1	624	99	35M	=	431	-228	AAGGTGATGTGTGTTCTCATCAACCTCATACACAC	;5;;&<;<<<<<<<<;<;<<;<<<;<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:3:1377:1663	147	chr1	626	99	35M	=	446	-215	GGTGATGTGTGTTCTCATCAACCTCATACACACAC	6-88663;8;81;;66;8;;89939;;;67;2;;;	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:253:285:104	83	chr1	627	99	35M	=	451	-211	GTGATGTGTGTTCTCATCAACCTCATACACACACA	2<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:66:1282:1215	99	chr1	627	99	35M	=	794	202	GTGATGTGTGTTCTCATCAACCTCATACACACACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:2:1200:1076	163	chr1	629	99	35M	=	786	192	GATGTGTGTTCTCATCAACCTCATACACACACATG	;;;;;;;;;;/;;;;;;;;6;;9;489;;;88888	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:194:688:289	99	chr1	631	99	35M	=	795	199	TGTGTGTTCTCATCAACCTCATACACACACATGGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:8:19:855:491	99	chr1	631	99	35M	=	783	187	TGTGTGTTCTCATCAACCTCATACACACACATGGT	<<<<<<<<<<<;<<.:<<<<;;;<4<:<:<7<;;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:215:133:909	99	chr1	631	99	34M	=	789	193	TGTGTGTTCTCATCAACCTCATACACACACATGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<996(	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:35:378:681	99	chr1	632	99	35M	=	812	215	GTGTGTTCTCATCAACCTCATACACACACATGGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:40:758:116	163	chr1	632	99	40M	=	814	222	GTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:7262	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:2:831:692	147	chr1	634	99	35M	=	462	-207	GTGTTCTCATCAACCTCATACACACACATGGTTTA	2749'979<9<<<6;<<<0<;<<<<<3<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:162:594:858	99	chr1	634	99	35M	=	818	219	GTGTTCTCATCAACCTCATACACACACATGGTTTA	<<<<<<<<<<<<<<<<<9<;<<<<<<<<<<3<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:233:478:792	99	chr1	634	99	35M	=	791	192	GTGTTCTCATCAACCTCATACACACACATGGTTTA	<<<<<<<<<<<<<<<<<<<+<<<<<<<9<<<+;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:262:297:601	83	chr1	635	99	35M	=	482	-188	TGTTCTCATCAACCTCATACACACACATGGTTTAG	;;<26;;;<;<7;<<<<<99<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:45:1769:1130	83	chr1	635	99	35M	=	476	-194	TGTTCTCATCAACCTCATACACACACATGGTTTAG	88989;<;97;9<<;<;;;;9<98<<<<<<<;<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:153:977:200	83	chr1	640	99	35M	=	472	-203	TCATCAACCTCATACACACACATGGTTTAGGGGTA	1:<83<<9;;9<<9;;<<;<<;;;;<;;<<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:1:60:837:923	83	chr1	641	61	36M	=	457	-220	CATCAACCGCATACACTCACATGGTTTAGGGGTATA	0<4<<<02.<99+<+&!<<<<+<<<<<<<<<<<<3<	MF:i:18	Aq:i:24	NM:i:2	UQ:i:13	H0:i:0	H1:i:0
+EAS51_66:3:29:381:169	83	chr1	641	99	35M	=	494	-182	CATCAACCTCATACACACACATGGTTTAGGGGTAT	2<82<;66<:<;<:<;<;<8<<<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:96:836:737	99	chr1	642	99	35M	=	841	234	ATCAACCTCATACACACACATGGTTTAGGGGTATA	<<<<<<71<<<<<<<<<<899<:5<<<96858<<.	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:228:354:203	147	chr1	643	99	35M	=	480	-198	TCAACCTCATACACACACATGGTTTAGGGGTATAA	%1<851<5<<<982<<<<<<<<::<<<<7<<<<3<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:151:159:43	147	chr1	645	99	35M	=	452	-228	AACCTCATACACACACATGGTTTAGGGGTATAATA	;;4;6<<;<<<<7<77<6;<6<<<<<;;<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:182:404:693	163	chr1	646	99	35M	=	812	201	ACCTCATACACACACATGGTTTAGGGGTATAATAC	<<<<<<<<<<<<<<<<<<<<<<:::<6<;<94;77	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:4:841:339	163	chr1	646	99	35M	=	793	182	ACCTCATACACACACATGGTTTAGGGGTATAATAC	<<<<<<<<<<<<<<<<<;<7<<&;;<5<+<;7<<;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:4:156:857:494	163	chr1	648	99	35M	=	838	225	CTCATACACACACATGGTTTAGGGGTATAATACCT	<<<<<<<<<<<<<<<<<6<<<<<<<<<<<<<<:<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:165:464:123	99	chr1	650	99	35M	=	814	199	CATACACACACATGGTTTAGGGGTATAATACCTCT	===============7==============8====	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:1:115:868:887	83	chr1	650	99	35M	=	452	-233	CATACACACACATGGTTTAGGGGTATAATACCTCT	==;==8=;=;=========================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:134:751:831	147	chr1	651	99	36M	=	465	-222	ATACACACACATGGTTTAGGGGTATAATACCTCTAC	;:<4<8<<<;<;<<5<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:192:716:235	163	chr1	651	99	35M	=	798	182	ATACACACACATGGTTTAGGGGTATAATACCTCTA	======================9==:<==:;;69;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:3:40:594:752	99	chr1	651	99	35M	=	831	215	ATACACACACATGGTTTAGGGGTATAATACCTCTA	<<<<<<<<<<;<<<;<<<::;<:;<;:<;;;<;<:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:184:17:636	121	chr1	652	76	35M	=	652	0	TACACACACATGGTTTAGGGGTATAATACCTCTAC	8<89<<:<<<;;;<<<<<<<<<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:184:17:636	181	chr1	652	0	*	=	652	0	TTTTTTTTTTTTTTTTTTTTTTTTTTTTCACAGGT	!!!!!!!!!!!!!!!!!!!!!!!!!!!77777777	MF:i:192
+EAS1_108:8:129:477:427	147	chr1	652	99	35M	=	481	-206	TACACACACATGGTTTAGGGGTATAATACCTCTAC	<<<9;<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:130:912:658	163	chr1	652	99	35M	=	841	224	TACACACACATGGTTTAGGGGTATAATACCTCTAC	<<<<<;<<<<<<;<<<<<<<<<<<<<<<<<7<;;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:85:401:1190	83	chr1	652	99	35M	=	458	-229	TACACACACATGGTTTAGGGGTATAATACCTCTAC	64778:;69739:;+9::7;;;<;6<;7;;;;;7<	MF:i:18	Aq:i:55	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:4:1502:1911	163	chr1	652	99	40M	=	802	190	TACACACACATGGTTTAGGGGTATAATACCTCTACATGGC	<<<:4<<<<<<;<<<<;9;5<95<;<<;9+;1612:1:::	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:198:691:595	163	chr1	655	99	35M	=	847	227	ACACACATGGTTTAGGGGTATAATACCTCTACATG	==============&===============;7;=1	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:186:989:869	147	chr1	655	99	35M	=	505	-185	ACACACATGGTTTAGGGGTATAATACCTCTACATG	;<<;:<<<7:<<<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:38:856:336	147	chr1	656	99	35M	=	480	-211	CACACATGGTTTAGGGGTATAATACCTCTACATGG	2;4;4<:;6:5:<<;:;<<;<<;<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:49:271:588	163	chr1	658	99	35M	=	830	207	CACATGGTTTAGGGGTATAATACCTCTACATGGCT	<<<<<<<<<<<<<<5:<<<<<<:<<<<<<<:7%9<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:240:593:842	147	chr1	660	99	35M	=	494	-201	CATGGTTTAGGGGTATAATACCTCTACATGGCTGA	*<<<;<<6<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:175:705:982	147	chr1	660	89	36M	=	496	-200	CATGGTTTAGGGGTATAATACCTCTACATGGCTGAT	')'''''')'''''*')*)'*)')))+,'*)+'*,!	MF:i:18	Aq:i:19	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+EAS221_3:6:26:227:1053	147	chr1	663	99	35M	=	510	-188	GGTTTAGGGGTATAATACCTCTACATGGCTGATTA	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:316:961:576	147	chr1	666	65	35M	=	488	-213	TTACGGGTGTAATCTCTCTACATGGCTAATTATGA	(++%%+++),+,+*++,+,,-,**+,-&-,+-+--	MF:i:130	Aq:i:65	NM:i:5	UQ:i:36	H0:i:0	H1:i:0
+EAS56_63:5:96:788:614	163	chr1	667	99	35M	=	862	230	TAGGGGTATAATACCTCTACATGGCTGATTATGAA	<<<<<<<<<<<<<<<<<<<<<<;6;<<;;<;;7;9	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:13:1155:631	83	chr1	668	99	40M	=	524	-184	AGGGGTATAATACCTCTACATGGCTGATTATGAAAACAAT	;:398<<;<<<<<;<3<;;<<<<;;<<<<<<<<<<;<<;<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:199:511:426	83	chr1	669	99	35M	=	509	-195	GGGGTATAATACCTCTACATGGCTGATTATGAAAA	<:7:<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:124:241:608	99	chr1	670	99	35M	=	856	221	GGGTATAATACCTCTACATGGCTGATTATGAAAAC	<<<<<<<<<;<<<<<<<<<;;<<<;<<<<;;8;;:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:59:396:359	147	chr1	670	99	35M	=	474	-231	GGGTATAATACCTCTACATGGCTGATTATGAAAAC	28288;;;;;;;;;::;;;;:;;;;;;;;;;;;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:87:323:895	147	chr1	671	99	35M	=	494	-212	GGTATAATACCTCTACATGGCTGATTATGAAAACA	55777;;;939;9;;9;;;;9;;;;;;;;;;;;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:28:708:463	147	chr1	672	99	36M	=	477	-231	GTATAATACCTCTACATGGCTGATTATGAAAACAAT	;;<;<<====3=====5===================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:84:101:328	83	chr1	673	99	35M	=	480	-228	TATAATACCTCTACATGGCTGATTATGAAAACAAT	<<<<<<<<:<<<<<<<<<6<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:30:92:753	147	chr1	673	99	35M	=	497	-211	TATAATACCTCTACATGGCTGATTATGAAAACAAT	<<<<<<;<<<<<<:<<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:8:88:90:59	73	chr1	674	37	35M	=	674	0	ATAATACCTCTACATGTCTGATTATGAAAACAATG	<<<<<<<4;7;<<<;;47;&9..1;6&4<755;1;	MF:i:64	Aq:i:0	NM:i:1	UQ:i:19	H0:i:0	H1:i:1
+EAS112_32:8:88:90:59	133	chr1	674	0	*	=	674	0	TGCACCTCCCTGTTCACCTAGATGCTAGGAGGACA	=7595=92=72.=+5(:4=9092((.2&(&%07%.	MF:i:192
+B7_593:1:12:158:458	147	chr1	675	84	36M	=	503	-208	TAATAATGCTACATGGATGATTATGAAATCAATGTT	++++++$((+*+++++++++++++&+++++++++++	MF:i:18	Aq:i:15	NM:i:5	UQ:i:40	H0:i:0	H1:i:0
+B7_593:4:28:781:723	99	chr1	676	99	36M	=	855	215	AATACCTCTACATGGCTGATTATGAAAACAATGTTC	<<<<<<<<<7<<<;;<<;;<<;<5<4<7<;7<+:<9	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:27:856:401	163	chr1	679	99	35M	=	871	227	ACCTCTACATGGCTGATTATGAAAACAATGTTCCC	======6===;2==;===;=+=92=;5+=&556:6	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:245:323:744	83	chr1	679	99	35M	=	499	-215	ACCTCTACATGGCTGATTATGAAAACAATGTTCCC	/.848299;&;9;9;=2.=7========;;=====	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:31:948:254	99	chr1	680	99	35M	=	849	204	CCTCTACATGGCTGATTATGAAAACAATGTTCCCC	<<<<<<<<<<<<<<<<<<<;<<<<<:<<8<;;;;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:277:590:364	83	chr1	681	99	35M	=	503	-213	CTCTACATGGCTGATTATGAAAACAATGTTCCCCA	:::<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:201:959:19	147	chr1	681	99	35M	=	493	-223	CTCTACATGGCTGATTATTAAAACAATGTTCCCCA	;4;.9<:0&/<5<::<<9/.<<<<<<<<<<<<;<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+EAS56_61:8:7:171:402	147	chr1	682	99	35M	=	489	-228	TCTACATGGCTGATTATGAAAACAATGTTCCCCAG	:086::::847:<7<<7<<<<<<;7<<;<<<<7<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:67:317:249	99	chr1	683	26	35M	=	840	192	CTACATGGCTGATTATGAAATCTATGTTCCCCATA	<<<<<<;<<<<;:;<<7;<<.<&3<;;<<(;;6.<	MF:i:18	Aq:i:26	NM:i:3	UQ:i:31	H0:i:0	H1:i:0
+EAS51_64:4:189:467:475	147	chr1	683	99	35M	=	493	-225	CTACATGGCTGATTATGAAAACAATGTTCCCCAGA	*.;*;7<75<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:8:46:900:610	147	chr1	684	99	35M	=	491	-228	TACATGGCTGATTATGAAAACAATGTTCCCCAGAT	<;5<;<<<;<<<<<<;<<<<<<<<<<8<<<<<8<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:232:351:909	99	chr1	685	80	36M	=	843	194	ACATGGCTGATTATGAAATCAATGTTCCCCAGATGC	<<<<<99<<<<<<99<7<'<9<<<6<<+<;7;<<&;	MF:i:18	Aq:i:39	NM:i:2	UQ:i:11	H0:i:0	H1:i:1
+EAS139_11:6:11:285:1567	83	chr1	685	99	35M	=	525	-195	ACATGGCTGATTATGAAAACAATGTTCCCCAGATA	<8<4<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:172:622:707	147	chr1	685	99	35M	=	511	-209	ACATGGCTGATTATGAAAACAATGTTCCCCAGATA	92<3996;<<<<<<<<<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:6:882:784	83	chr1	686	99	35M	=	496	-225	CATGGCTGATTATGAAAACAATGTTCCCCAGATAC	4;7<;64<<:<<4<<<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:80:760:490	147	chr1	686	99	35M	=	520	-201	CATGGCTGATTATGAAAACAATGTTCCCCAGATAC	%::::+<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:68:1122:79	147	chr1	687	99	40M	=	528	-199	ATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCC	::77*:1<<<<<<<<<<<<<<<:;<<<;<<<<<<8<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:264:988:663	99	chr1	688	99	35M	=	875	222	TGGCTGATTATGAAAACAATGTTCCCCAGATACCA	<<<<<<<<<<<1<4<<<4<<0<;<-<74*(<&51-	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:3:233:911	163	chr1	688	99	35M	=	868	215	TGGCTGATTATGAAAACAATGTTCCCCAGATACCA	<<<<<<<<<<<<<<<<<;<<<<<<<<<<;<;<<;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:187:925:547	99	chr1	689	99	35M	=	857	203	GGCTGATTATGAAAACAATGTTCCCAAGATACCAT	43<<<:9<;;;:7<<<<6<:<8<-4-/,81<(48:	MF:i:18	Aq:i:37	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS56_65:5:75:637:650	163	chr1	691	99	35M	=	868	212	CTGATTATGAAAACAATGTTCCCCAGATACCATCC	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:27:973:518	147	chr1	691	99	35M	=	549	-177	CTGATTATGAAAACAATGTTCCCCAGATACCATCC	+<<<<<<9<<<<<<<<<<<;<;<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:6:20:492:850	147	chr1	694	10	35M	=	526	-203	AGTATGAAAACAATGTTCCCCAGATGCCGTCCCGG	:.5:+.;;&91:;79:766:1:9+6&:1&&:+:))	MF:i:18	Aq:i:10	NM:i:4	UQ:i:31	H0:i:0	H1:i:0
+EAS51_64:4:318:345:156	83	chr1	695	99	35M	=	522	-208	TTATGAAAACAATGTTCCCCAGATACCATCCCTGT	;8<8<<<<<;<<:<<;<;77<<<<<;<<;<<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:5:863:302	99	chr1	698	99	35M	=	866	203	TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:4:7:526:343	147	chr1	698	99	35M	=	515	-218	TGAAAACAGTGTTCCCCAGATACCATCCCTGTCTT	(7:;;;<<;;;<1<1<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:26	H0:i:0	H1:i:1
+EAS114_26:2:73:513:102	99	chr1	698	99	35M	=	868	205	TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT	===========================;=======	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:6:251:1557	83	chr1	700	99	35M	=	526	-209	AAAACAATGTTCCCCAGATACCATCCCTGTCTTAC	<<<<<<<<<<<<6:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:147:64:416	99	chr1	701	99	35M	=	870	204	AAACAATGTCCCCCAGATACCATCCCTGTCTTACT	<<<<<<<<<<<<<<<;<<<<<;<<<<;;:<;;;;;	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_595:3:297:637:86	163	chr1	704	99	35M	=	869	200	CAATGTTCCCCAGATACCATCCCTGTCTTACTTCC	<<<<<<<<<<<<;+<+;<;<:<<<<<9<<957<;(	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:160:272:398	163	chr1	705	99	35M	=	891	221	AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA	9<<<3<<<<<<<<<<<9<<;8<<<<;<+.;;89..	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:4:679:110	147	chr1	705	99	35M	=	549	-191	AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:163:312:891	147	chr1	709	99	35M	=	543	-201	TTCCCCAGATACCGTCCCTGTCTTACTTCCAGCTC	0.<;;8<<<0<<<<<<<<<<6<<<<<<8<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_28:3:78:773:660	83	chr1	711	99	36M	=	534	-213	CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC	7<;7<<<7;9<<8;<<<<<<;<<<<<<<<<<7<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:5:63:875:1339	163	chr1	711	99	35M	=	879	203	CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCC	<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:7:243:876:758	147	chr1	712	99	35M	=	541	-206	CCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC	0%3<1;.70;3363;31;<<<<<<6<<<;<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:104:153:698	163	chr1	713	99	36M	=	896	219	CCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAG	;<<<<<<;6<<<<<<<<<<;<<<<;<;;;<.<::50	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:86:498:373	163	chr1	716	99	35M	=	894	213	GATACCATCCCTGTCTTACTTCCAGCTCACCAGAG	<<<<<<<<<<<<<<<<<<<<<<<5:<<<:<;7+67	MF:i:18	Aq:i:69	NM:i:1	UQ:i:25	H0:i:1	H1:i:0
+EAS1_95:6:87:734:888	163	chr1	717	99	35M	=	900	218	ATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG	===========;8=========;;=;====;;3(;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:238:31:968	147	chr1	717	99	35M	=	534	-218	ACACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG	=(.7=5%===9:7==+==77===============	MF:i:18	Aq:i:69	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS54_65:3:290:558:349	99	chr1	719	99	35M	=	869	185	ACCATCCCTGTCTTACTTCCAGCTCCCCAGCGGGA	<<<;<<;<;<188<<<8::<686+4:<<6:&3)*&	MF:i:18	Aq:i:59	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS114_28:5:206:671:49	83	chr1	719	99	36M	=	557	-198	ACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA	;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:278:918:892	147	chr1	720	99	35M	=	541	-214	CCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA	=6=3=<===&=========================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:1:191:462:705	147	chr1	721	99	36M	=	545	-212	CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAG	<<'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:9:55:730	83	chr1	722	99	36M	=	540	-218	ATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGC	<:<;;<6<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:45:462:455	163	chr1	723	99	35M	=	874	186	TCCCTGTCTTACTTCCAGCTCCCCAGACGGAACGC	<<<<<<8<<<;<;<<<;<<<<<<<6;8&:80;733	MF:i:18	Aq:i:43	NM:i:2	UQ:i:27	H0:i:0	H1:i:1
+EAS114_28:2:149:650:44	163	chr1	726	99	36M	=	902	212	CTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC	<<<<<<<<<<<<<<<<<<<<<<<<<;6<<;<<7<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:297:283:948	83	chr1	727	99	35M	=	550	-212	TGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC	6;;3;6<<66<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:33:1168:1762	147	chr1	728	99	35M	=	552	-211	GTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCA	79<9;3<<<4<<<97<;;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:228:182:717	147	chr1	729	99	35M	=	563	-201	TCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAA	778;8;474<<<;2;;<2<<<<<<<<;<;;9<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:8:1351:1986	163	chr1	729	99	35M	=	911	217	TCTTACTTCCAGATCCCCAGAGGGAAAGCTTTCAA	<<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS51_64:4:163:31:455	163	chr1	730	99	35M	=	886	191	CTTACTTCCAGCTCCCCAGAGGGACAGCTNNCAAC	<+<<<<<<<;0+<<<<;06070-9(0(9<!!5)05	MF:i:18	Aq:i:31	NM:i:3	UQ:i:7	H0:i:0	H1:i:1
+EAS54_61:6:126:541:194	83	chr1	730	97	35M	=	540	-225	AGTACGACCAGCTCCCCAGAGGGAAAGCTTTCAAC	+%&:/+(46=47&71/2==;=;8====28212===	MF:i:18	Aq:i:43	NM:i:4	UQ:i:40	H0:i:1	H1:i:0
+EAS51_62:7:178:286:414	163	chr1	731	99	35M	=	907	211	TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG	<<<<<<<<<<<<<<<<8<<<<<<<<<1<<<1;998	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:35:361:546	163	chr1	731	99	35M	=	892	196	TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG	<<<<<<<<<<<<<<<<;<5<<<<<;<2<<<:<8<4	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:90:247:212	147	chr1	733	99	35M	=	567	-201	ACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCT	7655:;87;<;;;8<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:149:354:667	99	chr1	734	99	35M	=	888	189	CTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTT	<<<<<<<<<<<<<<<<<<<><<<<<<<<;<:<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:240:603:890	83	chr1	740	99	36M	=	590	-186	GCTCCCAAGAGGGAAAGCTTTCAACGCTTCTAGCCA	;+&+//&<<<<<<<<<<9<<<8<<<<9<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+B7_591:7:129:956:115	163	chr1	740	99	36M	=	927	223	GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;877-	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:168:528:288	83	chr1	740	99	35M	=	570	-205	GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCC	8<%<31;<<;<;<<<<<<<;<<<<<<<<<<;<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:275:851:240	147	chr1	743	99	35M	=	561	-217	CCCCAGAGGGAAAGCTTTCAACGTTTCTAGCCATT	66614/&3616630666&66666&66666868666	MF:i:18	Aq:i:31	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS188_7:6:205:873:464	147	chr1	743	99	35M	=	552	-226	CCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATT	<-((+:+;289<--;<;-;<:;;<<<;;<<<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:37:610:260	163	chr1	745	99	35M	=	913	203	CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC	<<<;<;<<7<<<<<<<<<<<<<<;6<963;;;3;1	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:93:945:176	147	chr1	745	99	35M	=	582	-198	CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC	6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:61:628:681	83	chr1	746	99	36M	=	586	-196	CAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTT	95<<<<<<<<;<<<<;<<<:<<;;<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:288:552:440	83	chr1	747	87	35M	=	560	-222	AGAGGGAACGCTTTCAACTCTTCTAGCCATTTCTT	9<<%'%<<.2<<<<<<<<5:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:26	NM:i:2	UQ:i:33	H0:i:0	H1:i:0
+EAS56_53:2:170:265:818	163	chr1	748	10	35M	=	920	207	GAGGGGAAGCTTTCAACGCTTCTAGCACTTTCTTT	<<<<<(5/959<8.<9<8<<<2<&59&&:22:8+(	MF:i:18	Aq:i:10	NM:i:3	UQ:i:17	H0:i:0	H1:i:0
+B7_595:2:251:121:479	83	chr1	750	99	35M	=	572	-213	GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG	<<<<<6'..663;&<<;<<9<<<9<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:67:1797:1931	147	chr1	750	99	35M	=	562	-223	GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:226:302:758	83	chr1	751	99	35M	=	556	-230	GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG	;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:33	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:163:618:570	83	chr1	751	99	35M	=	571	-215	GGAAAGCTGTCAACGCTTCTAGCCATTTCTTTTGG	<9774<88&:8<:8<8:8<8<<<<<;88<88<<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS1_97:3:73:292:429	99	chr1	752	99	35M	=	920	203	GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTTGC	<<<<<<<<<<7<<;<<<<<<<2<<<5<<<<<:%)<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_108:3:82:356:253	99	chr1	752	99	35M	=	927	210	GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC	===================<========;===39=	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:62:386:959	147	chr1	752	99	35M	=	594	-193	AAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC	%;71131((<<6<92(+<1<<;<-3<8<<;<;;<<	MF:i:18	Aq:i:57	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_62:3:263:74:407	83	chr1	754	99	35M	=	574	-215	AAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCAT	;;88<::+;<)<5<<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:67:620:344	99	chr1	755	99	35M	=	905	185	AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT	<<<<2<:2<<<<<<7<<<<:<<*<<<<<<***3<<	MF:i:18	Aq:i:33	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:148:776:486	83	chr1	755	99	35M	=	578	-212	AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT	;:<<<;<<;<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:3:150:933:810	83	chr1	755	99	35M	=	593	-197	AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT	:89===:=:=;;==;====================	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:102:467:897	99	chr1	756	97	35M	=	940	219	GCTTTCAACGCTTCTAGCCATTTCTTTTGTCTTTT	<<<<9<<<<9<2<<<&,/</<<<<7<<;&&<$;*<	MF:i:18	Aq:i:37	NM:i:2	UQ:i:8	H0:i:1	H1:i:0
+EAS114_39:1:12:884:219	147	chr1	756	99	35M	=	584	-207	GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTT	7;::<:<<<7<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:40:1596:1433	147	chr1	756	99	40M	=	587	-209	GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT	-:8:1841<4;<88<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:5:7:761:623	99	chr1	757	99	35M	=	938	216	CTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTG	<<<<<<<<<<<<<8<<<<;;<0<<<<<;;<;<;;&	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:246:313:499	147	chr1	757	99	35M	=	592	-200	CTTTAAACGCTTCTAGCCATTTCTTTTGGCATTTG	+;77%;;;&:;:7;<<<<<6<:<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS139_11:6:89:1151:1878	147	chr1	757	99	35M	=	587	-205	CTTTCAACGATTCTAGCCATTTCTTTTGGCATTTG	8<66,,<<<<<<:<<<<<9<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_71:4:165:397:25	83	chr1	759	99	34M	=	576	-217	TTCAACGCTTCTAGCCATTTCTTTTGGCATTTGC	&(33'60;-'+'<7;<<*3-<;;183<<<;<;<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:59:1576:946	147	chr1	761	99	35M	=	578	-218	CAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT	9<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:256:407:470	163	chr1	762	99	35M	=	939	212	AACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTC	<<<<<<<<;<;<<<<<<<<<;;<</<<;;83;7;9	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:148:437:481	163	chr1	764	99	36M	=	949	221	CGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGA	<<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<;0;8	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:140:924:923	83	chr1	767	99	35M	=	597	-205	TTTTAGCCATTTCTTTTGGCATTTGCCTTCAGACC	<<&<<;;<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_103:4:143:560:194	99	chr1	768	99	35M	=	946	213	TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC	<<<<;;<<<<<<<<<<<6<;<<<<;;<<;9<999<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:178:192:499	83	chr1	768	99	35M	=	582	-221	TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC	86<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:4:1620:413	147	chr1	768	99	35M	=	588	-215	TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC	-<<<7<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:2:73:730:487	147	chr1	770	99	35M	=	604	-201	TAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTA	<;;<<2;<;<<<;0<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:179:389:585	163	chr1	770	24	35M	=	953	218	TGGCCACTTTTTATCGCATTTCCCTTTAGAACCTA	<.4<9.4+.+'&-220<+<4<6<<20*6;<0(9<%	MF:i:130	Aq:i:24	NM:i:7	UQ:i:103	H0:i:0	H1:i:0
+B7_595:1:252:19:955	147	chr1	771	84	35M	=	596	-210	AGCCAGTTCTTTTGGCATTTGCCTTCAGACCCTCC	<8<884<<<<<<68<<<<<<<2<;<<;<+<<<;<<	MF:i:18	Aq:i:41	NM:i:2	UQ:i:46	H0:i:0	H1:i:1
+EAS54_71:4:169:862:829	83	chr1	772	99	34M	=	611	-195	GCCATTTCTTTTGGCATTTGCCTTCAGACCCTAC	,1<6<<<<<7<<<<<<<<<<<<<<<<<7<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:6:7:858:437	147	chr1	773	99	35M	=	593	-215	CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC	7;<4;;:;80<;<;<<<<<<:<<;<<<;;<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:183:852:253	83	chr1	773	99	35M	=	599	-209	CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC	;<9<;<<<<<<<<;<<<<<;<<<;<<<<;<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:20:41:138	147	chr1	774	99	35M	=	615	-194	CATTTCTTTTGGCATTTGCCTTCAGACCCTACACG	;;;<;<<<::<<<<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:123:998:248	83	chr1	776	99	35M	=	589	-222	TTTCTTTTGGCATTTGCCTTCAGACCCTACACGAA	;:;5;<;:<9<<<<<:<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:142:63:937	83	chr1	777	99	36M	=	609	-204	TTCTTTTGGCATTTGCCTTCAGACCCTACACGAATG	;;;<;<<<<;<<<<<;:<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:3:20:762:748	83	chr1	777	99	35M	=	591	-221	TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT	=:747;7=;;==7=;==7===7==7;=========	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:149:953:349	99	chr1	777	99	35M	=	915	173	TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT	<<<<<<<<;<<<<<<<<<<<;7:<:<<:<:;;::;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:46:981:766	163	chr1	778	99	35M	=	933	190	TCTTTTGGCATTTGCCTTCAGACCCTACACGAATG	<<<<<<<<<<<<<;<<<<<-<;<<<<-<-<;-:6;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:204:779:181	83	chr1	779	99	35M	=	598	-216	CTTTTGGCATTTGCCTTCAGACCCTACACGAATGC	;:;/*<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:11:360:1577	147	chr1	781	99	35M	=	606	-210	TTTGGCATTTGCCTTCAGACCCTACACGAATGCGT	1<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:5:491:391	99	chr1	782	99	35M	=	917	170	TTGGCATTTGCCTTCAGACCCTACACGAATGCGTC	=========;===;==:4=========;3;==7;=	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:186:199:927	99	chr1	783	99	35M	=	802	54	TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT	<77<<<<2<;<<<<<06<<<<<<<<60<<684/6&	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:8:19:855:491	147	chr1	783	99	35M	=	631	-187	TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT	8<<<<;:<<<<:<<<<<:<;;<<<<<<<;<<<;<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:36:485:632	83	chr1	784	99	36M	=	610	-210	GGCATTTGCCTTCAGACCCTACACGAATGCGTCTCT	0;;;<<;<<<;<<<<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:177:266:842	83	chr1	784	99	35M	=	599	-220	GGCATTTGCCTTCAGACCCTACACGAATGCGTCTC	<9<<6;9<;9;;<<<<;;;9<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:65:1928:1125	147	chr1	784	99	35M	=	588	-231	GGCATTTGCCTTCAGACCCTACACGAATACGTCTC	<+<<<2<4<<<0<<4<<<<<6<<<6<<<'<<<<0<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:6	H0:i:0	H1:i:1
+EAS221_3:4:66:584:407	163	chr1	785	99	35M	=	954	204	GCATTTGCCTTCAGACCCTACACGAATGCGTCTCT	<<<*9<9<<<1<<<<<<<<*<59<4<)<2<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:172:896:83	147	chr1	786	99	35M	=	604	-217	CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA	;<.5.;;<+;<<<<<<<4<<<<<<<;<<<<<;<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:2:1200:1076	83	chr1	786	99	35M	=	629	-192	CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA	7779779;9;:;;4;;9;;:7;<<<7;;;:<;<<;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:135:543:760	147	chr1	787	99	35M	=	619	-203	ATTTGCCTTCAGACCCTACACGAATGCGTCTCTAC	;;.;;8;<8;<<32;<<<<<7<<<<<9<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:5:538:401	147	chr1	788	99	40M	=	624	-204	TTTGCCTTCACACCCTACACGAATGCGTCTCTGCCACAGG	671&7::49:&0<<<(<::<&<<<:<<<<<<<&<<<<1<<	MF:i:18	Aq:i:39	NM:i:2	UQ:i:10	H0:i:0	H1:i:1
+EAS54_71:6:215:133:909	147	chr1	789	99	35M	=	631	-193	TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA	7758;<;<;8<<<<;<;<<<<<:;<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:30:887:404	83	chr1	789	99	35M	=	600	-224	TTGCCTTCAGACCCTGCACGAATGCGTCTCTACCA	<<<<5<;::<<<;<<.<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:13	H0:i:0	H1:i:1
+EAS219_1:1:5:497:687	147	chr1	789	99	35M	=	607	-217	TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA	<8<<8<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:131:742:561	83	chr1	790	99	35M	=	620	-205	TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC	<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:65:556:1505	83	chr1	790	99	35M	=	593	-232	TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC	<6<8<<4<8;;;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:233:478:792	147	chr1	791	99	35M	=	634	-192	GCCTTCAGACCCTACACGAATGCGTCTCTACCACA	6<;9:<<9-<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:66:257:524	99	chr1	791	99	35M	=	959	203	GCCTTCAGACCCTACACGAATGCGTCTCTACCACC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%	MF:i:18	Aq:i:73	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS56_53:4:154:762:630	83	chr1	792	99	35M	=	604	-223	CCTTCAGACCCTACACGAATGCGTCTCTACCACAG	<<-::<91<<<<;<;<<<<;<<<<<<<<;<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:4:841:339	83	chr1	793	99	35M	=	646	-182	CTTCAGACCCTACACGAATGCGTCTCTACCACAGG	77-):22<<<33;<5<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:66:1282:1215	147	chr1	794	99	35M	=	627	-202	TTCAGACCCTACACGAATGCGTCTCTACCACAGGG	::;<;<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:194:688:289	147	chr1	795	99	35M	=	631	-199	TCAGACCCTACACGAATGCGTCTCTACCACAGGGG	;8;%28<;<<<<<<<<;<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:8:36:927:478	147	chr1	798	99	35M	=	610	-223	GACCCTACACGAATGCGTCTCTACCACAGGGGGCT	,6;;;3;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:99:756:130	83	chr1	798	99	35M	=	606	-227	GACCCTACACGAATGCGTCTCTACCACAGGGGGCT	;;<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:192:716:235	83	chr1	798	99	35M	=	651	-182	GACCCTACACGAATGCGTCTCTACCACAGGGGGCT	<5<<<8<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:63:424:1643	83	chr1	798	99	35M	=	614	-219	GACCCTACACGAATGCGTCTCTACCACAGGGGGCT	9+<<<+7<<<<<<<<<<<<<<<<<8<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:14:360:580	99	chr1	799	99	35M	=	963	199	ACCCTACACGAATGCGTCTCTACCACAGGGGGCGG	===========3===;5<==8;====79==.=5'5	MF:i:18	Aq:i:68	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS51_78:7:186:199:927	147	chr1	802	99	35M	=	783	-54	CTACGCGAATGCGTCTCTACCACAGGGGGCTGCGC	-;++)6<*8+;&<&/<<<<7<<71<<<<<6<<<7<	MF:i:18	Aq:i:57	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS139_19:3:4:1502:1911	83	chr1	802	99	40M	=	652	-190	CTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTT	:+:::5/;99<;<&<*<-9<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:187:791:153	99	chr1	803	99	35M	=	958	190	TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG	<<<<<<<<<<<<<<<<<<<<<:+;;<;<88*6;68	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:63:527:1923	99	chr1	803	99	35M	=	981	213	TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG	<<<<<<<<<<<<<<<<<:<<<<3<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:31:98:804	99	chr1	805	99	35M	=	982	212	CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGC	=======9===;============5=;9=;=;==&	MF:i:18	Aq:i:74	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS218_4:7:89:1487:520	163	chr1	805	99	35M	=	997	227	CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGT	8<<<6/<<<<<<<<<:<<8<:<<3<<:668<86<3	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:69:88:1154	99	chr1	805	99	35M	=	992	222	CACGAATGCGTCTCTACCACAGGCGGCTGCGCGGT	<<<<<<<<<<<<<<<<<<<<<<<2<<<<:<<<<<7	MF:i:18	Aq:i:47	NM:i:1	UQ:i:17	H0:i:0	H1:i:1
+EAS114_26:1:99:212:522	163	chr1	806	99	35M	=	1002	231	ACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT	================8==;====;=;===1==:8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:35:378:681	147	chr1	812	99	35M	=	632	-215	GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT	:<5-<);;;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:182:404:693	83	chr1	812	99	35M	=	646	-201	GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT	<;7;;4<<<<<<<7<<7<<<<<<<<<8<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:119:761:239	99	chr1	813	99	35M	=	999	221	CGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATC	<<<<<<<<<<<<6<<<<<<;<2<<<<;<<<<<;;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:165:464:123	147	chr1	814	99	35M	=	650	-199	GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCA	9;<)<<%<<9<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:40:758:116	83	chr1	814	99	40M	=	632	-222	GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG	25/8/:<75:2<<<<<<7<<;<<<<<<<88;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:55:506:125	99	chr1	817	99	35M	=	982	200	TCTACCACAGGGGGCTGCGCGGTTTCCCATCATGA	<<<<<<<<<;<9<;<<;558<<<<5(5*<<<<<51	MF:i:18	Aq:i:35	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:162:594:858	147	chr1	818	99	35M	=	634	-219	CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA	90;<99;==99==;4=:========;=====;===	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:55:74:1040	99	chr1	818	99	35M	=	975	192	CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:100:708:1984	99	chr1	819	99	35M	=	1015	231	TACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<7%:	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:92:367:1495	163	chr1	820	99	35M	=	987	202	ACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<6<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:49:905:27	163	chr1	821	68	35M	=	1000	214	CCACAGGGGGCTGCGCGGTTTCCCATCCTGAAGCA	<<;<.89<9.<2<9<:91+447.9,04&000(,+(	MF:i:18	Aq:i:31	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS218_4:7:87:964:826	163	chr1	822	99	35M	=	999	212	CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC	<<<<<<<<<<<<<<<<<<<<<<<<<<1<<8;4;;<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:38:1576:1923	163	chr1	822	99	35M	=	987	200	CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;<<;<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:122:337:968	99	chr1	823	85	35M	=	981	193	ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT	<<<<<;<<<<<<<<<<<<<<<<<<<;<<;;<;;;;	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:187:294:947	99	chr1	823	99	35M	=	1002	214	ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT	<<<<<<<<<<<<<<<<:<<<<<&<<%:<)7;7::4	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:49:271:588	83	chr1	830	99	35M	=	658	-207	GCTGCGCGGTTTCCCATCATGAAGCACTGAACTTC	:0=:===:<===;;===;=================	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:3:40:594:752	147	chr1	831	99	35M	=	651	-215	CTGCGCGGTTTCCCATCATGAAGCACTGAACTTCC	;7;9<;;;<;<;:<<;;<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:8:163:757:432	99	chr1	837	99	35M	=	1013	211	GGTTTCCCATCATGAAGCACTGAACTTCCACGTCT	<<<<<<<;<<<<<<<<;<;<<<<<<<<<<<<83:<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:4:156:857:494	83	chr1	838	99	35M	=	648	-225	GTTTCCCATCATGAAGCACTGAACTTCCACGTCTC	<<<8<:5<<;<<8<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:84:91:614	163	chr1	839	99	35M	=	1019	215	TTTCCCATCATGAAGCACTGATCTTCCACGTCTCA	;4<<<<<-84<<<;<<<<8<7.<4<<;77&:%<::	MF:i:18	Aq:i:39	NM:i:1	UQ:i:13	H0:i:0	H1:i:1
+EAS51_64:7:152:918:824	163	chr1	839	99	35M	=	1033	229	TTTCCCATCATGAAGCACTGAACTTCCACGTCTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:67:317:249	147	chr1	840	26	35M	=	683	-192	TTCCCATCATGACGCACCGAACTTCCACGTCTCAT	.5;7;++;<8.;&:7<<.5<<<<7<<7<<<<<<;7	MF:i:130	Aq:i:26	NM:i:2	UQ:i:18	H0:i:0	H1:i:0
+EAS51_62:7:96:836:737	147	chr1	841	99	35M	=	642	-234	TCCCATCATGAAGCACTGAACTTCCACGTCTCATC	1<;<7;;1;8;;8:<<1<;<<;<<<<<<<<<<;<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:130:912:658	83	chr1	841	99	35M	=	652	-224	TCCCATCATGAAGCACTGAACTTCCACGTCTCATC	;=;;;<<<<<=55=;==<=======<=========	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:3:75:934:439	163	chr1	842	99	35M	=	1001	194	CCCATCATGAAGCACTGAACTTCCACGTCTCATCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:212:329:348	163	chr1	842	99	35M	=	1020	212	CCCATCATGAAGCACTGAACTTCCACGTCTCATCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:49:183:435	163	chr1	843	99	35M	=	1005	197	CCATCATGAAGCACTGAACTTCCACGTCTCATCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;:;8;:	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:7:280:133:495	99	chr1	843	99	35M	=	1015	207	CCATCATGAAGCACTGAACTTCCACGTCTCATCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:232:351:909	147	chr1	843	80	36M	=	685	-194	CCATCATGAAGCGCTGAACTTCCACGTCTCATCTAG	:8%3<8====130=8==+===;=3=8===48==;3*	MF:i:18	Aq:i:39	NM:i:1	UQ:i:15	H0:i:0	H1:i:1
+EAS221_1:8:77:781:676	163	chr1	846	99	35M	=	1010	199	TCATGAAGCACTGAACTTCCACGTATCATCTAGGG	<<<<<<<5<<5<<<<<<<<<<<<13<<2<<<<<,<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:18	H0:i:0	H1:i:1
+EAS1_95:2:198:691:595	83	chr1	847	99	35M	=	655	-227	CATGAAGCACTGAACTTCCACGTCTCATCTAGGGG	:=:;=;===========;=================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:31:948:254	147	chr1	849	99	35M	=	680	-204	TGAAGCACTGAACTTCCACGTCTCATCTAGGGGAA	7;;;98<<7<<<<<<<<<<<<<<<<<<8<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:278:440:902	99	chr1	851	99	35M	=	1032	216	AAGCACTGAACTTCCACGTCTCATCTAGGGGAACA	=========<==<==============:;;=;=;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:74:674:124	163	chr1	854	99	35M	=	1041	222	CACTGAACTTCCACGTCTCATCTAGGGGAACAGGG	<<<<<<<<<<<<:<;<<<<;<<<<;9;<<;;.;;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:28:781:723	147	chr1	855	99	36M	=	676	-215	ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG	8488<::;4;;<:;;;::<;7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:28:474:566	163	chr1	855	99	36M	=	1018	199	ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG	<<<<<<<<<<<<<<<<<<<<<<<:<;<;;<<7;8;<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:124:241:608	147	chr1	856	99	35M	=	670	-221	CTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG	9;;<<;<<<;<<<;<:<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:187:925:547	147	chr1	857	99	35M	=	689	-203	TGAACTTCCACGTCTCATCTAGGGGAACAGGGAGG	((988+&8<<;<09<;<<9<<4<<-<99<<;<9<;	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:9:512:826	99	chr1	859	99	35M	=	1021	197	AACTTCCACGTCTCATCTAGGGGAACAGGGAGGTG	67<<<;;;<;;<<;;<;<:;9;;;9;;;;<59777	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:194:696:490	99	chr1	862	99	35M	=	1026	199	TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC	<<<<<<<<<<<<<<<<<<<;5<<<<<:<1<8<<<8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:96:788:614	83	chr1	862	99	35M	=	667	-230	TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC	;9;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:81:786:340	163	chr1	863	99	35M	=	1033	205	TCCACGTCTCATCTAGGGGAACAGAGAGGTGCACT	<<<<7<<<<<<<<<<<<<<7<<;<&<<;;7<7;;;	MF:i:18	Aq:i:45	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS192_3:7:298:644:697	163	chr1	863	99	35M	=	1035	207	TCCACGTCTCATCTAGGGGAACAGGGAGGTGCACT	<<<<<<<<<<<<<<<::;;;6<8:;;9;98;668;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:1:178:305:843	163	chr1	864	99	35M	=	1037	208	CCACGTCTCATCTAGGGGAACAGGGAGGTGCACTA	<<<<<<<<<<<<<<<<<<<:<<<<<;<<:<<:<;:	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:5:863:302	147	chr1	866	99	35M	=	698	-203	ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT	:4:29:<<<9;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:30:788:376	99	chr1	866	99	35M	=	1038	207	ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT	<<<<<<<<<<<<:<<<<<<<<:<;<<(<7;7;:(;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:143:310:958	163	chr1	868	99	35M	=	1048	215	GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC	<<<<<<<<<<<8<8<<<<<;;7<<<;6;<<+4;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:3:233:911	83	chr1	868	99	35M	=	688	-215	GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:75:637:650	83	chr1	868	99	35M	=	691	-212	GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC	<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:73:513:102	147	chr1	868	99	35M	=	698	-205	GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC	==::===8=>=====>=>=>>>=>>==>=>>>>>>	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:3:297:637:86	83	chr1	869	99	35M	=	704	-200	TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG	<:75<;<;;<<<<<<;;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS54_65:3:290:558:349	147	chr1	869	99	35M	=	719	-185	TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG	2;2;;'5&;<<5<<;5/<<<<<7<<;+;<<+1<8<	MF:i:18	Aq:i:59	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS1_95:3:308:956:873	99	chr1	870	99	35M	=	1068	233	CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC	<<<<<<<<<<<<<;<;<;1<<<<<.<9<;<<<<+;	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:147:64:416	147	chr1	870	99	35M	=	701	-204	CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC	/;49;:6<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:30:812:345	163	chr1	871	99	36M	=	1036	201	TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTC	<<<<<<<7<;<<7<;77;3<&0-;<5<;6<1'13<:	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:134:243:630	163	chr1	871	99	35M	=	1052	216	TCATCTAGGGGAACAGGGAGGCGCACTAATGAGCT	<<<:<<<<</<<<-<<<<6/<-<:<5+<::-2</2	MF:i:18	Aq:i:39	NM:i:2	UQ:i:29	H0:i:0	H1:i:1
+EAS54_81:2:27:856:401	83	chr1	871	99	35M	=	679	-227	TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCT	.'=.93======;;====;======;===;=;===	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:45:462:455	83	chr1	874	99	35M	=	723	-186	TCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCA	62*<;;;;<<;<<9;;<<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:264:988:663	147	chr1	875	99	35M	=	688	-222	CGAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC	(%<:4<4<<7<<1-:<1766<66<<<<+<:<;8;<	MF:i:18	Aq:i:60	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS56_63:1:145:71:26	163	chr1	875	99	35M	=	1040	200	CTAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC	<<<<<<<<<<<<<<<<<;<;;<<;<;<9<9;;99;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:101:825:28	163	chr1	879	99	35M	=	1079	235	GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC	<<86<<;<78<<<)<;4<67<;<;<74-7;,;8,;	MF:i:18	Aq:i:39	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS218_4:5:63:875:1339	83	chr1	879	99	35M	=	711	-203	GGGAACAGGGAGGTGCACTAATGCGCTCCACGCCC	;;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:290:270:557	99	chr1	880	99	35M	=	1052	207	GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA	<<<<<<<<<<<<<;<<<<9<:;<<<<<<5<0<<;+	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:134:853:558	163	chr1	880	99	35M	=	1071	226	GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA	==========================9=9=;<;<5	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:282:567:481	99	chr1	880	88	35M	=	1064	219	GGAACAGGGAGGCGCACTAATGCGCTCCACGCCCA	<<<<<<<<<<<<3<7<7<<<<;<<0)<<<<<<<<3	MF:i:18	Aq:i:43	NM:i:1	UQ:i:18	H0:i:0	H1:i:1
+EAS114_30:1:154:818:165	163	chr1	881	99	35M	=	1041	195	GAACAGGGAGGTGCACTAATGCGCTCCACGCCCAA	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<:7;:;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:301:54:240	163	chr1	882	99	35M	=	1061	214	AACAGGGAGGTGCACTAATGCGCTCCACGCCCAAG	<<<<:<9<<<<:<<<<9<<<<<<690<<6</<(83	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:4:12:402:843	163	chr1	885	99	35M	=	1072	222	AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:262:965:756	99	chr1	885	99	35M	=	1069	219	AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<9;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:30:816:90	163	chr1	885	99	35M	=	1057	207	AGGGAGGTGCACTAATGCGCTCCACGCCCCAGCCC	<<<<<<<<<<<<<<<<<<<:<<<<<<::1&(1::7	MF:i:18	Aq:i:69	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS188_7:4:171:104:398	163	chr1	885	99	35M	=	1066	216	AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC	=========)===97===3===4===4==,)=/)=	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:163:31:455	83	chr1	886	99	35M	=	730	-191	GGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCT	8;<<;<<<78+<=</<<=;23<=<<<<<<<<<<<<	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:149:354:667	147	chr1	888	99	35M	=	734	-189	GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC	;<;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:18:571:1110	99	chr1	888	99	35M	=	1070	217	GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC	7<<<<<<<<<<<<;<<<<<<<<<<<<788<<<;6<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:312:837:406	163	chr1	889	99	35M	=	1048	194	AGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:160:272:398	83	chr1	891	99	35M	=	705	-221	GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA	3:,<,;;<<;<<1<<<<<<<;<;<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:228:587:504	99	chr1	891	65	35M	=	1050	194	GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA	<<<<7<<7;7<<3<<<<7<<<<<*3<<<<74<:<*	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:35:361:546	83	chr1	892	99	35M	=	731	-196	TGCACTAATGCGCTCCACGCCCAAGCCCTTCTCAC	:4;4;;<<;4<8<;;<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:84:438:1505	99	chr1	893	99	40M	=	1068	215	GCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTC	35<<:;9<;<;5<<<:<3<<7:<9/<)<<:::9<&5;;+1	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:277:482:316	163	chr1	894	99	35M	=	1098	239	CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG	<<<<<<<<<<<<<<;<;<<<:<;<<<<;<<<1<1;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:86:498:373	83	chr1	894	99	35M	=	716	-213	CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG	):)4:<5<<<<;89<<<969<<<:<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:236:498:526	163	chr1	895	99	35M	=	1048	188	ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT	===================================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:43:1120:878	99	chr1	895	99	35M	=	1075	215	ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT	<<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<=7;7	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:104:153:698	83	chr1	896	99	36M	=	713	-219	CTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTT	69<<)9<<:5:6<<<16:<6/<6<1<<<<<:<:<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:166:42:147	99	chr1	898	99	35M	=	1048	185	AATGCGCTCCACGCCCAAGCCCTTCTAACAGTTTC	<<;<<<<<<<<<<<<<<<<;6<<64;)<<7;7;;;	MF:i:18	Aq:i:43	NM:i:1	UQ:i:8	H0:i:0	H1:i:1
+B7_595:2:178:77:424	99	chr1	900	99	35M	=	1058	193	TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG	<<<<<<<<<<<<<<<6<<;<<<<<<<<6<;<<<<6	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:87:734:888	83	chr1	900	99	35M	=	717	-218	TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG	56<<86;:<<<4;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:149:650:44	83	chr1	902	99	36M	=	726	-212	CGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC	;8<<</<<:<<595<<9<<<<<<<<<<<<<<3<9<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:177:552:234	99	chr1	903	99	35M	=	1094	226	GCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC	<<<<<<<<<<<<<;<<<<<<<<9<969<<<<3<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:4:58:703:72	163	chr1	905	99	35M	=	1088	218	TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC	2<7<<<<<<<<<<<8:<<<<8<(<8<:::8.::<3	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:242:4:593	99	chr1	905	99	35M	=	1086	216	TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC	<<<<<<<<<<<8<<<<-<<<<<88;<;<<8<;88<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:67:620:344	147	chr1	905	99	35M	=	755	-185	CCCCCGCCCAAGCCCTTCTCACAGTTTCTGCCCCC	+++*+++#++++++,++++++++,,+,&+,,,,+,	MF:i:18	Aq:i:33	NM:i:2	UQ:i:19	H0:i:1	H1:i:0
+EAS51_62:7:178:286:414	83	chr1	907	99	35M	=	731	-211	CACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAG	68;38::<<;<<8;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:7:174:987:334	163	chr1	908	99	35M	=	1082	209	ACACCCAAGCCCTTCTCACAGTTTCTGCCCCCAGC	<<;4<<<<;;</4<4<+<<<<<;<<<<<</<93+2	MF:i:18	Aq:i:41	NM:i:1	UQ:i:26	H0:i:0	H1:i:1
+EAS219_FC30151:1:55:8:1412	163	chr1	910	99	35M	=	1072	197	GCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:8:1351:1986	83	chr1	911	99	35M	=	729	-217	CCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATG	<8;<<<<<<<<<<<;<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:37:610:260	83	chr1	913	99	35M	=	745	-203	CAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGT	/74<.<4.&<<<:<<<<::<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:228:189:826	99	chr1	914	99	35M	=	1112	233	AAGCCCTTCTCACAGTTTCTGCCCCCCGCATGGTT	;9=========;=1======9=====1;=<3=:6;	MF:i:18	Aq:i:45	NM:i:1	UQ:i:16	H0:i:0	H1:i:1
+EAS56_59:3:149:953:349	147	chr1	915	99	35M	=	777	-173	AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG	2;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:24:1374:211	99	chr1	915	99	35M	=	1064	184	AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG	;;:<<;<;:;;;;;;;;;;<::;;;6;;2+74917	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:5:491:391	147	chr1	917	99	35M	=	782	-170	CCCTGCTCACAGTTTCTGCCCCCAGCATGGTTGTA	-/+5-.&&:5+:92=6===========9=======	MF:i:18	Aq:i:62	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS114_32:2:306:119:56	99	chr1	919	99	35M	=	1083	199	CTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:216:381:608	163	chr1	920	99	35M	=	1075	190	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	<<<<<<<<<<<<<<<<<<<<<<<<;;+<6:<;26;	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:3:73:292:429	147	chr1	920	99	35M	=	752	-203	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	;6;6;<<<<<;<<<<;<<<<<<<<7<<<<<<5<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:2:170:265:818	83	chr1	920	73	35M	=	748	-207	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	3+;%;.;;<<9+;3;;;<<<;57<1<;<<<<<<<;	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:278:906:933	99	chr1	920	99	35M	=	1071	186	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<.	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:190:95:706	99	chr1	920	99	35M	=	1078	193	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	<<<<<<<<<<<<<<9<<<<<;;<;<;;<<;<;;<,	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:278:848:765	99	chr1	920	99	35M	=	1088	203	TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:29:249:878	163	chr1	921	99	35M	=	1077	191	TCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGG	<<<<<<<<<<<<<<<<<<<<<<:<:<<=<<:<<6&	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:259:467:737	163	chr1	923	99	36M	=	1102	215	TCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCA	<<<<<<<<<<<<7<<<<<<<'<<.<<<<<<;;;<67	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:24:195:604	163	chr1	923	99	35M	=	1098	210	TCACAGTTTCTGCCCCCAGCATGGTTGTACTGTGC	<;<<<<<<<<<89<<<<<868<8;6<8;3(38&<8	MF:i:18	Aq:i:65	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS114_32:4:42:923:169	163	chr1	925	99	35M	=	1099	209	ACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAA	9<<<;9<<<<<;<;<<.<<;<;6<<<<1;8<<-0;	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:29:529:379	163	chr1	926	99	35M	=	1117	226	CAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT	<<<<<<<<8<<<<<<<<<<<<<<<<<;<672;<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:26:785:882	163	chr1	926	99	35M	=	1107	216	CAGTTTCTGCCCCAAGCATGGTTGTACTGGGCAAT	<<<0<<<<<<<<<6,<<)<<<<<<<&<<0<<,<'<	MF:i:18	Aq:i:39	NM:i:1	UQ:i:21	H0:i:0	H1:i:1
+B7_591:7:129:956:115	83	chr1	927	99	36M	=	740	-223	AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC	<<:<9<4<<<<7<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:3:82:356:253	147	chr1	927	99	35M	=	752	-210	AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA	97;7<<;;<<<<<7;<<:<<<9<<;<<<9<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:134:379:893	99	chr1	927	99	35M	=	1095	203	AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA	<<<<<<<<<<<<<5<<<<;<<<<<;<:5;<<4+<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:256:404:584	99	chr1	928	99	35M	=	1096	203	GTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC	<<<<<<<<<<<<<<<<<<<<<7<3;<:;;3:3:</	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:76:333:905	163	chr1	929	99	35M	=	1076	182	TTTCTGCCCCCAGCATGGTTGTACTGGGCAATACA	<<<<<7;<;<<6<<6<<7<<7<)&<4+6)0+<;(0	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:11:646:628	99	chr1	930	99	36M	=	1106	212	TTCTGCCCCCAGCATGGTTGTACTGGGCAATACATG	<<<<<<<<<<6<<<<<<<<<<<<</<;<<<<<<6<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:136:389:320	99	chr1	930	99	35M	=	1100	205	TTCTGCCCCCAGCATGGTTGTACTGGGCAATACAT	7<<<<<;<<7<6<<;;<;<;;677<6;(27;<(97	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:6:93:334:858	99	chr1	932	99	35M	=	1106	209	CTGCCCCCAGCATGGTTGTACTTGGCAATACATGA	<<<<<<<<;<<<<;;<<9<<<<&;&<<9<9;/;&;	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_597:3:46:981:766	83	chr1	933	99	35M	=	778	-190	TGCCCCCAGCATGGTTGTACTGGGCAATACATGAG	/<<<;/;<<316<<<3<<<<7<<<7<<<;<<<<<7	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:209:159:130	99	chr1	934	99	34M	=	1109	210	GCCCCCAGCATGGTTGTACTGGGCAATACATGAG	<<<<<<8<<<<<<&<<+7<<4<<<22<;<<<<3<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:111:796:737	99	chr1	936	99	35M	=	1112	211	CCCCAGCATGGTTGTACTGGGCAATACATGTGATT	<<<<<<<<<<<<<<<:<<;7;<<<<993<4%:%<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS218_1:4:15:856:340	99	chr1	936	99	35M	=	1093	192	CCCCAGCATGGTTGCACTGGGCAATACATGAGATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<77<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_610:5:7:761:623	147	chr1	938	99	35M	=	757	-216	CCGGCATGGTTGTACTGGGCAATACATGAGATTAT	::';-8);<<<<;<1<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS1_97:5:84:927:843	99	chr1	938	99	35M	=	1138	235	CCAGCATGGTTGTACTGGGCAATACATGAGATTAT	<<<<<<<<<<<<<;9;;4;<<0<<7<<9<;<:<5<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:273:901:459	99	chr1	938	99	35M	=	1098	195	CCAGCATGGTTGTACTGGGCAATACATGAGATTAT	<<8<<<;<;8<;<;<;7+8<788<;;22<27;77;	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:256:407:470	83	chr1	939	99	35M	=	762	-212	CAGCATGGTTGTACTGGGCAATACATGAGATTATT	7.47;0;;5<4033*<<<<<9,<<<<<;<<<<<3<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:77:251:446	163	chr1	939	99	35M	=	1110	206	CAGCATGGTTGTACTGGGCAATACATGAGATTATT	<<9<<<<<<<<<<<<<97<<<<<<<<<96<<<+<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:102:467:897	147	chr1	940	97	35M	=	756	-219	AGCATGGTTGTACAGGGCAATACATGAGATTATTA	83333<+02<:<.&<+<.<::7<<::<<<<:<<<<	MF:i:18	Aq:i:37	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS221_1:6:92:1807:1185	99	chr1	940	99	35M	=	1119	214	AGCATGGTTGTACTGGGCAATACATGAGATTATTA	<<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<;<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:142:858:903	99	chr1	943	99	35M	=	1121	213	ATGGTTGTACTGGGCAATACATGAGATTATTAGGA	======;====5=======9======;===3=5=;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:143:560:194	147	chr1	946	99	35M	=	768	-213	GTTGTACTGGGCAATACATGAGATTATTAGGAAAT	9:<;7<:::<:<;<<<<<<<<<<:<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:148:437:481	83	chr1	949	99	36M	=	764	-221	GTACTGGGCAATACATGAGATTATTAGGAAATGCTT	<<<;<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:75:917:886	163	chr1	951	99	35M	=	1110	194	ACTGGGCAATACATGAGATTATTAGGAAATGCTTT	<<<<<<<<<<<<<<:<<<<<<<<<71<<<:6<:8<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:118:851:285	163	chr1	953	99	35M	=	1133	215	TGGGCAATACATGAGATTATTAGGAAATGCTTTAC	<<<<<<<<<<<<<<<<<<<<<<<;;<;<:<<<<;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:179:389:585	83	chr1	953	24	35M	=	770	-218	TGTGAAATGAATGAGATTATTAGGAAATGCTTTAC	;<)<;*;9*+<;<<,,<,<4<4<<<<<;<4<9494	MF:i:18	Aq:i:24	NM:i:4	UQ:i:53	H0:i:0	H1:i:0
+EAS114_30:7:269:944:220	163	chr1	953	99	35M	=	1147	229	TGGGCAATACATGAGATTATTAGGAAATGCTTTAC	<<<<<<<8<<<<<<<<<<<<<<<;<<<<<;<<;81	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:3:93:1002:845	163	chr1	954	99	35M	=	1129	210	GGGCAATACATGAGATTATTAGGAAATGCTTTACT	<<<<<<<<<<<<<<<<<<<<<:<<;<<<;<<<</<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:66:584:407	83	chr1	954	99	35M	=	785	-204	GGGCAATACATGAGATTATTAGGAAATGCTTTACT	<<84<<<766<<<.6<<<<<<4<<7<<<<<<<7<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:63:48:631	163	chr1	957	99	35M	=	1143	221	CAATACATGAGATTATTAGGAAATGCTTTACTGTC	<<<<<<;<<7</<<<<<<;;;<<<;<;<<7;;);<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:187:791:153	147	chr1	958	99	35M	=	803	-190	AATACATGAGATTATTAGGAAATGCTTTACTGTCA	:;55&<99<<1<;<<8<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:72:1809:1398	99	chr1	958	99	35M	=	1145	222	AATACATGAGATTATTAGGAAATGCTTTACTGTCA	<<<<<<<<<<<<<<<<<<::<9<<<<<<<<<6<<:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:66:257:524	147	chr1	959	99	35M	=	791	-203	ATACATGAGATTATTAGGAAATGCTTTACTGTCAT	<;<<<<<<<<3<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:247:522:670	163	chr1	960	99	35M	=	1121	196	TACATGAGATTATTAGGAAATGCTTTACTGTCATA	<<<<<<<<<<<<<<<;<<<<<<<<<<<<<5;<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:37:400:627	163	chr1	961	99	35M	=	1154	228	ACATGAGATTATTAGGAAATGCTTTACTGTCATAA	<<<<<<7+<<<<<<2615<<6<<<<5<<1<<;:74	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:329:177:267	163	chr1	962	99	35M	=	1139	212	CATGAGATTATTAGGAAATGCTTTACTGTCATAAC	<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<9;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:166:203:416	163	chr1	963	99	35M	=	1136	208	ATGAGATTATTAGGAAATGCTTTACTGTCATAACT	<<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<<97<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:14:360:580	147	chr1	963	99	35M	=	799	-199	ATGAGATTATTAGGAAATGCTTTACTGTCATAACT	<,1<;<;;<<<<<1<<<;<7<<6<:;;<<<<<<;;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:193:38:987	163	chr1	964	99	35M	=	1158	229	TGAGATTATTAGGAAATGCTTTACTGTCATAACTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;:;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:39:59:738	163	chr1	965	99	35M	=	1142	212	GAGATTATTAGGAAATGCTTTACTGTCATAATTAT	3<8.<<<<<<<-<<<<3<388;;880<0<0)-722	MF:i:18	Aq:i:43	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS51_66:4:209:92:210	163	chr1	965	99	35M	=	1156	226	GAGATTATTAGGAAATGCTTTACTGTCATAACTAT	<<<<<<<<<<<<<<<<;<<<<<<<5<7<<;;;<;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:86:308:648	99	chr1	970	99	35M	=	1161	226	TATTAGGAAATGCTTTACTGTCATAACTATGAAGA	=8=====;=8======;=======35==;=;.;25	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:206:563:262	163	chr1	971	99	35M	=	1137	201	ATTAGGAAATGCTTTACTGTCATAACTATGAAGAG	<<<<<<<<<;<<<<<<<<<<<<;<<<<<<<-;<4;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:82:822:767	99	chr1	972	99	35M	=	1165	228	TTAGGAAATGCTTTACTGTCATAACTATGAAGAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<.<,<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:207:926:427	163	chr1	973	99	35M	=	1159	221	TAGGAAATGCTTTACTGTCATAACTATGAAGAGAC	<<<<<<7<<<<<;<<<<<6:<;<6<&<58<<6:::	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:144:28:475	99	chr1	974	99	35M	=	1167	228	AGGAAATGCTTTACTGTCATAACTATGAAGAGACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<::8<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:55:74:1040	147	chr1	975	99	35M	=	818	-192	GGAAATGCTTTACTGTCATAACTATGAAGAGACTA	;;;;;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:274:176:479	99	chr1	976	99	35M	=	1144	203	GAAATGCTTTACTGTCATAACTATGAAGAGACTAT	<<<<<<<<<<<<<;<<<<<<<<<<;<<9<59<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:122:337:968	147	chr1	981	10	35M	=	823	-193	GCTTTACTGTCTAAACTATGAAGAGACTATTGCCA	%454<75!7<+!990<9<6<<<<6<</<<<<<<<<	MF:i:18	Aq:i:10	NM:i:3	UQ:i:24	H0:i:0	H1:i:0
+EAS114_28:7:157:786:424	99	chr1	981	99	36M	=	1171	226	GCTTTACTGTCATAACTATGAAGAGACTATTGCCAG	<<<<<<<<<<<<<;<<<<<<;<<;<<;<<<<+4:70	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:63:527:1923	147	chr1	981	99	35M	=	803	-213	GCTTTACTGTCATAACCATGAAGAGACTATTGCCA	9<<<8<-8;;8<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_95:7:55:506:125	147	chr1	982	99	35M	=	817	-200	CTTTACTGTCATAACTATGAAGAGACTACTGCCAG	118%67;1;8,4:187<4>::1:818;;&::<>.;	MF:i:18	Aq:i:35	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS54_81:2:31:98:804	147	chr1	982	99	35M	=	805	-212	CTTTACTGTCATAACTATGAAGAGACTATTGCCAG	====;========7=====================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:235:805:373	163	chr1	983	99	35M	=	1146	198	TTTACTGTCATAACTATGAAGAGACTATTTCCAGA	<<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99;	MF:i:18	Aq:i:74	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS114_28:5:11:868:62	99	chr1	983	99	36M	=	1154	207	TTTACTGTCATAACTATGAAGAGACTATTGCCAGAT	<<<<<<<<<<<<<<<<<<<<:<<<;<<<<(7:7039	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:280:512:316	163	chr1	984	99	35M	=	1159	210	TTACTGTCATAACTATGAAGAGACTATTGCCAGCT	==<========6==4==6;;==:===;=2/:+8%6	MF:i:18	Aq:i:68	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_93:5:292:122:666	99	chr1	985	99	35M	=	1159	209	TACTGTCATAACTATGAAGAGACTATTGTCAGATG	<<<<<<6<<<<<<<<8;<<<<<<<<<<3&9+;;(;	MF:i:18	Aq:i:68	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS56_53:1:23:403:981	99	chr1	985	99	35M	=	1151	201	TACTGTCATAACTATGAAGAGACTATTGCCAGATG	<8<<<;<<<<<<;<<<<<<8;<<<9<9,3;,6(91	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:33:1566:588	99	chr1	985	76	35M	=	1166	216	TACTGTCATAACTATGAAGAGCCTATTGCCAGATG	<;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797	MF:i:18	Aq:i:37	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS139_11:7:92:367:1495	83	chr1	987	99	35M	=	820	-202	CTGTCATAACTATGAAGAGACTATTGCCAGATGAA	<8<88<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:38:1576:1923	83	chr1	987	99	35M	=	822	-200	CTGTCATAACTATGAAGAGACTATTGCCAGATGAA	8;<98<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:190:481:295	163	chr1	990	99	35M	=	1161	206	TCATAACTATGAAGAGACTATTGCCAGATGAACCA	<<<<<<<<<<<<<<<<<<<<<<9<<<<<9<7<2::	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:168:117:441	99	chr1	990	99	35M	=	1151	196	TCATAACTATGAAGAGACTATTGCCAGATGAACCA	<<3<<<<<<<<<<<<<<<<<<<+<<17;<;:<995	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:239:796:221	163	chr1	992	99	35M	=	1160	203	ATAACTATGAAGAGACTATTGCCAGCTGACCCCCC	<<<7<<7<<7<<7<;<<<<<,;;,+'<+/+99%:'	MF:i:18	Aq:i:37	NM:i:4	UQ:i:26	H0:i:0	H1:i:1
+EAS220_1:4:69:88:1154	147	chr1	992	99	35M	=	805	-222	ATAACTATGAAGAGACTATTGCCAGATGAACCACA	<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:34:956:1309	99	chr1	994	99	35M	=	1168	209	AACTATGAAGAGACTATTGCCAGATGAACCACACA	<<<<<<7<<<<<<<<<<<6<<<<<<<<<<<:<8<8	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:229:717:121	99	chr1	995	99	35M	=	1150	190	ACTATGAAGAGACTATTGCCAGATGAACCACACAC	=================<)=<4<0=.<<<71;41&	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS219_1:1:67:191:668	99	chr1	995	99	35M	=	1134	174	ACTATGAAGAGACTATTGCCAGATGAACCACACCT	<<<<<<<<<<<<<<<<<6<<;<;<;<<<<<<6;%2	MF:i:18	Aq:i:74	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_64:3:309:303:278	163	chr1	996	99	35M	=	1178	217	CTATGAAGAGACTATTGCCAGATGAACCACACATT	<<<<<<<<<<<<<<<<+<<+<<7<<<<<5<<<;;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:60:1020:1259	99	chr1	996	99	35M	=	1157	196	CTATGAAGAGACTATTGCCAGATGAACCACACATT	<;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:89:1487:520	83	chr1	997	99	35M	=	805	-227	TATGAAGAGACTATTGCCAGATGAACCACACATTA	4;;/<<<<<:<;<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:15:805:420	163	chr1	998	35	35M	=	1164	201	ATGAAGAGACTATTCACATGTGAACCACACATTTA	;73;;;;67.;1<<+*.;*&<4947<&474&*9*(	MF:i:130	Aq:i:35	NM:i:4	UQ:i:33	H0:i:0	H1:i:0
+EAS56_57:3:119:761:239	147	chr1	999	99	35M	=	813	-221	TGAAGAGACTATTGCCAGATGAACCACACATTAAT	;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:142:457:584	99	chr1	999	99	35M	=	1160	196	TGAAGAGACTATTTCCAGATGAACCACACATTAAT	<<<<<<<<<<<<</<<,6<66<<<;<;;<*4744.	MF:i:18	Aq:i:41	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+EAS218_4:7:87:964:826	83	chr1	999	99	35M	=	822	-212	TGAAGAGACTATTGCCAGATGAACCACACATTAAT	)6<<<<<<:;<6<<::<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:49:905:27	83	chr1	1000	68	35M	=	821	-214	GAAGAGACTATTGCCAGTTGAACCACACATTAATA	99515<<&<<6595-56%;86&<;<<<6<<<<6;<	MF:i:18	Aq:i:31	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS1_108:3:75:934:439	83	chr1	1001	99	35M	=	842	-194	AAGAGACTATTGCCAGATGAACCACACATTAATAC	==7=:=========================<====	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:99:212:522	83	chr1	1002	99	35M	=	806	-231	AGAGACTATTGCCAGATGAACCACACATTAATACT	<1<16<7<3<<;;<8<<<<<<<<<<<<;<<<<9<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:187:294:947	147	chr1	1002	99	35M	=	823	-214	AGAGACTATTGCCAGATGAACCACACATTAATACT	<<:<<8181;<8<<<<<<<<8<<<<<<<<<<<<<:	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:2:152:860:286	163	chr1	1004	99	35M	=	1171	202	AGACTATTGCCAGATGAACCACACATTAATACTAT	<;<<<;<<0:<3<:<<2<<<<<7+<7+47<9(999	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:49:183:435	83	chr1	1005	99	35M	=	843	-197	GACTATTGCCAGATGAACCACACATTAATACTATG	1<7<<<<;:<<<<<;<<<;<<<;<;<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:63:854:610	163	chr1	1005	99	35M	=	1180	210	GACTATTGCCAGATGAACCACACATTAATACTATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:12:276:1797	99	chr1	1006	99	35M	=	1190	219	ACTATTGCCAGATGAACCACACATTAATACTATGT	<<<<<<<<<<<<:</<<9<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:190:42:671	163	chr1	1008	99	36M	=	1192	220	TATTGCCAGATGAACCACACATTAATACTATGTTTC	<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:67:692:110	99	chr1	1009	99	35M	=	1175	201	ATTGCCAGATGAACCACACATTAATACTATGTTTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:61:183:767	99	chr1	1010	99	35M	=	1195	220	TTGCCAGATGAACCACACCTTAATACTATGTTTCT	<<<<<<<<<<;<<<9<9<+<<<8<<<<<<;8<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS221_1:8:77:781:676	83	chr1	1010	99	35M	=	846	-199	TTGCCAGATGAACCACACATTAATACTATGTTTCT	:<;<2<<<<<<26<<<<6<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:21:132:1423	99	chr1	1012	99	35M	=	1178	201	GCCAGATGAACCACACATTAATACTATGTTTCTTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:8:163:757:432	147	chr1	1013	99	35M	=	837	-211	CCAGATGAACCACACATTAATACTATGTTTCTCAT	1+<8<<<<<<;<5<;<<<<<;5<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_30:3:302:288:657	99	chr1	1013	99	35M	=	1173	195	CCAGATGAACCACACATTAATACTATGTTTCTTAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:97:1584:777	99	chr1	1013	99	35M	=	1200	222	CCAGATGAACCACACATTAATACTATGTTTCTTAT	<<;<;;;;<;<;<<;;;;;;;;;;;;;;:;79979	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:7:280:133:495	147	chr1	1015	99	35M	=	843	-207	AGATGAACCACACATTAATACTATGTTTCTTATCT	<:<9:<<7:<6<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:100:708:1984	147	chr1	1015	99	35M	=	819	-231	AGATGAACCACACATTAATACTATGTTTCTTATCT	:8<(8<)9<;<<<<+<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:5:182:313:319	99	chr1	1016	99	35M	=	1180	199	GATGAACCACACATTAATACTATGTTTCTTATCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<;<;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:41:474:283	99	chr1	1018	99	35M	=	1182	199	TGAACCACACATTAATACTATGTTTCTTATCTGCA	<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<+<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:28:474:566	83	chr1	1018	99	36M	=	855	-199	TGAACCACACATTAATACTATGTTTCTTATCTGCAC	;<<<+<<<<5<<<<<<;;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:84:91:614	83	chr1	1019	99	35M	=	839	-215	GAACCACACATTAATACTATGTTTCTTATCTGCAC	<<;;<<<7<<<<<<<;<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:159:222:274	99	chr1	1019	99	35M	=	1189	205	GAACCACACATTAATACTATGTTTCTTATCTGCAC	=;9====;=9==59=+==9========9===5;7=	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:62:603:1552	163	chr1	1019	99	35M	=	1180	196	GAACCACACATTAATACTATGTTTCTTATCTGCAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:212:329:348	83	chr1	1020	99	34M	=	842	-212	AACCACACATTAATACTATGTTTCTTATCTGCAC	8<6:<:<<<;<<<;<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:233:97:262	99	chr1	1021	99	34M	=	1175	189	ACCACACATTAATACTATGTTTCTTATCTGCCCA	<<<<<<<<<<<;<;<<:<<<<<<<<<<<<.<&77	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS114_45:7:9:512:826	147	chr1	1021	99	35M	=	859	-197	ACCACACATTAATACTATGTTTCTTATCTGCACAT	76777:;;;;;;;;;;;;;;;;;;;;;;;;;:;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:29:794:282	163	chr1	1025	99	36M	=	1196	207	CACATTAATACTATGTTTCTTATCTGCACATTACTA	<<<<<<<<<<<<<<<<<<<<<;<<<&<<;:<<8<<8	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:278:524:521	163	chr1	1025	99	35M	=	1224	234	CACATTAATACTATGTTTCTTATCTGCACATTACT	<<<;<<;<<<<<<<;<<<<<<<<<<7;5;<<<;;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:39:966:551	99	chr1	1026	99	35M	=	1205	214	ACATTAATACTATGTTTCTTATCTGCACATTACTA	<<<<<<<<<<<<<<<<<<<<<<<<:<;<&<<&<<;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:194:696:490	147	chr1	1026	99	35M	=	862	-199	ACATTAATACTATGTTTCTTATCTGCACATTACTA	========;======;==========8==:=====	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:305:565:952	99	chr1	1030	99	36M	=	1213	219	TAATACTATGTTTCTTATCTGCACATTACTACCCTG	7<<<<<<<<<7<<<<<<<<<7<<<;;<;<;<<<<<+	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:287:258:321	99	chr1	1030	99	35M	=	1194	199	TAATACTATGTTTCTTATCTGCACATTACTACCCT	<<<<<<<<<<<;<<<<<<<<42:<+<<<;<<;;;;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:278:440:902	147	chr1	1032	99	35M	=	851	-216	ATACTATGTTTCTTATCTGCACATTACTACCCTGC	<;7;4<;<;;;<<;<;;;<<<<<9<<<;<<<<;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:180:905:36	99	chr1	1033	99	35M	=	1212	214	TACTATGTTTCTTATCTGCACATTACTACCCTGCA	==========8===;;=========;==77%41=;	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:7:152:918:824	83	chr1	1033	99	35M	=	839	-229	TACTATGTTTCTTATCTGCACATTACTACCCTGCA	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:81:786:340	83	chr1	1033	99	35M	=	863	-205	TACTATGTTTCTTATCTGCACATTACTACCCTGCA	;<;<<<;<<;<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:196:11:27	163	chr1	1035	65	36M	=	1198	199	CTATGTTTCTTATCTGCNCATTACTACCCTGCAATT	<<<<<<<<;<<<<<<<8!4<<<;+<88;8<+2,8<;	MF:i:18	Aq:i:24	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+EAS192_3:7:298:644:697	83	chr1	1035	99	35M	=	863	-207	CTATGTTTCTTATCTGCACATTACTACCCTGCAAT	8:<8;<;:7;<<;4;:+<7<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:30:812:345	83	chr1	1036	99	36M	=	871	-201	TATGTTTCTTATCTGCACATTACTACCCTGCAATTA	;<;<<<<5<<<:<;<:<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:1:178:305:843	83	chr1	1037	99	35M	=	864	-208	ATGTTTCTTATCTGCACATTACTACCCTGCAATTA	<<<<<<<4<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:30:788:376	147	chr1	1038	99	35M	=	866	-207	TGTTTCTTATCTGCACATTACTACCCTGCAATTAA	:5<<4:88;9<<<<<;<<<<;<8<;<<<<1<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:1:145:71:26	83	chr1	1040	99	35M	=	875	-200	TTTCTTATCTGCACATTACTACCCTGCAATTAATA	882;8;<;;887<<<;;<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:157:42:763	163	chr1	1040	99	35M	=	1203	198	TTTCTTATCTGCACATTACTACCCTGCAATTATTA	<<;<;<<<<<;<:4<<<<<<<<<;;4<<<:;;+;+	MF:i:18	Aq:i:61	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+B7_589:8:74:674:124	83	chr1	1041	99	35M	=	854	-222	TTCTTATCTGCACATTACTACCCTGCAATTAATAT	;;;;;<<:<<:<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:154:818:165	83	chr1	1041	99	35M	=	881	-195	TTCTTATCTGCACATTACTACCCTGCAATTAATAT	;;;;<<<;<;;<;<<<<;<<;;;<<;<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:319:174:811	99	chr1	1044	99	35M	=	1242	233	TTATCTGCACATTTCTACCCTGCAATTAATATAAT	<<<<<<<<<;<<<<<<<<<;;<<<<<<<8<<;9<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_19:3:87:133:930	163	chr1	1044	99	40M	=	1198	194	TTATCTGCACATTACTACCCTGCAATTAATATAATTGTGT	<<<7<<<<;<<;7<<7<<;;<<<;<5;<;;;5;;<:/48:	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:44:1466:425	163	chr1	1044	99	35M	=	1213	204	TTATCTGCACATTACTACCCTGCAATTAATATAAT	<<<<<<<<<<<<<<<<<<<<<;<<<<<<;<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:236:498:526	83	chr1	1048	99	35M	=	895	-188	CAGCACATTACTACCCTGCAATTAATATAATTGTG	<%88<;<:8<<<<:<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_64:3:143:310:958	83	chr1	1048	99	35M	=	868	-215	CTGCACATTACTACCCTGCAATTAATATAATTGTG	84<;<6<<<<;<<<;;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:312:837:406	83	chr1	1048	99	35M	=	889	-194	CTGCACATTACTACCCTGCAATTAATATAATTGTG	;<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:166:42:147	147	chr1	1048	99	35M	=	898	-185	CTGCACATTACTACCCTGCAATTAATATAATTGTG	3.7;;;;:<<<77<<3<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:279:763:945	99	chr1	1048	99	36M	=	1210	198	CTGCACATTACTACCCTGCAATTAATATAATTGTGT	<<<<<<<<<<<<<<<<<<<4:<<47<:<;<<</<9<	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:82:998:566	163	chr1	1050	99	35M	=	1227	212	GCACATTACTACCCTGCAATTAATATAATTGTGTC	<<<<<<<:<<0<<<<:<82<<::<4<<;<<4<4<;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:228:587:504	147	chr1	1050	65	35M	=	891	-194	GCACATTACGACCCGGCAAGGTGTATAATTGTGTC	;4;4;&&82&04+&&48;3&3&*<7<47<<;-<-8	MF:i:130	Aq:i:65	NM:i:6	UQ:i:47	H0:i:0	H1:i:0
+B7_595:6:290:270:557	147	chr1	1052	99	35M	=	880	-207	ACATTACTACCCTGCAATTAATATAATTGTGTCCA	87:9;;;<851+:5.<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:134:243:630	83	chr1	1052	99	35M	=	871	-216	ACATTACTACCCTGCAATTAATATAATTGTGTCCA	63<;37:<*&:<<<,,*<<:7<<7<<<<<<<::<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:47:303:887	163	chr1	1052	96	35M	=	1240	223	ACATTACTACCCTGCCATTAATATACTTGTGTCCA	<<;;<+<9<<<<<9<(6<;//</<8(<<89;6084	MF:i:18	Aq:i:25	NM:i:2	UQ:i:14	H0:i:0	H1:i:0
+EAS221_3:8:74:770:1712	163	chr1	1052	99	35M	=	1208	191	ACATTACTACCCTGCAATTAATATAATTGTGTCCA	<<<<<<<<<<<<<<<<<<<5<<<<<<<<<<<<7<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:29:575:453	163	chr1	1056	99	36M	=	1228	208	TACTACCCTGCAATTAATATAATTGTGTCCATTTAC	<<<<<<<<<<<<<<<<<<<<<<<<7<1<:<9<&<98	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_97:5:318:177:383	163	chr1	1056	99	35M	=	1251	230	TACTACCCTGCAATTAATATAATTGTGTCCATGTA	;<<<<<<<<;<<<<<<<<<<<<<<<<<<7<;1'<;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:8:179:549:753	99	chr1	1056	99	35M	=	1218	197	TACTACCCTGCAATTAATATAATTGTGTCCATGTA	<<<<<<<<<<<<<<<<<<<<<<<<8<7<<<:<9<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:30:816:90	83	chr1	1057	99	35M	=	885	-207	ACTACCCTGCAATTAATATAATTGTGTCCATGTAC	:<3:%9299<<<<<<<<<5<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:2:178:77:424	147	chr1	1058	99	35M	=	900	-193	CTACCCTGCAATTAATATAATTGTGTCCATGTACA	:5:8<;<;:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:301:54:240	83	chr1	1061	99	35M	=	882	-214	CCCTGCAATTAATATAATTGTGTCCATGTACACAC	&..*3===1=========5.5==5===4====:5=	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:91:521:517	99	chr1	1061	99	35M	=	1239	213	CCCTGCAATTAATATAATTGTGTCCATGTACACAC	<<<<<<<<<<<<<<<<9<<<<<<<<<<8<<;;;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:24:1374:211	147	chr1	1064	99	35M	=	915	-184	TGCAATTAATATAATTGTGTCCATGTACACACGCT	77661;;;5;;:;;:;:;;;;;;8:;;;:;;;;;:	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:282:567:481	147	chr1	1064	88	35M	=	880	-219	TGCAATTAATATAATTGTGTCCACGTACACACGCT	<9<6<;<9<<<;<<<;<5<7<5</7<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+EAS188_7:4:171:104:398	83	chr1	1066	99	35M	=	885	-216	CAATTAATATAATTGTGTCCATGTACACACGCTGT	79<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:8:9:80:353	163	chr1	1067	99	35M	=	1233	201	AATTAATATAATTGTGTCCATGTACACACGCTGTC	<<<<<<<<<<<<<<<<<<<<<6<<<;;<<5<<2;2	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:6:42:920:522	163	chr1	1067	99	35M	=	1244	212	AATTAATATAATTGTGTCCATGTACACACGCTGTT	<<<<<<<<<<<<<:<<<<<<<:<<<<<<<:;;::&	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_95:3:308:956:873	147	chr1	1068	99	35M	=	870	-233	ATAAAAATAAGTGTGTCCATGTACACACGCTGTCC	91.97&9499&-1*98*19999839999.9&9799	MF:i:18	Aq:i:31	NM:i:3	UQ:i:23	H0:i:0	H1:i:1
+EAS139_19:6:84:438:1505	147	chr1	1068	99	40M	=	893	-215	ATTAATATAATTGTGTCCATGTACACACTCTGTCCTATGT	:0::413::;:::0:179::3<;<:<9<&6<<<;<019<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS51_62:3:55:340:837	163	chr1	1069	99	35M	=	1238	204	TTAATATAATTGTGTCCATGTACACACGCTGTCCT	<<;<<;<<<<<8<;<<<;<7<<<;<<<<<93+79(	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:262:965:756	147	chr1	1069	99	35M	=	885	-219	TTAATATAATTGTGTCCATGTACACACGCTGTCCT	<<:<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:18:571:1110	147	chr1	1070	99	35M	=	888	-217	TAATATAATTGTGTCCATGTACACACGCTGTCCTA	9<<;<;==;;=;=<;<===================	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:40:918:950	163	chr1	1071	99	35M	=	1247	211	AATATAATTGTGTCCATGTACACACGCTTTCCTTT	=========,=9=====2=7===7=0==&=+3=-=	MF:i:18	Aq:i:65	NM:i:2	UQ:i:17	H0:i:1	H1:i:0
+EAS1_97:2:59:882:980	163	chr1	1071	99	35M	=	1263	227	AATATAATTGTGTCCATGTACACACGCTGTCCTAT	<<<<<<<<<8<<<<<9<+<<<9<<<1<<77889+6	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:134:853:558	83	chr1	1071	99	35M	=	880	-226	AATATAATTGTGTCCATGTACACACGCTGTCCTAT	<<<<8<<<7<<<<;;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:278:906:933	147	chr1	1071	99	35M	=	920	-186	AATATAATTGTGTCCATGTACACACGCTGTCCTAT	<88::<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:4:12:402:843	83	chr1	1072	99	35M	=	885	-222	ATATAATTGTGTCCATGTACACACGCTGTCCTATG	<7<+<<11<9<<<<<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:160:434:853	163	chr1	1072	99	35M	=	1259	222	ATATAATTGTGTCCATGTACACACGCTGTCCTATG	<<<<<<<<<<<<<<<<<<<<<<,<<<<:<<<<,<:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:55:8:1412	83	chr1	1072	99	35M	=	910	-197	ATATAATTGTGTCCATGTACACACGCTGTCCTATG	<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:219:294:861	163	chr1	1073	99	35M	=	1244	206	TATAATTGTGTCCATGTACACACGCTGTCCTCTGT	<<<<<<<<<<<<<9<<<5<9<<<9<<544<<'<+:	MF:i:18	Aq:i:69	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS220_1:4:14:1665:1772	163	chr1	1073	84	35M	=	1263	225	TATAATGGTGTCCATGTACACACGCTGTCCTATGT	<<<<<7*<<<<<<<<<78<5<<7<<5<556<(73(	MF:i:18	Aq:i:39	NM:i:1	UQ:i:9	H0:i:0	H1:i:1
+B7_591:3:45:294:380	163	chr1	1074	80	36M	=	1233	195	ATAATTGTGTCCATGTACACACGATGTCATATGTAC	<<<<<<<<9<<<<<<<<<70<<7<6272&:3<+</%	MF:i:18	Aq:i:39	NM:i:2	UQ:i:32	H0:i:0	H1:i:1
+EAS1_108:7:222:538:267	99	chr1	1074	99	35M	=	1228	189	ATAATTGTGTCCATGTACACACGCTGTCCTATTTA	<<<<<<<<<<<<<<<<<<<<<;<<<<74;;39%6+	MF:i:18	Aq:i:67	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_93:1:216:381:608	83	chr1	1075	99	35M	=	920	-190	TAATTGTGTCCATGTACACTCGCTGTCCTATGTAC	55<99<<<99;<;<<(<39&7<<<<<<<<<<<<<9	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS54_67:1:138:186:274	99	chr1	1075	99	35M	=	1231	191	TAATTGTGTCCATGTACACACGCTGTCCTATGTAC	=39====9===;=;=;=9=;=====;===-=+=-7	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:43:1120:878	147	chr1	1075	99	35M	=	895	-215	TAATTGTGTCCATGTACACACGCTGTCCTATGTAC	<<<;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:166:776:590	163	chr1	1075	99	35M	=	1252	212	TAATTGTGTCCATGTACACACGCTGTCCTATGTAC	<<<<<</<<<<<<<<<<<<<'<=<:26.</79<::	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:76:333:905	83	chr1	1076	99	35M	=	929	-182	AATTGTGTCCATGTACACACGCTGTCCTATGTACT	<<;<<<<;7<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:29:249:878	83	chr1	1077	99	35M	=	921	-191	ATTGTGTCCATGTACACACGCTGTCCTATGTACTT	<,;<9<;<:<<<<<<<<<<<<<<<<<<<<<<><<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:190:95:706	147	chr1	1078	99	35M	=	920	-193	TTGTGTCCATGTACACACGCTGTCCTATGTACTTA	9;97437;<;;<<;<;<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:101:825:28	83	chr1	1079	99	35M	=	879	-235	TGTGTCCATGTACACACGCTGTCCTATGTACTTAT	0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:188:460:1000	99	chr1	1080	99	35M	=	1251	206	GTGTCCATGTACACACGCTGTCCTATGTACTTATC	<<<<<<<<<<<<<<<<7<<;:4;44<;;:8;;9;;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:3:268:523:511	99	chr1	1081	99	35M	=	1241	195	TGTCCATGTACACACGCTGTCCTATGTACTTATCA	<<<<<<<<<<<<<<<<<<<<;<<<<6<:9<<3<44	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:54:263:585	99	chr1	1081	99	36M	=	1254	209	TGTCCATGTACACACGCTGTCCTATGTACTTATCAT	<<<<<<<<<<<<<<<<<<<:;<<;<:;::<<;;:;4	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:7:174:987:334	83	chr1	1082	99	35M	=	908	-209	GTCCATGTACACACGCTGTCCTATGTACTTATCAT	,;<;;<<<&<<<1<<<<<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:224:932:942	99	chr1	1082	99	34M	=	1250	203	GTCCATGTACACACGCTGTCCTATGTACTTATCA	<<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3,	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:12:1296:358	99	chr1	1082	96	35M	=	1252	205	GTCCATGTACACACGCTGTCCTATGTACTTATCAT	;;;6;7;7;;;;;7;9;;-*1;9;699/99/7477	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:306:119:56	147	chr1	1083	99	35M	=	919	-199	TCCATGTACACACGCTGTCCTATGTACTTATCATG	;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:66:179:118	163	chr1	1084	99	35M	=	1262	213	CCATGTACACACGCTGTCCTATGTACTTATCATGA	<<<<<<<<<<<<<<<<<<<<<<<<<<:<<;<<6<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:110:584:649	99	chr1	1084	99	35M	=	1266	217	CCATGTACACACGCTGTCCTATGTACTTATCATGA	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<::<38	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:28:315:310	163	chr1	1085	99	35M	=	1242	192	CATGTACACACGCTGTCCTATGTACTTATCATGAC	<<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:242:4:593	147	chr1	1086	99	35M	=	905	-216	ATATACACACGCTGTCCTATGTACTTATCATGACT	1.%55877+8+88808887+7;7;18:8;;;.&;8	MF:i:18	Aq:i:53	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_93:1:131:946:353	163	chr1	1087	99	35M	=	1249	197	TGTACACACGCTGTCCTATGTACTTATCATGACTC	<<<<<<<<<<<<<;<<<<;;<<<<<<<;<:52;<2	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:4:1732:88	99	chr1	1087	99	35M	=	1265	213	TGTACACACGCTGTCCTATGTACTTATCATGACTC	<<<<<<<<<<<<<<<<<2<8;8<;<8;<2;2:<:<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:4:58:703:72	83	chr1	1088	99	35M	=	905	-218	GTACACACGCTGTCCTATGTACTTATCATGACTCT	5&<<7;+95;7'6<<<<<.<<<<<;<<9<7<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:113:694:725	163	chr1	1088	99	35M	=	1266	213	GTACACACGCTGTCCTATGTACTTATCATGACTCT	<<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:278:848:765	147	chr1	1088	99	35M	=	920	-203	GTACACACGCTGTCCTATGTACTTATCATGACTCT	7;;<;5<55<<;;<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:234:787:12	163	chr1	1092	97	35M	=	1257	200	ACACGCTGGCCTATGTACTTATAATGACTCTATCC	<;<<<9<<&+9;3;<993;<9<+94;9&41;08%9	MF:i:18	Aq:i:24	NM:i:2	UQ:i:15	H0:i:0	H1:i:0
+EAS218_1:4:15:856:340	147	chr1	1093	99	35M	=	936	-192	CACGCTGTCCTATGTACTTATCATGACTCTATCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:258:266:101	163	chr1	1094	99	35M	=	1285	226	ACGCTGTCCTATGTACTTATCATGACTCTATCCCA	<<<<<<<<<<<<<<<<<<5<;,<-2<<<<;68<<6	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:177:552:234	147	chr1	1094	99	35M	=	903	-226	ACGCTGTCCTATGTACTTATCATGACTCTATCCCA	::;:=;=99=====;;====;==========<===	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:134:379:893	147	chr1	1095	99	35M	=	927	-203	CGCTGTCCTATGTACTTATCATGACTCTATCCCAA	7137::;<<<<<<<;<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:256:404:584	147	chr1	1096	99	35M	=	928	-203	ACTGTCCTATGTACTTATCATGACTCTATCCCAAA	&&326+23<3<<<+:<</<<8<<<:7:<<<<<<<<	MF:i:18	Aq:i:60	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS114_30:4:317:378:535	163	chr1	1096	99	35M	=	1258	197	GCTGTCCTATGTACTTATCATGACTCTATCCCAAA	<<<<<<<<<<<<:<<<<<<<<<;<<;<8<;:7:1(	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:277:482:316	83	chr1	1098	99	35M	=	894	-239	TGTCCTATGTACTTATCATGACTCTATCCCAAATT	9998;<<<<<;;<<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:273:901:459	147	chr1	1098	99	35M	=	938	-195	TGTCCTATGTACTTATCATGACTCTATCCCAAATT	4;+/+7,;<8+&<;;82;;<8<8<2<;<<<<<<<<	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:316:25:230	163	chr1	1098	99	35M	=	1273	210	TGTCCTATGTACTTATCATGACTCTATCCCAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<);2;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:24:195:604	83	chr1	1098	99	35M	=	923	-210	TGTCCTATGTACTTATCATGACTCTATCCCAAATT	;6<02;<<<<59<<;<;<<<<9<3<<<<<<<<<;<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:42:923:169	83	chr1	1099	99	35M	=	925	-209	TTCCTATGTACTTATCATGAATCTATCCCAAATTC	&;972<;&<9<,;;;<<<;<&99<<;<;;3<<3<<	MF:i:18	Aq:i:39	NM:i:2	UQ:i:10	H0:i:0	H1:i:1
+EAS114_45:6:59:1548:1096	163	chr1	1099	99	35M	=	1297	233	GTCCTATGTACTTATCATGACTCTATCCCAAATTC	;.;;;;;;;;6;;;;;;;;;;;;;;;73;;77777	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:136:389:320	147	chr1	1100	99	35M	=	930	-205	TCCTATGTACTTATCATGACTCTATCCCAAATTCC	.5:,666<)<8<:<<:66<<<<<<<<<<5<<7<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:122:342:296	99	chr1	1100	99	35M	=	1256	191	TCCTATGTACTTATCATGACTCTATCCCAAATTCC	<<<<<<<<<<<<<<<<<<<<<<<<<;<<*<<<<9<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:259:467:737	83	chr1	1102	99	36M	=	923	-215	CTATGTACTTATCATGACTCTATCCCAAATTCCCAA	8<<<<<<<:<<<<<<<<;<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:71:832:743	163	chr1	1102	99	35M	=	1290	223	CTATGTACTTATCATGACTCTATCCCAAATTCCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<*<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:105:521:563	163	chr1	1103	72	35M	=	1267	199	TATGTACTTATCATGACTCTATCCCAAATTCCCAA	;<)<9995<9<<59<7<<<<7<7<35,0,544<3(	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:201:195:757	163	chr1	1103	99	35M	=	1298	230	TATGTACTTATCATGACTCTATCCCAAATTCCCAA	<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;;8	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:6:585:132	163	chr1	1105	23	36M	=	1276	207	TGTACTTATCATGTTTCTTTCCTAATTTTTCAATTA	6666166&6)+61))646+6&)&%&-44))1'144'	MF:i:130	Aq:i:23	NM:i:7	UQ:i:59	H0:i:0	H1:i:0
+EAS1_105:2:179:532:82	99	chr1	1105	99	35M	=	1285	215	TGTACTTATCATGACTCTATCCCAAATTCCCAATT	<<<<<<<<<<<<<<<<<<<<3<;<;<<<<:<8<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:11:646:628	147	chr1	1106	99	36M	=	930	-212	GTACTTATCATGACTCTATCCCAAATTCCCAATTAC	<<<3<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:6:93:334:858	147	chr1	1106	99	35M	=	932	-209	GTACTTATCATGACTCTATCCCAAATTCCCAATTA	;<;+;;<<;<<<<<;<<<<;;8<<<<8<<<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:26:785:882	83	chr1	1107	99	35M	=	926	-216	TACTTATCATGACTCTATCCCAAATTCCCAATTAC	<<&5&<<<<5.;5<'<<;.76<<<<<7<7<<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:4:54:989:654	99	chr1	1108	99	35M	=	1296	223	ACTTATCATGACTCTATCCCAAATTCCCAATTACG	<<<<<<<<<<<<<<<9<<<<<<9<<<<<1<<<88;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:202:326:680	163	chr1	1108	78	35M	=	1268	195	ACTTATCATGACTCTATCCCAAATTCTCAATTACG	<<<<<<<4<<<*<<<*<<<7..:7<3*:7.7<+.;	MF:i:18	Aq:i:37	NM:i:1	UQ:i:9	H0:i:0	H1:i:1
+B7_597:3:53:616:842	163	chr1	1109	99	35M	=	1288	214	CTTATCATGACTCTATCCCAAATTCCCACTTACGT	<<<<<<<<<<<<<<<<<<<;07<<<<<-&<<-<4;	MF:i:18	Aq:i:68	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS54_71:4:209:159:130	147	chr1	1109	99	35M	=	934	-210	CTTATCATGACTCTATCCCAAATTCCCAATTACGT	;:6<:<8::;<<<;<-<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:75:917:886	83	chr1	1110	99	35M	=	951	-194	TTATCATGACTCTATCCCAAATTCCCAATTACGTC	<<<<8<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:286:753:854	163	chr1	1110	99	35M	=	1288	213	TTATCATGACTCTATCCCAAATTCCCAATTACGTC	<<<<<<<<<<<<<<<<<<3<<<<<<9999<;<<9;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:290:146:36	99	chr1	1110	99	35M	=	1280	205	TTATCATGACTCTATCCCAAATTCCCAATTACGTC	<<<<<<<<<<<<<<<<<<<<<<<8<<<<<;;<;;<	MF:i:18	Aq:i:25	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:93:1475:542	163	chr1	1110	99	35M	=	1254	179	TTATCATGACTCTATCCCAAATTCCCAATTACGTC	;;;;;;;;;;;;;;;;;;;;;;9;;;9;;;77777	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:77:251:446	83	chr1	1110	99	35M	=	939	-206	TTATCATGACTCTATCCCAAATGCCCAATTACGTC	<<24,:8<<<:1<<<:35<:<:,<<<<<<:5:<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:11	H0:i:0	H1:i:1
+EAS1_105:3:176:431:647	163	chr1	1112	99	35M	=	1285	208	ATCATGACTCTATCCCAAATTCCCAATTACGTCCT	<<<<<<<<<<<<<<<<2<<<<<<<<6<<<<9<<6<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:111:796:737	147	chr1	1112	99	35M	=	936	-211	ATCATGACTCTATCCCAAATTCCCAATTACGTCCT	<3<<<<<<<<<<<7<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:228:189:826	147	chr1	1112	99	35M	=	914	-233	ATCATGACTCTATCCCAAATTCCCAATTACGTCCT	:74=:.==1==========================	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:35:631:594	163	chr1	1112	99	35M	=	1271	194	ATCATGACTCTATCCCAAATTCCCAATTACGTCCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:29:529:379	83	chr1	1117	99	35M	=	926	-226	GACTCTATCCCAAATTCCCAATTACGTCCTATCTT	;<<<:<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:74:596:137	99	chr1	1119	91	35M	=	1294	210	CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT	<<<<<<<<<</4<<<<<<*<:6<<<<<<<<;/3<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:92:1807:1185	147	chr1	1119	99	35M	=	940	-214	CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT	<<<<<<9<<<<<<<<<<<<<<<<<<<<<<><<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:3:57:735:151	99	chr1	1121	94	35M	=	1314	228	CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC	<<<<<<<<8<<8<:<<*<:<<<4<<<;,<<<<:<:	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:142:858:903	147	chr1	1121	99	35M	=	943	-213	CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC	<<<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:247:522:670	83	chr1	1121	99	35M	=	960	-196	CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC	;;;9;:<<<<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:75:732:442	99	chr1	1121	99	40M	=	1293	212	CTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG	<<<<<;<<<<<9<<<;<<;<<<5<<;8<<<<<<<<;:9%%	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:183:645:699	99	chr1	1122	86	35M	=	1281	194	TATCCCAAATTCCCAATTACGTCCTATCTTCTTCT	<<9<9<<<<<<<<<;<<;<<*175;173<;;;<-/	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:175:437:950	163	chr1	1126	99	35M	=	1298	207	CCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:59	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:3:93:1002:845	83	chr1	1129	99	35M	=	954	-210	AATTCCCAATTACGTCCTATCTTCTTCTTAGGGAA	<<::;;;<<<<<<<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:6:50:542:881	163	chr1	1132	99	35M	=	1324	227	TCCCAATTACGTCCTATCTTCTTCTTAGGTAAGAA	<<<<<4<09<<9<<2<<<<<<<<<<<2/.&2<%<7	MF:i:18	Aq:i:63	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_99:3:118:851:285	83	chr1	1133	99	35M	=	953	-215	CCCAATTACGTCCTATCTTCTTCTTAGGGAAGAAC	3+7<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:67:191:668	147	chr1	1134	99	35M	=	995	-174	CCAATTACGTCCTATCTTCTTCTTAGGGAAGAACA	<<<<<7<<7<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:166:203:416	83	chr1	1136	99	35M	=	963	-208	AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC	<<<<<<<<::<<<<<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:15:1497:1530	99	chr1	1136	99	35M	=	1314	213	AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC	0<;;;9;;86<;;;<<&<<.<<;)3;7;654-471	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:206:563:262	83	chr1	1137	99	35M	=	971	-201	ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT	<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:40:352:151	99	chr1	1137	99	35M	=	1327	225	ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT	<<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:67:302:762	99	chr1	1138	99	36M	=	1313	211	TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA	<<<<<<<<<<<<<<<<<<<<;;65;<-<;<:8<<<3	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:5:84:927:843	147	chr1	1138	99	35M	=	938	-235	TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTT	588;<:<<<<<<<6<<<<;<<<:/<<3<:;<*<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:5:147:479:41	163	chr1	1139	99	35M	=	1322	218	TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA	<<<<<<<<<<<<<<<<<<<<::6<<;<<<;;9;;6	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:329:177:267	83	chr1	1139	99	35M	=	962	-212	TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:72:916:763	163	chr1	1142	99	35M	=	1340	233	GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT	</:8<8)<<<<:<<<<<;.89<:67<.;<<7+336	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:124:128:489	99	chr1	1142	99	35M	=	1348	241	GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT	<<<<<<<<<<<<<<<<<6:6<<-4<::;;<<:48<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:39:59:738	83	chr1	1142	99	35M	=	965	-212	GTCCTATGTTCTTCTTAGGGAAGAACAGCTTAGGT	;.;4;<;3<<9<<9<&<<9<<<<<;<9<;<<;9<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:18	H0:i:0	H1:i:1
+EAS1_99:6:63:48:631	83	chr1	1143	99	35M	=	957	-221	TCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTA	;*:;;<2<<2779;:<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:274:176:479	147	chr1	1144	99	35M	=	976	-203	CCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTAT	7)<<7<626<<7<<<<<<<<<<<<<<<<<<<3<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:72:1809:1398	147	chr1	1145	99	35M	=	958	-222	CTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATC	;:;;:<7:7<:<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:235:805:373	83	chr1	1146	99	35M	=	983	-198	TATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCA	<<;<<<<<<9<9<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:269:944:220	83	chr1	1147	99	35M	=	953	-229	ATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAA	<;<;8<<;7<<<<<;<<-<<<<<<;<<<;<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:174:597:66	163	chr1	1148	99	35M	=	1307	194	TCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAAT	<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;6;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:229:717:121	147	chr1	1150	99	35M	=	995	-190	TTCTTCTGAGGGAAGAACAGCTTAGGTATCAATTT	6;-;7<<(<<<<<8<18<7<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:7	H0:i:0	H1:i:1
+EAS56_53:1:23:403:981	147	chr1	1151	99	35M	=	985	-201	TCTTCATAGGGAAGAACAGCTTAGGTATCAATTTG	(;3+<&3<</7<<<<<<;<<<<<<<<<<<<</<2<	MF:i:18	Aq:i:65	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS112_32:7:168:117:441	147	chr1	1151	99	35M	=	990	-196	TCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTG	;;;;3;<<<<<<<<<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:52:1455:1212	99	chr1	1153	99	40M	=	1304	191	TTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCT	<9<<<99<;<<9<;<-<<<6<<75;;<*%<5<3+.8:*5;	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:37:400:627	83	chr1	1154	99	35M	=	961	-228	TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTG	474*;<<9<;<<<;<<:<<<<<<;<<<<<<;<<;<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:5:11:868:62	147	chr1	1154	99	36M	=	983	-207	TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGT	;;77;;7<<<<<<<<7<<<;<7<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:209:92:210	83	chr1	1156	99	35M	=	965	-226	TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT	;9;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:128:394:455	163	chr1	1156	99	35M	=	1313	192	TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT	======6==========;===9==;5===;==;==	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:316:949:122	99	chr1	1156	99	35M	=	1321	200	TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<0<:<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:60:1020:1259	147	chr1	1157	99	35M	=	996	-196	TAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:193:38:987	83	chr1	1158	99	35M	=	964	-229	AGGGAAGAACAGCTTAGGTATCAATTTTGTGTTCT	<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_93:5:292:122:666	147	chr1	1159	99	35M	=	985	-209	GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG	<;<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:280:512:316	83	chr1	1159	99	35M	=	984	-210	GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG	;9===;======;7==;;======;=====;====	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:207:926:427	83	chr1	1159	99	35M	=	973	-221	GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG	;;7<<;4<<<2<<;<<<<<<<<<<7<;<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:239:796:221	83	chr1	1160	99	35M	=	992	-203	GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT	;;<<;<<;<<<+:<<<4<4<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:142:457:584	147	chr1	1160	99	35M	=	999	-196	GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT	8::<:<<9<<.<:<<<<<<<<<<<7<<<<<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:190:481:295	83	chr1	1161	99	35M	=	990	-206	GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG	;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:86:308:648	147	chr1	1161	99	35M	=	970	-226	GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG	<7<<<;<<<<+;<<<2<5<<<77;<<2<;;<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:182:23:585	99	chr1	1163	99	35M	=	1336	208	AGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:216:650:516	99	chr1	1164	99	36M	=	1326	198	GAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:15:805:420	83	chr1	1164	35	35M	=	998	-201	GAACAGTTTAGGTATCAATTTGGTGTTCTTTGTAA	<64<59&996<(64<)7).68<0<0<<7741<1:<	MF:i:18	Aq:i:35	NM:i:2	UQ:i:24	H0:i:0	H1:i:1
+EAS56_65:6:82:822:767	147	chr1	1165	99	35M	=	972	-228	AACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA	<<9<<<<<<<<<<;;<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:33:1566:588	147	chr1	1166	76	35M	=	985	-216	ACAGCTTAGGCATCAATTTGGTGTTCTGTGTAAAG	-6246;;97;77;;97;;;;;;9;7;79;)&;37;	MF:i:18	Aq:i:37	NM:i:1	UQ:i:22	H0:i:0	H1:i:1
+EAS1_93:1:20:635:509	163	chr1	1167	99	35M	=	1333	201	CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT	<<<<<<<<<;<<<<;<<<;<;;;<<<;<<<<<<(8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:144:28:475	147	chr1	1167	99	35M	=	974	-228	CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT	;;;9;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:36:1402:1709	163	chr1	1168	99	35M	=	1326	193	AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC	<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<:9<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:34:956:1309	147	chr1	1168	99	35M	=	994	-209	AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC	9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:157:784:936	163	chr1	1169	99	35M	=	1356	222	GCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCT	<<<<<<<<<<<<<<<<<:<<<<<<;<<<<814<4<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:2:152:860:286	83	chr1	1171	99	35M	=	1004	-202	TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCA	2;5;8<<;5<<<;<2<8<<<<<<;8<;<<<<;<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:157:786:424	147	chr1	1171	99	36M	=	981	-226	TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG	;<;2;;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:33:1407:94	163	chr1	1172	99	35M	=	1360	223	TAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG	;;;;;;;6:;;:::7;:;;;;:::;;;;:;47771	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:302:288:657	147	chr1	1173	99	35M	=	1013	-195	AGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGG	<:5<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:233:97:262	147	chr1	1175	99	35M	=	1021	-189	GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA	--;;7<;<;;:;<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:67:692:110	147	chr1	1175	99	35M	=	1009	-201	GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA	;;<<8<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:68:692:347	163	chr1	1176	99	36M	=	1351	211	TATCAATTTGGTGTTCTGTGTAAAGTCTCATGGAGC	<<<<<<<<<+6<;<<<<3<:<<<<6<8<<<&*/;*0	MF:i:18	Aq:i:64	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS51_64:3:309:303:278	83	chr1	1178	99	35M	=	996	-217	TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC	<:<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:21:132:1423	147	chr1	1178	99	35M	=	1012	-201	TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC	:<<<<<6<<;<<;<5<;<<<<<<;<6<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:63:854:610	83	chr1	1180	99	35M	=	1005	-210	AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT	:.5;2<:88<<72:<<;<<7<8;<;/<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:5:182:313:319	147	chr1	1180	99	35M	=	1016	-199	AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT	</<;185;8<;;87<;8<<<<8<;83<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:62:603:1552	83	chr1	1180	99	35M	=	1019	-196	AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT	8::;:<<6<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:145:144:796	99	chr1	1181	99	35M	=	1372	226	ATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTC	<<<<<<<<<<<<<<;<<<<<<;<<<<<<4;4;<;/	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:41:474:283	147	chr1	1182	99	35M	=	1018	-199	TTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCC	6/;;;88;;<:;48<<<<<;<;<<<<<<<<<<;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:329:458:365	99	chr1	1186	99	35M	=	1364	213	GTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGT	==========================9========	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:159:222:274	147	chr1	1189	99	35M	=	1019	-205	GTCTGGGGAAAGTCTCAGGGAGCCGTCCGTGTCCT	''7*<&<'<<<<.<2<<<<<<<<<<+<<<8<8<<;	MF:i:18	Aq:i:37	NM:i:3	UQ:i:17	H0:i:0	H1:i:1
+EAS114_32:6:88:162:587	99	chr1	1189	99	35M	=	1372	218	TTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCT	<;<<<<<<<<<;<5<;<;<<7<++<<2&*:322+7	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:148:340:479	99	chr1	1190	99	35M	=	1364	209	TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC	<<<<<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:12:276:1797	147	chr1	1190	99	35M	=	1006	-219	TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC	)9<02)<<<<<<<<<<<<<1<<<<&<<<<9<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:190:42:671	83	chr1	1192	99	36M	=	1008	-220	TGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA	<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:4:321:271:138	99	chr1	1193	99	35M	=	1394	236	GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA	<<<<<<<<<<<<<<<<<<<<<;9<<;<<;;<88;&	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:154:669:853	163	chr1	1193	99	35M	=	1371	213	GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA	============<===.====<:=<9=<<<9;:;2	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:287:258:321	147	chr1	1194	99	35M	=	1030	-199	TGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCAT	:.<9<)<;<9<.<<:<:+5:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:61:183:767	147	chr1	1195	99	35M	=	1010	-220	GTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATC	6&.;;<3<363<<<<<<<<8<<<6<<<<3<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:29:794:282	83	chr1	1196	99	36M	=	1025	-207	TAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG	7<<<<45::-<<<<<;<<-;<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:313:827:992	99	chr1	1197	99	35M	=	1379	217	AAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG	<<<<6<<<<:<<<<<66<<<:33:<<<80<;6<8+	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:196:11:27	83	chr1	1198	65	36M	=	1035	-199	AAGACCCAGTTAGCCGTCCGTGTCCTCCCATCTGGC	96&6<'<7:!!<,:;+7<<6:<<<<<<<<<7<7;:<	MF:i:18	Aq:i:24	NM:i:4	UQ:i:27	H0:i:0	H1:i:0
+EAS139_19:3:87:133:930	83	chr1	1198	99	40M	=	1044	-194	CAGTCTCAGGGCGCCGTCCGTTTCCTCCCATCTGGCCTCG	)8&)907)-;9&,<<9)<;<<0<;<<99<<<<<<;<<9<<	MF:i:18	Aq:i:39	NM:i:3	UQ:i:28	H0:i:0	H1:i:1
+EAS114_45:7:97:1584:777	147	chr1	1200	99	35M	=	1013	-222	GTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCC	66746,9::9;;;;:;;;;;;;;;;;;;;;:;;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:127:153:861	99	chr1	1202	99	35M	=	1374	207	CTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTC	<<<<<<<<<<<<<<<<<<<<<<<=<*<<<24;;::	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:157:42:763	83	chr1	1203	99	35M	=	1040	-198	TCTGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCG	4++;((2(5;24<./<:<<<<<<<<;<<88<<<<9	MF:i:18	Aq:i:61	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS54_65:4:91:267:655	99	chr1	1204	99	35M	=	1365	196	CAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGT	<<<<<<<<<<<<<<<<<<<<<;:;;7<9477<74;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:39:966:551	147	chr1	1205	99	35M	=	1026	-214	AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC	8;;;;;<<6'<<<+8<<<1<<<<4<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:61:38:1182	163	chr1	1205	99	35M	=	1388	218	AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:47:352:1492	99	chr1	1205	99	40M	=	1385	220	AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGCCCACTA	:<<<::<24<04-&<;<<2<<<&<60)&<5<<6*8:)9+*	MF:i:18	Aq:i:53	NM:i:3	UQ:i:28	H0:i:1	H1:i:0
+EAS221_3:8:74:770:1712	83	chr1	1208	99	35M	=	1052	-191	GAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCAC	3.&::6<<<9<6:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:279:763:945	147	chr1	1210	99	36M	=	1048	-198	GCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT	+9:-+<:1-44<<':<;<+<-<<<;:<<;;<<<<<0	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:306:388:342	163	chr1	1211	99	35M	=	1398	222	CCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT	================5====:=====;==1=4==	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:180:905:36	147	chr1	1212	99	35M	=	1033	-214	CCTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG	6%%<;<662<<*;<<<8<<:<<<<<<<<<<<<<<;	MF:i:18	Aq:i:65	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS218_1:2:19:752:816	99	chr1	1212	99	35M	=	1394	217	CGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG	<<<<<<<<<<<<<<<<<<<8<7;<;<<767277;6	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:305:565:952	147	chr1	1213	99	36M	=	1030	-219	GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT	5(<1<147<81<*8--8<<<7<91<<<;+<+<<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:44:1466:425	83	chr1	1213	99	35M	=	1044	-204	GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGG	6-<<9<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:68:64:783	163	chr1	1214	99	35M	=	1402	223	TCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT	<<<<<<<<<<<<<<<<<;;<<<<<<;<<<9:<<:9	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:7:64:37:257	163	chr1	1215	99	35M	=	1389	209	CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT	================<=====;===8;4======	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:20:413:1334	99	chr1	1215	99	35M	=	1370	190	CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT	7<<;<<<.;<;67;7;;;:;;3;<59+...77677	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:8:179:549:753	147	chr1	1218	99	35M	=	1056	-197	TGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTC	:77<</<<<::<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:16:823:343	99	chr1	1223	99	35M	=	1403	215	TCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAA	================================4==	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:7:266:556:252	99	chr1	1224	99	35M	=	1392	203	CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA	<<<<<<<<<<<<<<<<<;<<<<<<4;;<;;;<7;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:278:524:521	83	chr1	1224	99	35M	=	1025	-234	CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA	7777,<;<<7<<<<;;<<;;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:72:1426:1883	99	chr1	1226	99	35M	=	1405	214	CATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:82:998:566	83	chr1	1227	99	35M	=	1050	-212	ATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCT	<9<9<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:6:29:575:453	83	chr1	1228	99	36M	=	1056	-208	TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTG	;<<<;;<:<<<;<;<<<<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:7:222:538:267	147	chr1	1228	99	35M	=	1074	-189	TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTT	52/8-<<7<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:138:186:274	147	chr1	1231	99	35M	=	1075	-191	GGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGG	<;<<<<<6;<<<<<3<<36;3;<9<<<<<<3;<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:137:895:681	99	chr1	1232	99	35M	=	1418	221	GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<-8<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:71:636:533	99	chr1	1232	99	35M	=	1398	201	GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC	<<<<<<<<<<<<<<<<<<<<<<<7<<<5<<<-847	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:45:294:380	83	chr1	1233	80	36M	=	1074	-195	CCTCGTCCACACTGGTTCGCTTGAAAGCTTGGGCTG	;<+<7<<<<;7<,<7<<<+/7;<<;<<;7<<<;<<<	MF:i:18	Aq:i:39	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS51_66:8:9:80:353	83	chr1	1233	99	35M	=	1067	-201	CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT	;;5;:8<:<:;:;<<<<;<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:73:302:1574	99	chr1	1233	99	35M	=	1429	231	CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT	<<<<<<<<<<;<<<<<<<<<<<<+:;<<;:8;<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:131:779:345	163	chr1	1237	99	35M	=	1399	197	GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA	============================9====;=	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:159:71:155	99	chr1	1237	99	35M	=	1428	226	GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA	=========;=<======;=:=3;==;=6<==;=;	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:55:340:837	83	chr1	1238	99	35M	=	1069	-204	TCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAAT	61378<::<<<5:<;;:<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:91:521:517	147	chr1	1239	99	35M	=	1061	-213	CCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATG	8;8<4=:===7===9=============<======	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:47:303:887	83	chr1	1240	96	35M	=	1052	-223	CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA	<;<6<;<;<8<<<8<<<<;<<<.<<<<<<<8<8;<	MF:i:18	Aq:i:25	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:74:570:695	163	chr1	1240	99	35M	=	1436	231	CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA	=========================7====;8<8;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:3:268:523:511	147	chr1	1241	99	35M	=	1081	-195	ACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGAT	8<7<99<<<<<<<<<:<<<<<<4<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:319:174:811	147	chr1	1242	99	35M	=	1044	-233	CACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATG	;7;3<<3.<<<<<<<<<<<4<<<<<<<<<<<<<0<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:28:315:310	83	chr1	1242	99	35M	=	1085	-192	AAACTGTTCTCTTGAAAGCTTGGGCTGTAATGATG	+%,768<<:<:<2<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:4	UQ:i:70	H0:i:1	H1:i:0
+EAS1_108:1:328:614:638	99	chr1	1243	99	35M	=	1428	220	ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGC	<<<<<<<<<<<<<<<<<<<<4/;<<9<<<<7<<*:	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:63:930:152	163	chr1	1243	99	35M	=	1410	202	ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATTC	<<<<;<<<<<<<7<<;::<<)726;)<99<)&;&+	MF:i:18	Aq:i:59	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS56_59:1:219:294:861	83	chr1	1244	99	35M	=	1073	-206	CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC	;,;<;<<<;&<<<<<<<5<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:6:42:920:522	83	chr1	1244	99	35M	=	1067	-212	CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC	;;;;;99<;<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:87:89:696	99	chr1	1245	99	36M	=	1419	210	TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<;<:;<<<;<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:166:979:531	163	chr1	1245	99	35M	=	1410	200	TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCC	<<</<<<<<<<<<9<<9<<;<7<<<<9<<<9<,)6	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:40:918:950	83	chr1	1247	99	35M	=	1071	-211	GTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCT	=0=&&33======;=====.===============	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:131:946:353	83	chr1	1249	99	35M	=	1087	-197	TCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTG	<<:<<66<<<6<<4<<<:8<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:224:932:942	147	chr1	1250	99	35M	=	1082	-203	CTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGG	<;<<;;<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:5:318:177:383	83	chr1	1251	99	35M	=	1056	-230	TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC	5:9;7;777<<7<<<<<<<<<<<<<<<<<<<<<<4	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:188:460:1000	147	chr1	1251	99	35M	=	1080	-206	TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC	+;+077<7;<57<;;8<<<<<<<<<<8<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:12:1296:358	147	chr1	1252	96	35M	=	1082	-205	CTTGAAAGCTTGGTCTGTAATGATGCCCCTTGGCC	-770074;;6;&42;:2;;;:;;;;:;;/:;;;;:	MF:i:18	Aq:i:37	NM:i:1	UQ:i:17	H0:i:0	H1:i:1
+EAS188_4:5:166:776:590	83	chr1	1252	99	35M	=	1075	-212	CTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCC	<;:;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:54:263:585	147	chr1	1254	99	36M	=	1081	-209	TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATC	1:::6<<<<;;;<4<<<<<<<<6<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:93:1475:542	83	chr1	1254	99	35M	=	1110	-179	TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCAT	98987:9:<:;:;;;;;<<;<;<;;;;<<<;;;<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:122:342:296	147	chr1	1256	99	35M	=	1100	-191	AAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCA	<:;:<<<;<2<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:234:787:12	83	chr1	1257	97	35M	=	1092	-200	AAGCTTGGGCTGTAATGATGCCCCTTGGCCATCAC	;;.<;;994<;9<<;;;<<<<<<<7<<<<<<<<<;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:317:378:535	83	chr1	1258	99	35M	=	1096	-197	AGCTTGGGCTGTAATGATGCCCCTTGGCCATCACC	;7;':<77<<;<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:160:434:853	83	chr1	1259	99	35M	=	1072	-222	GCTTGGGCTGTAATGATGCCCCTTGGCCATCACCC	;;*4;<;<<<;<<<<<<<8<<<;<<<<<<<<8<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:18:1498:1475	163	chr1	1260	99	35M	=	1427	202	CTTGGGCTGTAATGATGCCCCTTGGCCATCACCCG	<<<<<7<<<<<<+<<-3<<3<:<2<1<<:<<<<<+	MF:i:18	Aq:i:71	NM:i:1	UQ:i:27	H0:i:1	H1:i:0
+B7_593:2:104:744:280	99	chr1	1262	64	36M	=	1421	195	TGGGCTGTAATGATGCCCCTTGTCCATCACCCGGTC	<<<<<<<<<<<<<<;<;<<<<:4<<4<<0<;80+;:	MF:i:18	Aq:i:21	NM:i:2	UQ:i:34	H0:i:0	H1:i:1
+EAS1_95:4:66:179:118	83	chr1	1262	99	35M	=	1084	-213	TGGGCTGTAATGATGCCCCTTGGCCATCACCCAGT	<<99<<<<<<<<<<<<<<<<<<<9<<<:<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:277:194:143	99	chr1	1262	99	35M	=	1444	217	TGGGCTGTAATGATGCCCCTTGGCCATCACCCGGT	<<<<<<<<<<<;<<<<<<<<<<9;<<<8</<<6<:	MF:i:18	Aq:i:72	NM:i:1	UQ:i:21	H0:i:1	H1:i:0
+EAS1_97:2:59:882:980	83	chr1	1263	99	35M	=	1071	-227	GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC	7339%<6<<<<<;<<9<<8<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS220_1:4:14:1665:1772	83	chr1	1263	84	35M	=	1073	-225	GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC	<&7<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:39	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_57:2:259:42:969	163	chr1	1265	99	35M	=	1426	196	GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC	<<<<<;<<;<<3<<<;9<36<<29;<<;;;</;<2	MF:i:18	Aq:i:69	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS221_1:4:4:1732:88	147	chr1	1265	99	35M	=	1087	-213	GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC	:<4<:<<:<::<<<<<::<<<<<:<:<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_105:2:110:584:649	147	chr1	1266	99	35M	=	1084	-217	CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT	++:4686<<68<;<;<;<<<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_59:5:113:694:725	83	chr1	1266	99	35M	=	1088	-213	CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT	;::<<:<:<<<<<<<<<<:<:<<<<<<;<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS221_1:8:58:369:244	163	chr1	1266	99	35M	=	1436	205	CTGTAATGATGCCCCTTGGCCATCACCCAGTCCCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:105:521:563	83	chr1	1267	10	35M	=	1103	-199	TGTAATGCTGCCCCTTGGCCATCCCCCGGTCCCTG	/8)-8/6(98<967<3<<979<<1<<<7<<<<7<<	MF:i:18	Aq:i:10	NM:i:3	UQ:i:45	H0:i:0	H1:i:0
+EAS188_4:5:202:326:680	83	chr1	1268	78	35M	=	1108	-195	GTAATGATGCCCCTTGGCCATCACCCGGTCCCTGC	+33<81<:*<;<;;30;<<<;<<<8<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS192_3:6:216:292:528	99	chr1	1269	99	35M	=	1438	204	TAATGATGCCCCTTGGCCATCACCCAGTCCCTGCC	<;<;<<<<<<<;<<<<<<<<;;;;:;;:<%<;1;:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:67:1864:477	163	chr1	1270	99	35M	=	1465	230	AATGATGCCCCTTGGCCATCACCCAGTCCCTGCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:35:631:594	83	chr1	1271	99	35M	=	1112	-194	ATGATGCCCCTTGGCCATCACCCGGTCCCTGCCCC	<<<<4<<<<<.<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS112_34:8:103:812:255	99	chr1	1272	99	35M	=	1461	224	TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCC	<<<<<<<<<<<<<<<9<<;<<<39;;<;32:7;7+	MF:i:18	Aq:i:69	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS188_7:4:259:869:641	99	chr1	1272	99	35M	=	1435	198	TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCA	<<<<<<<<<<<<<<<<<<<<<,;<:<<<<<<<<<1	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:316:25:230	83	chr1	1273	99	35M	=	1098	-210	GATGCCCCTTGGCCATCACCCGGTCCCTGCCCCAT	8;8;<<;<;;<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS221_1:6:38:1071:155	99	chr1	1274	99	35M	=	1465	226	ATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATC	<<<<<<<<<<<<<:<<<<<<<<8<<<:<<:;;8:;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:6:585:132	83	chr1	1276	23	36M	=	1105	-207	GCCCCTTGACCACCACCCAGTCCCTGCCCCATCTCT	:<473$'<+5;7*+<7<&<37<7<<<<7;;7<<:<7	MF:i:18	Aq:i:23	NM:i:2	UQ:i:19	H0:i:0	H1:i:0
+B7_595:6:47:720:789	99	chr1	1278	90	35M	=	1455	212	CCCTTGGCCATCACCCGGTCCCGGCCCCTTCTCTT	<<72<<<<<<<<;;<7;,0<2;*7<2;<*;;<<64	MF:i:18	Aq:i:25	NM:i:3	UQ:i:44	H0:i:0	H1:i:0
+EAS192_3:6:185:868:496	163	chr1	1278	99	35M	=	1442	199	CCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTT	<<<<<<<<<<<<;<<<;<<<<<<<<<<<9<<;<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:290:146:36	147	chr1	1280	99	35M	=	1110	-205	CTTTCCCATCCCCCGGTCCCTGCCCCATCTCTTGT	7;%%%<8-4<(<<<7<<<:<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:25	NM:i:4	UQ:i:37	H0:i:0	H1:i:0
+B7_593:5:267:71:603	99	chr1	1281	99	36M	=	1446	201	TTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAA	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<9;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:183:645:699	147	chr1	1281	86	35M	=	1122	-194	GTGGCCCTCCCCCATTCCCTGCCCCATCTCTTGTA	&)))2-&420<<<'--<6:6-<7<<<+:7<65<<<	MF:i:18	Aq:i:21	NM:i:4	UQ:i:37	H0:i:0	H1:i:0
+EAS1_105:2:179:532:82	147	chr1	1285	99	35M	=	1105	-215	CCATCACCCGGTCCCTGCCCCATCTCTTGTAATCT	<:96<6<<<<89<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_105:3:176:431:647	83	chr1	1285	99	35M	=	1112	-208	CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT	<(9(<<<7;<<7<<<<<<<7<<<<<<7<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:258:266:101	83	chr1	1285	99	35M	=	1094	-226	CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT	%==/7&8=======:===6================	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:179:735:569	163	chr1	1286	99	35M	=	1461	210	CATCACCCGGTCCCTGCCCCATCTCTTGTAATCTC	<<<<<<<<<<<<<<<<<<<<3<<<<<<<<4/<;<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS188_7:3:200:712:439	163	chr1	1286	99	35M	=	1435	184	CGTCACCCGGTCCCTGCCCCATCTCTTGTAATCTC	<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:2	UQ:i:49	H0:i:0	H1:i:0
+EAS1_103:5:319:165:698	99	chr1	1287	99	35M	=	1485	233	ATCACCCAGTCCCTGCCCCATATCTTGTAATCTCT	<<<<<<<<<<<<<<<<<<<3<9<<<<<<<;<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:24	H0:i:0	H1:i:1
+B7_597:3:53:616:842	83	chr1	1288	99	35M	=	1109	-214	TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC	;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:286:753:854	83	chr1	1288	99	35M	=	1110	-213	TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC	;<2<<<,57:<<9<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:14:1256:204	99	chr1	1288	99	35M	=	1467	214	TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC	<<<<<;;;;;;<;;;;;;;<;<;;;;<:-;79697	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:289:132:526	99	chr1	1289	99	36M	=	1472	219	CACCCGGTCCCTGCCCCATCTCTTGTAATCTCTCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<8<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS218_1:4:71:832:743	83	chr1	1290	99	35M	=	1102	-223	ACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:102:511:946	99	chr1	1291	26	35M	=	1461	205	CCCAGTCCCTGCCCCATCTCGGGTAATCTCTCTCC	<<9<<;<<<<;<<<<;<<7;%<5<<0<<<)<.<.+	MF:i:18	Aq:i:26	NM:i:2	UQ:i:31	H0:i:0	H1:i:0
+EAS114_39:5:42:1223:1087	99	chr1	1293	99	35M	=	1479	221	CAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTT	<<<<<<<<<<<<<5<<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:75:732:442	147	chr1	1293	99	40M	=	1121	-212	CGGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC	7,*&28<61:88<.7<:<<:6<1<85:<:1<5<&::<<&<	MF:i:18	Aq:i:60	NM:i:1	UQ:i:11	H0:i:1	H1:i:0
+EAS54_73:3:23:502:103	163	chr1	1294	99	35M	=	1486	227	AGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTT	<2<<<<<<<<<<.<<<<<<<:1&:<<<7<<<<<<:	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:74:596:137	147	chr1	1294	91	35M	=	1119	-210	GGTCCCTGCCCCATCGCTTGTAATCTCTCGCCTTT	+40778449779049'+*87489498949%89948	MF:i:18	Aq:i:22	NM:i:3	UQ:i:32	H0:i:0	H1:i:0
+EAS51_66:8:36:688:722	99	chr1	1295	99	35M	=	1469	209	GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:8:60:182:718	163	chr1	1295	99	35M	=	1485	225	GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT	<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;<;<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:4:54:989:654	147	chr1	1296	99	35M	=	1108	-223	TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT	,<1<2<<<;9)9<<;<<;<<<4<<<;<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:9:203:653	163	chr1	1296	99	35M	=	1488	227	TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT	<<<<<<<<<<<<<<<<<<<<<<::<9<<<<<;;;<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:322:631:245	163	chr1	1297	99	36M	=	1474	213	CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC	<<<<<<<<<<<<<<<<<0<<<<<<<<<<<<<<<<5;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:59:1548:1096	83	chr1	1297	99	35M	=	1099	-233	CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG	88888;;88;;;;8;;9;;;<<<<<<<<<<<<<<;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:52:1779:1664	99	chr1	1297	99	35M	=	1462	200	CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG	<<<<<<<<<<<<<<<<<<71<<<<<<<<<<<<<<%	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:218:173:667	99	chr1	1298	99	35M	=	1448	185	CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC	<<<<<<<<<<<<<<<6<<<<<<<<<<<<<<<<<.<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:175:437:950	83	chr1	1298	99	35M	=	1126	-207	CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC	;;5:;;9<<:<;<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:201:195:757	83	chr1	1298	99	35M	=	1103	-230	CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC	:<':<:<<46<:<;:<;<;<<9<<<<<<<<;<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:8:377:655	99	chr1	1299	99	35M	=	1473	209	CTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:50:950:562	99	chr1	1301	99	35M	=	1473	207	GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGC	<<<<<<<<<<<<<<<&<<8<<<<<<<5<:<+<:+;	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:5:153:543:671	99	chr1	1301	99	34M	=	1465	199	GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<<7	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:33:1193:664	163	chr1	1301	99	40M	=	1474	213	GCCCCATCTCTTGTAATCTCTCTCCTTTTTTCTGCATCCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%:<'<9:::9	MF:i:18	Aq:i:71	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_93:1:253:59:242	99	chr1	1302	99	35M	=	1478	211	CCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<</<<9;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:52:1455:1212	147	chr1	1304	99	40M	=	1153	-191	CCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGT	6::4::;4%;9:<79)<:<;<<:4::7<<9<&+71<9;<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:316:176:543	99	chr1	1305	99	35M	=	1469	199	CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC	====<=9===<<<=====9====<<=3==,96==9	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:50:1339:1154	163	chr1	1305	99	35M	=	1481	211	CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC	==========<<==============;==7<;<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:169:292:652	99	chr1	1306	99	35M	=	1510	239	ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC	<<<<<<<<<<<<<<<<<<<<<<<<<6<<-<<<<8<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:11:706:1030	99	chr1	1306	92	35M	=	1469	198	ATCTCTTGTAATCTCTCTCATCTTTGCTGCATCCC	<<<2<<2<<<<<<<<<<<<0<&<<<+<:2<4<<):	MF:i:18	Aq:i:26	NM:i:2	UQ:i:20	H0:i:0	H1:i:0
+EAS221_3:6:70:843:706	99	chr1	1306	99	35M	=	1449	178	ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC	<<<<<<<<<<<<<<<<<<<<<<<<<5<<5<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:7:174:597:66	83	chr1	1307	99	35M	=	1148	-194	TCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCT	9<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:6:7:1547:1933	163	chr1	1308	99	35M	=	1497	224	CTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTG	<<<<<<<<<<<<<<<<<<<<<<<:<<8<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:30:117:411	163	chr1	1309	99	36M	=	1482	209	TCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTC	<<<<<<<<<<<<<<<<<<<<<<7<<:<<<<<<<<<:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:53:156:845	99	chr1	1311	99	35M	=	1487	211	TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT	<<<<<<8<<<.<<<<.6<<--<-<<<<<<<6<<<<	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:90:1403:1635	99	chr1	1311	99	35M	=	1480	204	TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT	<<;<;<<<<;<;<;;<<<<<9;<.;;<:;99.979	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:67:302:762	147	chr1	1313	99	36M	=	1138	-211	GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC	:8;88<;<<<;<<8<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:270:448:491	99	chr1	1313	99	35M	=	1501	223	GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC	<<<<<<<<<<<<<<<<<<&<<.<<<<<<<:;;;<;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:82:932:400	99	chr1	1313	97	34M	=	1486	208	GTAATCTCTCTCCTCTTCGCTGCATCCCTGTCTT	<<<<<<8<1<<<<8+<<&<<<8<<<<<<<+(,/8	MF:i:18	Aq:i:25	NM:i:2	UQ:i:15	H0:i:0	H1:i:0
+EAS54_81:2:128:394:455	83	chr1	1313	99	35M	=	1156	-192	GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC	;=;9.=5=;=9====;;==================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:3:57:735:151	147	chr1	1314	94	35M	=	1121	-228	TAAACTCTCACCTTATTGCTGCATCCCTGTCTTCC	07;+79:;<)<<9<+8<:<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:26	NM:i:3	UQ:i:28	H0:i:0	H1:i:0
+EAS114_28:6:51:506:878	163	chr1	1314	99	36M	=	1501	223	TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCT	<<<<<<<<<<<<<<<<<4<<<<<<<<<<0<<<<<:;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:15:1497:1530	147	chr1	1314	99	35M	=	1136	-213	TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC	77778:;;;:;;;;:9;:;;;;;;;;;9;:;;;;;	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:9:1595:1826	99	chr1	1316	99	35M	=	1494	213	ATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:73:273:488	163	chr1	1318	99	35M	=	1512	229	CTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTG	<<<<<2<88<88<<<8<<1<<<<<<68<<<;<;<*	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:1:199:760:42	163	chr1	1318	24	35M	=	1489	206	CTCTCTAATTTTTGCTGCTTCCATGTCTTACTCTG	+2&2&2&22222220222&220-222-22-22-22	MF:i:130	Aq:i:24	NM:i:5	UQ:i:51	H0:i:0	H1:i:0
+EAS1_95:7:61:702:720	163	chr1	1320	99	35M	=	1500	215	CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC	==============;=======&=========3:=	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:2:41:576:1016	163	chr1	1320	99	35M	=	1503	218	CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC	<<<<<<<<<<<<<<;<<<;<<<<<<<<<<<4<::<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:115:683:296	99	chr1	1320	99	35M	=	1514	229	CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC	<<<<<<<<<<<8<<<<<<<<<<6<<<<3<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:63:1265:820	99	chr1	1320	99	35M	=	1480	195	CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC	<<<<<<<<<<27<<<<<<<<<<<<<<<<<<<<03<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:7:92:288:1354	163	chr1	1321	99	40M	=	1480	199	TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT	<<<<<<:<<<<<<<<<<<8<<:<<<<;;<8<<<8<:8+::	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:316:949:122	147	chr1	1321	99	35M	=	1156	-200	TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT	59899<<<<;;<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:37:1626:862	163	chr1	1321	99	35M	=	1489	203	TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:5:147:479:41	83	chr1	1322	99	35M	=	1139	-218	CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTT	;:;:;<::<:<<<<<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:73:936:1509	163	chr1	1322	99	40M	=	1502	220	CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTTATTT	<<<<<<<<<7<<7<<<<<<<;<<<<<<<<<:<:<;%8:::	MF:i:18	Aq:i:75	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_62:6:50:542:881	83	chr1	1324	99	35M	=	1132	-227	CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA	+2<<<;<3;29<6<5;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:71:85:629	163	chr1	1324	99	35M	=	1484	195	CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA	<<<<<<<<<<9<<<<<<<<<<<<<<<<<5<9<<+6	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:191:948:257	163	chr1	1325	99	35M	=	1493	203	CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT	:<<<<<<<<9<:<<<<<<:<<<<;<<<<8<<<<7<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:249:986:224	99	chr1	1325	99	35M	=	1499	209	CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT	=========5======7878===98==7=9==.-=	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:5:6:1067:91	163	chr1	1325	99	35M	=	1483	193	CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<:8<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:216:650:516	147	chr1	1326	99	36M	=	1164	-198	TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT	;9;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:18:376:416	163	chr1	1326	99	35M	=	1510	219	TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGTTT	<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;:(<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS114_28:5:209:778:588	163	chr1	1326	99	36M	=	1514	224	TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT	<<<<<<<<;<<<<<<<<<;<<<;<8<8<<<<;7;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:36:1402:1709	83	chr1	1326	99	35M	=	1168	-193	TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT	;;;:<<<;<<<<<<<<<<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:40:352:151	147	chr1	1327	99	35M	=	1137	-225	TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT	;=;;5=:-=9=====;;==================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:139:331:63	99	chr1	1327	99	35M	=	1486	194	TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT	====================<<=============	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:11:1274:1230	163	chr1	1327	99	35M	=	1507	215	TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:36:678:316	99	chr1	1328	99	35M	=	1500	207	TTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTA	<<<<<<<<<<<<<<;<<<<<<<<<;<<<<,2<<<)	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:102:825:507	163	chr1	1330	99	35M	=	1501	206	TGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACT	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;;<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:171:343:758	99	chr1	1331	99	36M	=	1494	199	GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG	<<<<<<<<<<<<<<<<<<<<<;<<<<59<<<9;<<3	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:85:1224:625	99	chr1	1331	99	35M	=	1532	236	GCTGCATCCCTGTCTTCCTCTGTCTTGATTTCCTT	<<<<<<<<<;<<;<<7<<:<<7.<<<:&7<<.<;<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:13	H0:i:1	H1:i:0
+EAS188_7:5:308:354:124	99	chr1	1331	99	35M	=	1507	211	GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTT	<<<<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:7:22:22:934	163	chr1	1332	99	35M	=	1500	203	CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG	<<<<<<<<<<<6<<<;<<<;84;<<48;<;6;<;)	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:71:707:568	163	chr1	1332	99	35M	=	1518	221	CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG	<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:123:610:472	99	chr1	1333	99	35M	=	1504	206	TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT	<<<<<<<<<<:<<<<<<<<<<<<<+:<<<<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:20:635:509	83	chr1	1333	99	35M	=	1167	-201	TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT	50<59<<9<9<<<<<<<<<<<<<<<<<<<6<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:92:213:217	99	chr1	1333	99	35M	=	1515	217	TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:47:471:858	163	chr1	1335	99	35M	=	1487	187	CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG	<<;<<<<<<<<9<<<4;;<<<<;<<<<<.<<4;<4	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:90:406:631	163	chr1	1335	99	35M	=	1525	225	CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG	<<<<<<<<<<<<<<<<<:<<<<:;<<<<;<<8;<8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:81:1723:1820	99	chr1	1335	99	35M	=	1524	224	CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:182:23:585	147	chr1	1336	99	35M	=	1163	-208	ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT	9:<<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:150:508:757	163	chr1	1336	99	35M	=	1483	182	ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT	<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<,<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:261:504:780	163	chr1	1337	99	35M	=	1501	199	TCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTT	<<<<<<<<<<<<<<<<<<<</2<<<9<<<5<<,<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:324:515:230	163	chr1	1339	99	35M	=	1512	207	CCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGG	<<;<<<<<<<<<<<<<<<:<<<<8<<<4<<4<<34	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:72:916:763	83	chr1	1340	99	35M	=	1142	-233	CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT	<;;:<<<<<<<;<<;;;<<<<<<<<<;;<;<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:194:168:684	99	chr1	1340	99	36M	=	1512	208	CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<7<<.<<6-<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:113:43:634	163	chr1	1340	99	35M	=	1500	195	CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTTTT	<<<<<<<<<<<<.<<<<<<<<<<<<</<<2;;%%;	MF:i:18	Aq:i:45	NM:i:2	UQ:i:8	H0:i:1	H1:i:0
+EAS54_71:5:16:434:204	163	chr1	1340	99	35M	=	1522	216	CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT	=================;)===8===:==7;<+%;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:246:205:734	73	chr1	1340	65	35M	=	1340	0	CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT	<<<4<<6666<<6<:<<<3<<<:'<<:<<<<;6<+	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:246:205:734	133	chr1	1340	0	*	=	1340	0	CTCCAGGGAAGTTATCTCTCATCTAGANNNNNTTG	<<<<<<:/<<<,6'</7;<-+9<<;<7!!!!!8<,	MF:i:192
+EAS54_65:3:102:884:63	163	chr1	1341	99	35M	=	1481	175	TGTCTTCCTCTGTCTTGATTTCCTTGTTGTTGGTT	<<<<<<<<<<<<<<<<<3<<<%<<<9<<9<<7+;<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS51_64:3:67:782:132	99	chr1	1343	99	35M	=	1498	190	TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT	<<<<<<<<<<<<<<<<<<<<<<<<<<:<<;4<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:70:348:972	163	chr1	1343	99	35M	=	1528	220	TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT	<.<<3+.7<<7<<:78:<<7<:<7:<3<<7.:::<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:9:206:901	99	chr1	1344	99	35M	=	1517	208	CTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTC	<<<<<<<<<<<<<<<<<<<<<<5<<5<<%%:<<<7	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:21:443:404	99	chr1	1345	99	35M	=	1529	219	TTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCT	<<<<<<<<<<<<<<<<<<<<<7<<;<<;+<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:148:286:316	163	chr1	1347	99	35M	=	1531	219	CCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGT	<<<<<<<<+<<7<<<<<<<6<<<6<142<<<6<2<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:77:48:860	99	chr1	1348	99	35M	=	1521	208	CTCTGTCTTGATTTACTTGTTGTTTGTTTTCTGTT	=========;===========9==*;5=;=;=,7=	MF:i:18	Aq:i:45	NM:i:1	UQ:i:9	H0:i:0	H1:i:1
+EAS51_64:6:124:128:489	147	chr1	1348	99	35M	=	1142	-241	CTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTT	::55<<<8<<<6<<;<<<<<<<<7<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:213:54:878	137	chr1	1348	99	35M	*	0	0	CTCTGTCTTGATTTACTTGTTGTTGGTTTTTTGTT	<<<<<<<<<;<<<<<<<<:<<:<<++<<<<%<%<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS218_1:4:73:42:1038	163	chr1	1349	99	35M	=	1513	199	TCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTT	<<<<<<<<<<<<<<<<<<<<<<<:<<<<<.<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:320:505:814	99	chr1	1350	99	35M	=	1515	200	CTGTCTTGATTTACTTGTTGTTGGTTTTCTTTTTC	<<<<<<<<<<<<<<<<;<<8<<76<<<<;<&<<<7	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+B7_593:2:68:692:347	83	chr1	1351	99	36M	=	1176	-211	TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTT	9<;;;;<<<:<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:252:428:683	137	chr1	1351	99	35M	*	0	0	TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCT	<<<<<<;<<<<<<<<7<<7<<&+<<<<:<&<<<4<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:73:182:444	99	chr1	1354	99	34M	=	1533	214	CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTT	<<<<;;<<<<<<<<<<<<;<;<<<<<:<<<<<7<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:63:267:545	163	chr1	1354	99	35M	=	1524	205	CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTG	<<<<<<<<<<<<:<<<<<::<<<<<<.<<<;;;;5	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:177:562:806	99	chr1	1356	99	35M	=	1515	194	TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTTTT	<;<29<99<<;<<<9<20<9<<5;;<<<<<<<+.<	MF:i:18	Aq:i:35	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS51_62:7:157:784:936	83	chr1	1356	99	35M	=	1169	-222	TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTT	<:<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:1:209:345:87	163	chr1	1360	99	35M	=	1513	188	TTACTTGTTGTTGGTTTTCTGTTTCTTTTTTTGAT	<<<<<<<<<<<<<<<<<<<<;<<<-<<<6<<<+8<	MF:i:18	Aq:i:71	NM:i:1	UQ:i:21	H0:i:1	H1:i:0
+EAS114_45:1:33:1407:94	83	chr1	1360	99	35M	=	1172	-223	TTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGAT	77477;4;;;;;44;;;;;;7;;;;;;;9;;;;;<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:2:434:715	163	chr1	1363	99	35M	=	1527	199	CTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTT	<<<<<<<<<<<<<<<<<;<<<<<<<0<<<68<<<+	MF:i:18	Aq:i:71	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS54_65:4:137:319:642	137	chr1	1363	99	35M	*	0	0	CTTGTTGTTGGTTTTCTGTTTCTTTTTTTGATTTT	<<<<<<<<<27<<<<<<<<<<<<<<&;<<&3;;<%	MF:i:18	Aq:i:41	NM:i:2	UQ:i:9	H0:i:0	H1:i:1
+B7_610:3:148:340:479	147	chr1	1364	99	35M	=	1190	-209	TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG	<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:329:458:365	147	chr1	1364	99	35M	=	1186	-213	TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG	====:==9========>==7>==9>=7=>=>>=>>	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:91:267:655	147	chr1	1365	99	35M	=	1204	-196	TGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGT	;,:;5:<6:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:91:856:504	99	chr1	1366	99	35M	=	1520	189	GTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTT	<<<<<<<<<<<<<<7<<<<<<<7<<<&;<<<&&<&	MF:i:18	Aq:i:68	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_108:2:170:326:433	99	chr1	1367	99	35M	=	1535	203	TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG	=====<=9===:=<:==2=======2:===9==/5	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:132:717:233	99	chr1	1368	99	35M	=	1529	196	TGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGA	<<<<<<<<<<<<;<<<<<<<<<<<7<<<<&-<4<1	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:14:420:712	99	chr1	1368	99	40M	=	1525	197	TGTTGGTTTTCTGTTTCTTTGTTTGATTTTTTTGAAGACA	<<<<<<<<<<<<;<<<<<<<;<<<-;<<<&,<&*8111:6	MF:i:18	Aq:i:66	NM:i:3	UQ:i:21	H0:i:1	H1:i:0
+EAS114_39:4:43:1047:1626	163	chr1	1369	99	35M	=	1523	189	GTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAA	<<<<<<<<<<<<<<<<<<<:<<<:<<<<:+;-4:(	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:20:413:1334	147	chr1	1370	99	35M	=	1215	-190	TTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAG	88878777;:;:1:;9;;;6;;;6;9;;;;;296;	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:154:669:853	83	chr1	1371	99	35M	=	1193	-213	TGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGA	<::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:117:857:942	99	chr1	1372	99	35M	=	1527	190	GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC	<<<<<<<<<<<<<<<<<<<<<<<<<:6<;;7;9<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:145:144:796	147	chr1	1372	99	35M	=	1181	-226	GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC	;<<<;<<<<<<<<<;<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:88:162:587	147	chr1	1372	99	35M	=	1189	-218	GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC	386;;388-<8;<;68<<;;<;<6<<<8<<<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:73:108:1621	99	chr1	1373	99	35M	=	1532	194	GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA	<<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:127:153:861	147	chr1	1374	99	35M	=	1202	-207	TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT	:;:6;9<<1;<<95<<<9<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:152:765:744	163	chr1	1374	99	35M	=	1534	195	TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT	<<<<<<<<<<<<<<<<<<:<<<<<<<<&<7293<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:313:827:992	147	chr1	1379	99	35M	=	1197	-217	TGTTTCTTTGTTTGATTTGGTGGAAGACATAATCC	'187:1'<75<.*<<:5<..<<*<<917<<7<<17	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:7:268:263	121	chr1	1381	22	35M	=	1381	0	TTGCGTTATTTGAGTTGGTGGAAGACATAATCCCA	',)*&2<$7+<<<'<-<7<<<<<<<7<<</4/;<<	MF:i:64	Aq:i:0	NM:i:4	UQ:i:22	H0:i:0	H1:i:0
+EAS51_64:3:7:268:263	181	chr1	1381	0	*	=	1381	0	TCGTACAGAAGTTTAATGGAGCCTTGGGACCTTAC	!!66'&+/&'8+2''1+'611'&6&+/&+.&+1'&	MF:i:192
+EAS139_19:1:47:352:1492	147	chr1	1385	99	40M	=	1205	-220	TTTGTTTTGTATGGTGGAAGACATAATCCCACGCTTCCTA	+7+/7+/%%1'6+3++1;:</<<5<)27<<9<)9<<9<7<	MF:i:18	Aq:i:53	NM:i:3	UQ:i:14	H0:i:1	H1:i:0
+EAS139_11:5:61:38:1182	83	chr1	1388	99	35M	=	1205	-218	GTTTGATTTGGTGGAAGACATAATCCCACGCTTCC	9:;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:7:64:37:257	83	chr1	1389	99	35M	=	1215	-209	TTTGATTTGGTGGAAGACATAATCCCACGCTTCCT	;47<<47+9<4<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:7:266:556:252	147	chr1	1392	99	35M	=	1224	-203	GATTTGGTGGAAGACATAATCCCACGCTTCCTATG	.8558<72<(<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:4:321:271:138	147	chr1	1394	99	35M	=	1193	-236	TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA	261:5969==9=:=<==<=================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:19:752:816	147	chr1	1394	99	35M	=	1212	-217	TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA	+<<+<--/<<<<4<2<<<<45<<<:<<<<<<+<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:306:388:342	83	chr1	1398	99	35M	=	1211	-222	GGGGAAGACATAATCCCACGCTTCCTATGGAAAGG	9/<9;<<<;<;<<7<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:14	H0:i:1	H1:i:0
+EAS114_39:1:71:636:533	147	chr1	1398	99	35M	=	1232	-201	GTGGAAGACATAATCCCACGCTTCCTATGGAAAGG	,51(<<8<:<<<<<<<;<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:131:779:345	83	chr1	1399	99	35M	=	1237	-197	TGGAAGACATAATCCCACGCTTCCTATGGAAAGGT	<<7<<<<<<<<:<<<<<<<<<<<<<;<<<<<<;<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:68:64:783	83	chr1	1402	99	35M	=	1214	-223	AAGACATAATCCCACGCTTCCTATGGAAAGGTTGT	<<9<8<6<<<<<;<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:16:823:343	147	chr1	1403	99	35M	=	1223	-215	AGACATAACCCCACGCTTCCTATGGAAAGGTTGTT	<<<:<<<;+;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS219_FC30151:5:72:1426:1883	147	chr1	1405	99	35M	=	1226	-214	ACATAATCCCACGCTTCCTATGGAAAGGTTGTTGG	;9<;<;0<;<;<<<<;<<<;:<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:166:979:531	83	chr1	1410	99	35M	=	1245	-200	ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT	81<<<3<*<<:<<<<<<<8<<<<<<<<<<<<:<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:63:930:152	83	chr1	1410	99	35M	=	1243	-202	ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT	;:4:8;:::;=:8;=;========;=:========	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:137:895:681	147	chr1	1418	99	35M	=	1232	-221	CTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATG	4;5+6;<<<<<<<<<9;<4<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:87:89:696	147	chr1	1419	99	36M	=	1245	-210	TTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGAT	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:104:744:280	147	chr1	1421	64	36M	=	1262	-195	CATATGGAAAGGTTGTTGGGATTTTTTTAATGATTC	'&+74*0<'/.47:8<<<<;<7''6/1<<<.<<68<	MF:i:18	Aq:i:21	NM:i:3	UQ:i:33	H0:i:0	H1:i:0
+EAS56_57:2:259:42:969	83	chr1	1426	99	35M	=	1265	-196	GGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCA	<<<6<<<<<<-<<<<<<;<<;<6<<<<<<<;<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:18:1498:1475	83	chr1	1427	99	35M	=	1260	-202	GAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAA	:<4<*7<<<<<<<:<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:328:614:638	147	chr1	1428	99	35M	=	1243	-220	AAAGGTTGTTGGGAGATTTTTAATGATTCCTCAAT	<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:159:71:155	147	chr1	1428	99	35M	=	1237	-226	AAAGGTTGTTGGGAGATTTTTAATGATTCCTCGAT	5;;9<<:<;:<<<<7<<7;<3<<<:<<<;<<<<<;	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_39:1:73:302:1574	147	chr1	1429	99	35M	=	1233	-231	AAGGTTGTTGGGAGATTTTTAATGATTCCTCAATG	7<88;;<;;<;;<<<<<<<<<<<<<<<<<<<<<1<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:200:712:439	83	chr1	1435	99	35M	=	1286	-184	GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA	<;<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<<7	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:259:869:641	147	chr1	1435	99	35M	=	1272	-198	GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA	99=:=9=99<=========<=<<============	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:74:570:695	83	chr1	1436	99	35M	=	1240	-231	TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT	.;:8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:58:369:244	83	chr1	1436	99	35M	=	1266	-205	TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT	<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:216:292:528	147	chr1	1438	99	35M	=	1269	-204	GGGAGATTTTTAATGATTCCTCAATGTTAAAATGT	;:;;8<<<<<<<<<<<<<:<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:185:868:496	83	chr1	1442	99	35M	=	1278	-199	GATTTTTAATGATTCCTCAATGTTAAAATGTCTAT	:;;<;;<<<<<<<<;4<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:277:194:143	147	chr1	1444	99	35M	=	1262	-217	TTTTTAATGATTCCTCAATGTTAAAATGTCTATTT	;<<;<<<;8;<0<7<<<<<<<<<<<<7<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:267:71:603	147	chr1	1446	99	36M	=	1281	-201	TTTAATGATTCCTCAATGTTAAAATGTCTATTTTTG	9;;<;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:218:173:667	147	chr1	1448	99	35M	=	1298	-185	TAATGATTCCTCAATGTTAAAATGTCTATTTTTGT	<<<<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:6:70:843:706	147	chr1	1449	99	35M	=	1306	-178	AATGATTCCTCAATGTTAAAATGTCTATTTTTGTC	<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:47:720:789	147	chr1	1455	90	35M	=	1278	-212	TCCTCAATGTTAAAATGTCTATTTTTGTCTTGACA	/)040<.878<<<<;8<;<9<9;<<<<<<<<<<93	MF:i:18	Aq:i:25	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:102:511:946	147	chr1	1461	26	35M	=	1291	-205	ATGTAAAAGTGACTGTTATTGTCTTGACACCCAAC	<%-4:6<:/&46;/*;<*84<0<'<&*<2<<<<<<	MF:i:130	Aq:i:26	NM:i:5	UQ:i:78	H0:i:0	H1:i:0
+EAS112_34:8:103:812:255	147	chr1	1461	99	35M	=	1272	-224	ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC	7:777:7<<::7<7<7<<:7<7<:<<<<<<<<<7<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:179:735:569	83	chr1	1461	99	35M	=	1286	-210	ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC	<5<3:<<<<5;8<<<55;<:</:<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:52:1779:1664	147	chr1	1462	99	35M	=	1297	-200	TGTTAAAATGTCTATTTTTGTCTTGACACCCAACT	6;;:;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:5:153:543:671	147	chr1	1465	99	35M	=	1301	-199	TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT	;;;;;=;==================;=========	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:38:1071:155	147	chr1	1465	99	35M	=	1274	-226	TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT	<<62<<<<<<3<<<<</<<<<<<<%<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:67:1864:477	83	chr1	1465	99	35M	=	1270	-230	TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:14:1256:204	147	chr1	1467	99	35M	=	1288	-214	AAATGTCTATTTTTGTCTTGACACCCAACTAATAT	66777:;;37;;:;;0;:;;;;):;;:7;;;;;;;	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:316:176:543	147	chr1	1469	99	35M	=	1305	-199	ATGTCTATTTTTGTCTTGACACCCAACTAATATTT	<<)/3<<<&<*<<0<<8<<82</5<<<<<88<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:8:36:688:722	147	chr1	1469	99	35M	=	1295	-209	ATGTCTATTTTTGTCTTGACACCCAACTAATATTT	<;;<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:11:706:1030	147	chr1	1469	92	35M	=	1306	-198	ATGTCTATTTTTGTCTTGACACCCAACTAATATTT	+<5069+9<<<<+<;<<<<;<<77<7<<;<<;<<<	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:289:132:526	147	chr1	1472	99	36M	=	1289	-219	TCTATTTTTGTCTTGACACCCAACTAATATTTGTCT	;<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:50:950:562	147	chr1	1473	99	35M	=	1301	-207	CTATTTTTGTCTTGACACCCTACTAATATTTGTCT	<<3<<<8<;<<<<<<+<<8<&<<<<7<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS188_4:5:8:377:655	147	chr1	1473	99	35M	=	1299	-209	CTATTTTTGTCTTGACACCCAACTAATATTTGTCT	;<8;;:<;<<:<;<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:322:631:245	83	chr1	1474	99	36M	=	1297	-213	TATTTTTGTCTTGACACCCAACTAATATTTGTCTGA	<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:33:1193:664	83	chr1	1474	99	40M	=	1301	-213	TATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAA	;;;;;;<;;-9<<<:</+9<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:253:59:242	147	chr1	1478	99	35M	=	1302	-211	TTTGTCTTGACACCCAACTAATATTTGTCTGAGCA	<<<:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:42:1223:1087	147	chr1	1479	99	35M	=	1293	-221	TTGTCTTGACACCCAACTAATATTTGTCTGAGCAA	;:<<<:<7<<<;;<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:90:1403:1635	147	chr1	1480	99	35M	=	1311	-204	TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA	86878;;;8;788;;;;;;;;;;;;;8;5;;;;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:7:92:288:1354	83	chr1	1480	99	40M	=	1321	-199	TGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGT	::::;;;<<<<9;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:63:1265:820	147	chr1	1480	99	35M	=	1320	-195	TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA	<<<<<<3<<1<<<<<<<7<<<<<<<<<<<<<<<+<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:102:884:63	83	chr1	1481	99	35M	=	1341	-175	GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA	<;7;;<<8<;8;<<<8<<<<<<8<<<8;<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:50:1339:1154	83	chr1	1481	99	35M	=	1305	-211	GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA	7;7;8;<5<:86<<;<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:30:117:411	83	chr1	1482	99	36M	=	1309	-209	TCTTGACACCCAACTAATATTTGTCTGAGCAAAACA	;88<<<<<:<7<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:150:508:757	83	chr1	1483	99	35M	=	1336	-182	CTTGACACCCAACTAATATTTGTCTGAGCAAAACA	6;;;<8<6;8<<8<<<<<;<<<<;<<<<;<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:5:6:1067:91	83	chr1	1483	99	35M	=	1325	-193	CTTGACACCCAACTAATATTTGTCTGAGCAAAACA	3<;<<:;9;<<7;;<;<<<;<<<;<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:71:85:629	83	chr1	1484	99	35M	=	1324	-195	TTGACACCCAACTAATATTTGTCTGAGCAAAACAG	,,1<1<7&%<9+:<<9<<9<<<<<<<<5<<<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:319:165:698	147	chr1	1485	99	35M	=	1287	-233	TGACACCCAACTAATATTTGTCTGAGCAAAACAGT	;5;2;<:;<<:<<<<<<<<<;:;<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:8:60:182:718	83	chr1	1485	99	35M	=	1295	-225	TGACACCCAACTAATATTTGTCTGAGCAAAACAGT	<<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:82:932:400	147	chr1	1486	97	35M	=	1313	-208	GACACCCAACTAATATTTGTCTGAGCAAAACAGTC	<<;<<72<<7<<<<<<<<<<;<<<+7<<<<<<<<<	MF:i:18	Aq:i:25	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:23:502:103	83	chr1	1486	99	35M	=	1294	-227	GACACCCAACTAATATTTGTCTGAGCAAAACAGTC	4:386:6<:::<:<:4:+<::4<<<6<<<<<<<66	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:139:331:63	147	chr1	1486	99	35M	=	1327	-194	GACACCCAACTAATATTTGTCTGAGCAAAACAGTC	7===================:=:============	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:53:156:845	147	chr1	1487	99	35M	=	1311	-211	ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT	171(*00,0;;&;7=77=;5;;(;1:=5=======	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:47:471:858	83	chr1	1487	99	35M	=	1335	-187	ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT	/;9<<63<<<<3<;<<<<<<<<<<<<<<<<<<<9<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:9:203:653	83	chr1	1488	99	35M	=	1296	-227	CACCCAACTAATATTTGTCTGAGCAAAACAGTCTA	37))&<8<<<<<7<4<;<777<<:<<<<<<<<;<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:1:199:760:42	83	chr1	1489	24	35M	=	1318	-206	ACCCAATTAATATTTTTCTTAGCAAAACAGTCTAG	58*5.<+<<<<,4<<**<90**9<<<<<<4<<<<<	MF:i:18	Aq:i:24	NM:i:3	UQ:i:34	H0:i:0	H1:i:0
+EAS218_1:4:37:1626:862	83	chr1	1489	99	35M	=	1321	-203	ACCCAACTAATATTTGTCTGAGCAAAACAGTCTAG	:663<<3<<<<<<<<<<:<<<<7<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:191:948:257	83	chr1	1493	99	35M	=	1325	-203	AACTAATATTTGTCTGAGCAAAACAGTCTAGATGA	:;;;;<<<<<<5<5<<<<<<<<7<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:171:343:758	147	chr1	1494	99	36M	=	1331	-199	ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGA	:+;;<<<<<;<;:<<<;;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:9:1595:1826	147	chr1	1494	99	35M	=	1316	-213	ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAG	;76;;6:9<9<963;<<7<<<<<<<;<;<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:6:7:1547:1933	83	chr1	1497	99	35M	=	1308	-224	AATATTTGACTGAGCAAAACAGTCTAGATGAGAGA	<<<<<<<<-<<<<<:<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS51_64:3:67:782:132	147	chr1	1498	99	35M	=	1343	-190	ATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAG	;;<;;;<<;;<<<;<<<;<<<;<<<<<<<<<<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:249:986:224	147	chr1	1499	99	35M	=	1325	-209	TATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGA	<<<3<;<;;<<;8<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:61:702:720	83	chr1	1500	99	35M	=	1320	-215	ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA	<<<4<4+0;<<:<<<<<<<<-<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:113:43:634	83	chr1	1500	99	35M	=	1340	-195	ATTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAA	;9;1;<5:<<<%<<<<;<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS56_53:7:22:22:934	83	chr1	1500	99	35M	=	1332	-203	ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA	<+72::72<<60<<<<<<<96<<<<0<<<<1<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:36:678:316	147	chr1	1500	99	35M	=	1328	-207	ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA	<<72.2,;;<)6<<<<:<<;;<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:102:825:507	83	chr1	1501	99	35M	=	1330	-206	TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC	<05<<<<<<<7<<<<<<<<<<<<<7<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:261:504:780	83	chr1	1501	99	35M	=	1337	-199	TTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAAC	80;8(;0==8+====;==49===============	MF:i:18	Aq:i:43	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS51_78:7:270:448:491	147	chr1	1501	99	35M	=	1313	-223	TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC	7;;;;+2;<<+<<<<<<<<7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:51:506:878	83	chr1	1501	99	36M	=	1314	-223	TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACT	<970;49;<;+<<<:<<<;;<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:73:936:1509	83	chr1	1502	99	40M	=	1322	-220	TTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT	99;66:<<;-<<<<:<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:2:41:576:1016	83	chr1	1503	99	35M	=	1320	-218	TGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTT	:<;<<<<<6<<<<;<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:123:610:472	147	chr1	1504	99	35M	=	1333	-206	GTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTC	:<::+<<9<<9<<<<=<<<<<=<<<<<<<<?<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:5:308:354:124	147	chr1	1507	99	35M	=	1331	-211	TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT	%+<)2<<<<<<<<8<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:11:1274:1230	83	chr1	1507	99	35M	=	1327	-215	TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT	.<<<<<<<<<<<<<<<<5<<<<<<<<<<5<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:169:292:652	147	chr1	1510	99	35M	=	1306	-239	GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA	79919-<-<<<<<<<<<<<<<<<<<<<6<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:18:376:416	83	chr1	1510	99	35M	=	1326	-219	GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA	70<<<<<<<7<7<<<2<<<<<<<<<<8<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:194:168:684	147	chr1	1512	99	36M	=	1340	-208	AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT	;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:73:273:488	83	chr1	1512	99	35M	=	1318	-229	AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGG	</<<:<<9;;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:324:515:230	83	chr1	1512	99	34M	=	1339	-207	AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAG	7<<1<<<7<+<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:1:209:345:87	83	chr1	1513	99	35M	=	1360	-188	AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT	<<;<<<<5<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:73:42:1038	83	chr1	1513	99	35M	=	1349	-199	AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:5:209:778:588	83	chr1	1514	99	36M	=	1326	-224	AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT	;8;98;;;<3<<<<<<<<<;<<;<<<<<;<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:1:115:683:296	147	chr1	1514	99	35M	=	1320	-229	AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTC	<<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:92:213:217	147	chr1	1515	99	35M	=	1333	-217	ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT	<<<<<:<<<<<<<<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:177:562:806	147	chr1	1515	99	35M	=	1356	-194	ACAGTGTAGATGAGAGAGACCTTCCCTGGAGGTCT	)2<9;'/:<5<<<:<<:<:&5:&<8,<<+:<&<<<	MF:i:18	Aq:i:35	NM:i:2	UQ:i:11	H0:i:0	H1:i:1
+EAS1_103:3:320:505:814	147	chr1	1515	99	35M	=	1350	-200	ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT	<2<;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:9:206:901	147	chr1	1517	99	35M	=	1344	-208	AGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGA	<<<<<<<<<<<<<.<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:71:707:568	83	chr1	1518	99	35M	=	1332	-221	GTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGAT	;9;<;<<<<<;<<<<<;<<<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:91:856:504	147	chr1	1520	99	35M	=	1366	-189	CTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGG	:::<<:<<<<<<<<<<<<<<<<<<<<<:<:<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:77:48:860	147	chr1	1521	99	35M	=	1348	-208	TAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC	;8;8;<9<9<<<<<<<<<4<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:5:16:434:204	83	chr1	1522	99	34M	=	1340	-216	AGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC	<:7:<<<<<<<<<<<9<<<+<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:43:1047:1626	83	chr1	1523	99	35M	=	1369	-189	GATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGT	<<4<<<<<<<<<<<:<<<;<<<<<:<7<<;<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:81:1723:1820	147	chr1	1524	99	35M	=	1335	-224	ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT	;6;;;<<<<<<<<<<<2<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:63:267:545	83	chr1	1524	99	35M	=	1354	-205	ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:90:406:631	83	chr1	1525	99	35M	=	1335	-225	TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTT	<<<:<:<<<-<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:14:420:712	147	chr1	1525	99	40M	=	1368	-197	TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCC	1::::<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:2:434:715	83	chr1	1527	99	35M	=	1363	-199	AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT	<<<<<<<<<:;<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:117:857:942	147	chr1	1527	99	35M	=	1372	-190	AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT	<<;<<<<<<<9<<<8<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:70:348:972	83	chr1	1528	99	35M	=	1343	-220	GAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTC	<99<-7<<7<<<87<<<)<<<<<<8<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:132:717:233	147	chr1	1529	99	35M	=	1368	-196	AGAGAACTTCCCTGGAGGTCTGATGGAGTTTCTCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS188_7:4:21:443:404	147	chr1	1529	99	35M	=	1345	-219	AGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCC	=9=9=9==:==========================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:148:286:316	83	chr1	1531	99	35M	=	1347	-219	AGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCT	;::::;9/:<9<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:85:1224:625	147	chr1	1532	99	35M	=	1331	-236	GAACTCCCCTGGAGGTCTGATGGCGTTTCTCCCTC	17;;7&-;<;<;:<6<<:;<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS221_1:8:73:108:1621	147	chr1	1532	99	35M	=	1373	-194	GAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTC	<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:73:182:444	147	chr1	1533	99	35M	=	1354	-214	AACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCG	:1<4;;::<<;<<<<;<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:152:765:744	83	chr1	1534	99	35M	=	1374	-195	ACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGT	6<;6<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:170:326:433	147	chr1	1535	99	35M	=	1367	-203	CTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTC	:44<<<<<<<<<<:6<<<<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:8:4:841:340	73	chr2	1	99	36M	*	0	0	TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAA	<<<<<<<<;<<<<<<<<;<<<<<;<;:<<<<<<<;;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:4:142:943:582	73	chr2	1	99	35M	*	0	0	TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA	<<<<<<;<<<<<<:<<;<<<<;<<<;<<<:;<<<5	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:43:859:229	153	chr2	1	66	35M	*	0	0	TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA	+37<=<.;<<7.;77<5<<0<<<;<<<27<<<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:2:286:923:549	73	chr2	2	99	35M	*	0	0	TCAAATGAACTTCTGTAATTGAAAAATTCATTTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:117:578:853	73	chr2	5	99	35M	*	0	0	AATGAACTTCTGTAATTGAAAAATTCATTTAAGAA	<;<9<<<<<;<<;<<<<<<<<<<<,<98;<;;&92	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:289:472:86	137	chr2	6	99	35M	*	0	0	ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:302:997:951	73	chr2	6	69	35M	*	0	0	ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA	<<<<<<<<<<;<<:<<52<<:;;<6<<;<:<2:9/	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:13:1729:1844	73	chr2	6	99	35M	*	0	0	ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA	<<<;;<;7<<<<4<<<<762;6<<<<<<<;6;618	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:43:239:977	137	chr2	7	99	36M	*	0	0	TGAACTTCTGTAATTGAAAAATTCATTTAAGAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;7;<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:233:191:520	73	chr2	7	99	35M	*	0	0	TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<8<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:75:555:1591	137	chr2	7	99	35M	*	0	0	TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:43:656:1866	137	chr2	7	99	35M	*	0	0	TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;:;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:100:563:301	137	chr2	8	99	35M	*	0	0	GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;8;;;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:126:526:276	137	chr2	8	84	35M	*	0	0	GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:161:366:544	137	chr2	11	99	35M	*	0	0	CTTCTGTAATTGAAAAATTCATTTAAGAAATTACA	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:326:652:890	73	chr2	12	99	35M	*	0	0	TTCTGTAATTGAAAAATTCATTTAAGAAATTACAA	<<<<<<<<<<2<<<<<<<<<<<<<<+<8:<<9998	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:238:441:727	73	chr2	16	99	35M	*	0	0	GTAATTGAAAAATTCATTTAAGAAATTACAAAATA	<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;;<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:64:507:478	137	chr2	17	99	35M	*	0	0	TAATTGAAAAATTCATTTAAGAAATTACAAAATAT	<<<<<;<<<<<<<<<<<<<<<;;;<<<;<<8;<;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:8:118:440:850	137	chr2	18	99	35M	*	0	0	AATTGAAAAATTCATTTAAGAAATTACAAAATATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<949<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:7:270:995:918	137	chr2	24	84	35M	*	0	0	AAAATTCATTTAAGAAATTACAAAATATAGTTGAA	<<<<<<<<<<<<<:<<<<<<8<8<8<<<<:<;4;4	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:305:819:245	73	chr2	25	98	35M	*	0	0	AAATTCATTTAAGAAATTACAAAATATAGTTGAAA	8<<<<8<;<<<<<;<8<<8<8<<<<8<<<899<<+	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_26:7:13:172:720	73	chr2	26	99	35M	*	0	0	AATTCATTTAAGAAATTACAAAATATAGTTGAAAG	============:3<==:====<=9=3===;==83	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_63:7:34:334:825	73	chr2	30	99	35M	*	0	0	CATTTAAGAAATTACAAAATATAGTTGAAAGCTCT	<<<<<<<<<<<<<<<<<<<<<<<<3;<<<<6<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:32:1379:738	137	chr2	33	99	35M	*	0	0	TTAAGAAATTACAAAATATAGTTGAAAGCTCTAAC	;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS139_19:5:70:318:1631	137	chr2	34	99	40M	*	0	0	TAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGA	<<<<<<;<<<<<<<<<<<<;9:<<<<<<<<<<<<<:::78	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:285:241:560	163	chr2	37	99	35M	=	200	198	GAAATTACAAAATATAGTTGAAAGCTCTAACAATA	<<<<<<<<<<;<<<<;<<<<<<<<<<<<;<;;;<.	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:168:389:889	99	chr2	37	99	36M	=	205	204	GAAATTACAAAATATAGTTGAAAGCTCTAACAATAG	<<<<<<<<<<<<<<<<<<<<;<<<<<<<;9;;<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:127:725:381	163	chr2	39	99	35M	=	209	204	AATTACAAAATATAGTTGAAAGCTCTAACAATAGA	<<<<<<<<<<<<<<<<<<<<<;<<<<;;;;;<<8:	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_93:5:66:372:343	163	chr2	40	99	35M	=	228	223	ATTACAAAATATAGTTGAAAGATCTAACAATAGAC	<<<<<<<<<<8<<<<<6<<<8&8<<<<<58<:<::	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS56_65:6:67:800:450	99	chr2	41	99	35M	=	221	215	TTACAAAATATAGTTGAAAGCTCTAACAATAGACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:90:1906:1528	163	chr2	41	99	35M	=	222	216	TTACAAAATATAGTTGAAAGCTCTAACAATAGACT	<<<<<<<<<<<<<<<:<<<:<<<<;<<<<<;:7:;	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:3:117:284:589	163	chr2	43	99	35M	=	210	202	ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA	==================================0	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:26:211:481	99	chr2	43	99	35M	=	222	214	ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA	<<<<<<<<<<<<<<<<<<<<<<<7<<<<<:<7<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:85:923:726	99	chr2	43	99	35M	=	199	191	ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA	<<<<<<<7<<<<<<<<<<<55<<<9<*<<<991<4	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:107:395:312	163	chr2	44	99	35M	=	224	215	CAAAATATAGTTGAAAGCTCTAACAATAGACTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<;<;;<:<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_597:7:5:753:806	163	chr2	45	99	35M	=	197	187	AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<7:-<;;3;;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_103:3:277:921:474	163	chr2	45	99	35M	=	241	231	AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC	<<<<<<<<<<<<<<<:<<<<<<<<<<<5<<;;;;;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_63:4:38:28:122	163	chr2	46	99	35M	=	227	216	AAATATAGTTGAAAGCTCTAACAATAGACTAAACC	<<<<<<;<<<<<<<;<<<<6<<<<<<:<<<<;;<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS221_3:8:50:1203:1094	163	chr2	46	99	35M	=	223	212	AAATATAGTTGAAAGCTCTAACAATAGACTAAACC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_591:2:223:583:968	99	chr2	47	88	36M	=	215	204	AATATAGTTGAAAGCTCTAACAATAGACTAAACCAA	<<<<<<<29<<<<4<<<<<<<<<<<7<<7<..<<47	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_39:1:28:350:895	163	chr2	48	95	35M	=	215	202	ATATAGTTGAAAGCTCTAACAATAGACTAAACCAA	<<<<<<<<;<;<<<<<<<<<;;<<;<<<<<;;<;8	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_45:7:69:1130:832	99	chr2	50	94	35M	=	231	216	ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC	;;2<;<;;<;9;<;;;;;;;7;8;;7;;;;77437	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS188_7:3:296:224:724	163	chr2	50	99	35M	=	234	219	ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC	<<<<;<<<<<<7;<<<<<6<<<06<<<<<<2(<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_595:4:319:250:718	163	chr2	52	99	35M	=	240	223	AGTTGAAAGCTCTAACAATAGACTAAACCAAGCAG	<<<<<<<<<<<;<<5<5;<851;85;)9;;8594;	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS54_73:3:203:419:243	163	chr2	54	99	35M	=	237	218	TTGAAAGCTCTAACAATAGACTAAACCAAGCAGAA	<<<<<<<<<<<<<<<9<;<8<<<;<<<;<<<4<77	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:21:1601:1666	163	chr2	56	99	40M	=	228	212	GAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAG	7<<<<<<<<:<<7<<<:<<<<<<4<<44<<914<;:5:::	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:158:943:467	163	chr2	57	99	35M	=	225	203	AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA	<<<<<;<<<<<<<<<<<<<<;;<<<<<<<<<;8<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:54:91:1232	99	chr2	57	99	35M	=	246	224	AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:29:833:612	163	chr2	58	99	35M	=	224	201	AAGCTCTAACAATAGACTAAACCAAGCAGAAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<;;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_57:1:189:503:110	163	chr2	63	79	35M	=	229	201	CTAACAATAGACTAAACCAAGCAGAAGAAAGAGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:25	H0:i:2	H1:i:0
+EAS114_28:2:114:938:216	99	chr2	63	99	36M	=	218	191	CTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_95:5:257:654:116	99	chr2	64	99	35M	=	231	202	TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT	<<<<<<<<<<<<<<<<<<<<<<;:<<<<<<<<<88	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_97:3:277:144:848	163	chr2	64	99	35M	=	228	199	TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT	<<<<<<<<<;<<<<<<<<<<<<<<<<<3<<9;;6;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_108:4:75:166:463	99	chr2	64	99	35M	=	250	221	TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<++3	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:4
+B7_610:5:102:915:87	99	chr2	65	99	35M	=	222	192	AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC	<<<<<<<<<<<<<<<<<<<<;<<<<<3<<;<<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:3	H1:i:0
+EAS54_71:3:78:855:352	163	chr2	65	99	35M	=	240	209	AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC	<<<<<<<<;<<<<<<<<<;<<<<<<<<;<;<<:<:	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:3	H1:i:0
+EAS56_57:2:206:873:186	163	chr2	66	99	35M	=	227	196	ACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;53	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_93:6:238:514:194	163	chr2	68	99	35M	=	265	232	AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<;<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_57:3:285:489:327	99	chr2	68	99	35M	=	233	200	AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS54_67:1:15:381:715	99	chr2	72	99	35M	=	237	200	GACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTT	;=====;===9==;===9;;;=4;9=====;====	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:199:818:124	99	chr2	73	99	35M	=	266	228	ACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTG	<<<<<<<<<<<<<<<<<;<<;<<;7<<<<<<9<9;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:182:1002:639	163	chr2	77	99	35M	=	246	204	AACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGA	<<<<<<<<<<<<<<<<<<<<<9-<<<<4<;<;;<;	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:3:945:2005	163	chr2	77	99	35M	=	262	220	AACCAAGCAGAAGAAAGAGGCTCAGAACTTGAAGA	<<<<<<<<<<<<<<<<<<<<%<<<<<<;<<<<<<<	MF:i:18	Aq:i:44	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+B7_591:5:254:542:848	99	chr2	79	99	36M	=	233	190	CCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAA	<<<;<<<<<<<<<<<<<<<;4<;8<<<;;9<9;8;9	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:71:517:742	99	chr2	81	99	35M	=	266	220	AAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAG	<<<<<<<<<<<<;<<<<<<<<<<<<<48:4<<<<3	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:254:617:73	163	chr2	83	99	35M	=	266	218	GCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTC	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<6;:;4%	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:13:1507:1146	99	chr2	84	99	35M	=	278	229	CAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCT	;<9;;;;<<;;;;<<;<;;;;<;;<<;<;<99777	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:32:686:735	99	chr2	84	78	35M	=	255	206	CAGAAGAAAGAGGTTCANANNNTGANGACAAGTCT	<<<<<<<<<<<<<<<<<!<!!!<<<!<<<<<<<<<	MF:i:130	Aq:i:78	NM:i:5	UQ:i:0	H0:i:0	H1:i:0
+EAS56_57:3:112:729:591	99	chr2	86	99	35M	=	283	232	GAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:17:1222:783	163	chr2	87	99	35M	=	251	199	AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCGT	<<<<<<<)<<<16<<;<<<6<4<:<4<+://<7)<	MF:i:18	Aq:i:59	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS188_7:6:46:122:479	99	chr2	87	99	35M	=	248	196	AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:313:531:169	163	chr2	89	99	36M	=	250	197	GAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATG	<<<<<<<<<<<<<;<<<<<<<<<<<:<<:<;<<;<2	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:6:148:170:895	99	chr2	91	99	35M	=	247	191	AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA	<<<<<<<<<<9<<<<<6<<<<<<<<<<<<<<<<6<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:34:380:815	163	chr2	91	99	35M	=	283	227	AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:210:809:735	163	chr2	93	99	35M	=	291	233	GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:40:925:442	163	chr2	93	99	35M	=	271	213	GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT	;<;<<<<<<<<<<<3;<7;:<;;<<<;<<:<32<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:169:256:888	163	chr2	94	99	35M	=	270	210	AGGTTCAGAACTTGAAGACAAGTCTCTTATGAATT	<<<<<<<<<<<<<<<<<<<<<<;;<;<<;<<:;;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:117:156:84	99	chr2	95	99	35M	=	285	225	GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:35:522:294	163	chr2	95	99	35M	=	272	212	GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA	===============================:=:=	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:41:653:1568	163	chr2	95	99	35M	=	266	206	GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA	;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:178:276:693	163	chr2	96	99	36M	=	259	199	GTTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:223:440:667	99	chr2	97	99	35M	=	282	220	TTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC	<<<<<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:5:194:470:416	99	chr2	98	99	35M	=	265	202	TCAGAACTTGAAGACAAGTCTCTTATGAATTAACC	<<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:61:1000:1534	163	chr2	104	99	35M	=	286	217	CTTGAAGACAAGTCTCTTATGAATTAACCCAGTCA	<<<<4:<:<1)<<<<<<<+<:44<</7<<<)4:<)	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:145:383:182	163	chr2	105	99	35M	=	291	221	TTGAAGACAAGTCTCTTATGAATTAACCCAGTCAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:63:816:921	163	chr2	106	99	35M	=	291	220	TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<4<846	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:77:1780:693	99	chr2	106	99	40M	=	276	210	TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAA	<<<<<<<<<<<<;<<:<<;<<<<<<<<<<<<;<<<;;:69	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:215:861:605	163	chr2	107	94	36M	=	262	191	NAAGACAAGTCTCTTATGAATTAACCCAGTCAGACA	!+++++++++++++++++++++++++++++++++++	MF:i:18	Aq:i:19	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+EAS221_3:2:22:1623:709	99	chr2	107	99	35M	=	287	215	GAAGACAAGTCTCTTATGAATTAACCCAGTCAGAC	<<<<<<<<<7<<<<<<<:<<<<<<<<:85:<:2<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:54:436:1452	163	chr2	108	99	35M	=	275	202	AAGACAAGTCTCTTATGAATTAACCCAGTCAGACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:42:333:516	163	chr2	109	99	35M	=	296	222	AGACAAGTCTCTTATGAATTAACCCAGTCAGACAA	<<<<<5<*<2<<<<<<<<<<<<<<<<<<<<<<<</	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:119:730:190	99	chr2	114	99	35M	=	301	222	AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA	<<<9<;;<<<;<<<<<<<8<<<1<<918<;;;<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:63:727:203	99	chr2	114	99	35M	=	278	199	AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:5:27:577:849	163	chr2	114	99	35M	=	316	237	AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA	<<<<<<<<<<<<<<<<<<<<;:<<<;<<<<<<;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:5:5:259:250	99	chr2	115	99	35M	=	269	189	GTCTCTTATGAATTAACCCAGTCAGACAAAAATAA	<<<<<<<<<<<<<<<<<<<<;<<<;5<<5<;7<::	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:17:989:186	99	chr2	120	91	35M	=	299	214	TTATGAATTAACCCAGTCAGACAAAAATAAAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<:<<;<7;::::	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS114_45:2:33:1445:1357	99	chr2	121	85	35M	=	299	213	TATGAATTAACCCAGTCAGACAAAAATAAAGAAAA	;;<;<<<<<<;;;<9:;:;;;;;:;:;;;;99777	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:7
+EAS221_3:4:30:1452:1563	163	chr2	122	94	35M	=	313	226	ATGAATTAACCAAGTCAGACAAAAATAAAGAAAAA	<<<<<<<<<<<<<<:<<<<1<<<<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_45:1:77:1000:1780	163	chr2	123	66	35M	=	279	191	TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA	;;;:;;;;;;;/;;;7:4;;7;;;;;;;;;77777	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:6	H1:i:47
+EAS114_45:4:48:310:473	99	chr2	123	66	35M	=	298	210	TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA	<<<;<<;;;<<;;<;;;;;;;;;;;;;;;;89799	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:6	H1:i:47
+B7_591:2:279:124:41	99	chr2	124	69	36M	=	307	219	GAATTAACCCAGTCAGACAAAAANNAAGAAAAAAGA	<<<<<<<7/<8<<<<<<<<<<4*!!<<7<7<<5<<3	MF:i:18	Aq:i:0	NM:i:2	UQ:i:0	H0:i:0	H1:i:0
+EAS112_32:8:89:254:332	163	chr2	124	76	35M	=	291	202	GAATTAACCCAGTCAGACAAAAATAAAGAAAAAAG	==================;=========;=7;;<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:4	H1:i:36
+B7_597:7:103:731:697	99	chr2	125	72	35M	=	304	214	AATTAACCCAGTCAGACAAAAATAAAGAAAAAAGA	<<<<<<<<<<<<<<<<<<:<:<<6<<<<<<<:<;:	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:9	H1:i:55
+EAS139_11:2:71:83:58	163	chr2	148	77	9M2I24M	=	349	236	AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:77	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS192_3:4:63:5:870	163	chr2	148	75	9M2I24M	=	330	217	AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT	<<;<<<<<<<<<<<<<<<<<;<<<<<<<<<;;<<<	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS139_19:2:29:1822:1881	163	chr2	150	74	7M2I31M	=	328	218	AGAAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAGAAG	<<<<<<<<<<<<4<<<<<<<<<<<<<<:<<<:<<;:::::	MF:i:130	Aq:i:74	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS221_3:2:100:1147:124	163	chr2	150	99	35M	=	345	230	AAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<	MF:i:18	Aq:i:29	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS192_3:8:6:104:118	163	chr2	154	99	35M	=	323	204	AAGAATTTTAAAAATGAACAGAGCTTTCAAGAAGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<=<<<<<<	MF:i:18	Aq:i:27	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_593:6:185:96:948	99	chr2	160	99	36M	=	324	200	TTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT	<<<<<<<<<;6<<<<<<<<<;<<<;;<<<<<<<;<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:7:213:309:373	163	chr2	161	99	35M	=	317	191	TTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT	<;<<<<<<;<7<<<<<-<<<<<<<<<<<<<<4<7<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:2:30:466:652	99	chr2	163	98	35M	=	332	204	AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA	<<<<<<<<<<<<<<<<<<<<<<<<;<<<4;7<<<7	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:156:21:69	163	chr2	163	99	35M	=	362	234	AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA	<<<<<<<<<<<<<<<<<<<<<<<:<4<<<:<;<;;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:197:52:58	163	chr2	165	99	35M	=	323	193	AAATGAACAGAGCTTTCAAGAAGTATGAGATTATG	<<<<<<<<<<<<<<<<<<9<<<<2<<<<<<;<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:214:946:229	163	chr2	165	99	35M	=	339	209	AAATGAACAGAGCTTTCAAGAAGTATGATATTATG	<<<<<<<<<<<<<<<<<::<;;;<;<;7<:<<7<2	MF:i:18	Aq:i:65	NM:i:1	UQ:i:27	H0:i:1	H1:i:0
+EAS192_3:4:293:168:240	99	chr2	167	99	35M	=	340	208	ATGAACAGAGCTTTCAAGAAGTATGAGATTATGTA	<<<<;<<<;;;<;<<;;;<<;;<<::::<<;;+;7	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:208:118:673	99	chr2	169	76	35M	=	332	198	GAACAGAGCTTTCAAGAAGTATGAGATTATGTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:3:71:478:175	163	chr2	171	99	35M	=	317	181	ACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGT	<<<<<<<<<<<;<<<<<;<<<<<<<<<<;<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:5:177:24:389	163	chr2	175	99	35M	=	365	225	AGCTTTCAAGAAGTATGAGATTATGTAAAGTAACT	<<<<<<<<<<<<<<<<<<<<<<<<7<;;<;9969;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:14:1211:1332	163	chr2	178	99	35M	=	351	208	TTTCAAGAAGTATGAGATTATGTAAAGTAACTGAA	;;.;;;;;;;3;;;;;6;;;;;;8;;;;;;63777	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:324:238:736	163	chr2	180	99	35M	=	367	222	TCAAGAAGTATGAGATTATGTAAAGTAACTGAACC	===================================	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:9:648:712	99	chr2	182	99	35M	=	358	211	AAGAAGTATGAGATTATGTAAAGTAACTGAACCTA	<9<;<<<<<<<;<<<<<8<<<<9<<;<<8)<:1<:	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:41:1308:619	163	chr2	184	99	35M	=	360	211	GAAGTATGAGATTATGTAAAGTAACTGAACCTATG	<6+<*<<<<<<<:<<<<<<<:<<&<<<<1<6<11:	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:328:537:640	99	chr2	185	99	35M	=	352	202	AAGTATGAGATTATGTAAAGTAACTGAACCTATGA	<;<<<<<<;<<<<<<<<<:;<<8<<<;:<<<;<;9	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:86:697:941	163	chr2	187	99	35M	=	341	189	GTATGAGATTATGTAAAGTAACTGAACCTATGAGT	=====================<=<==<<====;=5	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:224:592:744	99	chr2	188	99	35M	=	383	230	TATGAGATTATGTAAAGTAACTGAACCTATGAGTC	<<<<<<<<<<<<<<<<;<<<<<7<<<<<<<&<*<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:135:354:66	99	chr2	188	99	35M	=	356	203	TATGAGATTATGTAAAGTAACTGAACCTATGAGTC	<<<<<<<<<<<<<<<<;<<<<<<<<<<;<<2<;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:71:311:202	163	chr2	188	99	35M	=	379	226	TATGAGATTATGTAAAGTAACTGAACCTATGAGTC	<<<<<<<<<<<<<<<<:4<<<<<<<<<<<<8;4;:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:50:30:15	99	chr2	192	39	35M	=	358	201	AGATTATGTAAAGTAACTTAACCTATGAGTCCAAG	+:79.68872.:9&:92/.299169/5+/6/3/&2	MF:i:18	Aq:i:10	NM:i:3	UQ:i:45	H0:i:0	H1:i:1
+EAS192_3:5:287:334:110	73	chr2	196	73	35M	=	196	0	TATGTAAAGTAACTGAACCTATGAGTCACAGGTAT	<<<<<<<<<<<<<<<<<<4;<<<<<<<::6<55:.	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:5:287:334:110	133	chr2	196	0	*	=	196	0	GATGAATACTAAGATTGATGTAGCAGCTTTTGCAA	.5+7)09<))&-&:33953<-./&&&)((;+3399	MF:i:192
+B7_597:7:5:753:806	83	chr2	197	99	35M	=	45	-187	ATGTAAAGTAACTGAACCTATGAGTCACAGGTATT	;:<:<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:149:572:877	163	chr2	197	99	36M	=	334	173	ATGTAAAGTAACTGAACCTATGAGTCACAGGTATTC	=>7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:85:923:726	147	chr2	199	99	35M	=	43	-191	GTAAAGTAACTGAACCTATGAGTCACAGGTATTCC	<:<<<%3<<1<<86<<-<<<<<<<<<<<<6<<1<<	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:285:241:560	83	chr2	200	99	35M	=	37	-198	TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT	:<<<<;<<,<<<<5<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:41:461:436	163	chr2	200	74	35M	=	389	224	TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT	<<<<<<<<<<<<<<<<<<<:<<<<<<<<;<;;;:;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:6:25:949:33	99	chr2	201	99	35M	=	383	217	AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG	=;===/8========*==&;6=&=&:=6&:=::67	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:60:590:1760	99	chr2	201	99	35M	=	376	210	AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG	<:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:86:693:234	163	chr2	202	82	35M	=	388	221	AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA	;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:4:223:776	163	chr2	203	93	35M	=	387	219	AGTAACTGAACCTATGAGTCACAGGTATTCCTGAG	<<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;<;2<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:3:88:84:1558	99	chr2	203	95	35M	=	394	226	AGTAACTGAACCTATGAGTCACAGGTATTCCTGTG	<<;<<<<<<<<<<<<;;<<<<<<<::<<<<<<7&<	MF:i:18	Aq:i:22	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+B7_597:2:168:829:88	163	chr2	205	99	35M	=	369	199	TAACTGAACCTATGAGTCACAGGTATTCCTGAGGA	<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<9;4;2	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:168:389:889	147	chr2	205	99	36M	=	37	-204	TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA	;<<;;56;==================8========8	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:5:81:685:141	99	chr2	207	85	34M	=	382	210	ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA	<<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:26:1312:1400	99	chr2	207	99	40M	=	385	218	ACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA	<<<<;<<<:<<:<;<:<<<;:;<<<<<<:<8<1;;:::88	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:127:725:381	83	chr2	209	99	34M	=	39	-204	TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA	+<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:19:736:559	99	chr2	209	99	35M	=	370	196	TGAACCTATGAGTCACAGGTATTCCTGAGGAAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:3:117:284:589	83	chr2	210	99	35M	=	43	-202	GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG	==8==;==================;==========	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:5:120:596:847	163	chr2	211	83	35M	=	410	234	AACCTATGAGTCACAGGTATTCCTGAGGAAAAAGA	<<<<<<<<<<<<<;<<<9<<<<<<<;:<62;58;2	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_610:5:51:904:391	163	chr2	212	97	35M	=	401	224	ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA	<<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:96:1314:1448	163	chr2	213	93	35M	=	388	210	CCTATGAGTCACAGGTATTCCTGAGGAAAAATAAA	<<<<<<<<<<<<<<<<<<<<<<<<5<4<<<<-<<<	MF:i:18	Aq:i:18	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS139_19:3:73:1158:535	163	chr2	213	99	40M	=	377	204	CCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTG	<<<<<<<<<<<<<<<<<<<<<<8<;;<<<<<9<<9::8:8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:223:583:968	147	chr2	215	88	36M	=	47	-204	TATGAGGCACAGGTATTCCTGAGGAAAAAGAAAAAG	1<';<<&%-:<<<<<:66%<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_97:3:160:173:889	163	chr2	215	99	35M	=	379	199	TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA	<<<<<<<<<<<<<<<<<<<<;0<7<<;<<<;7<09	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:28:350:895	83	chr2	215	95	35M	=	48	-202	TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA	:<;<<<:;<-<<<<<4;77<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:4:45:707:147	163	chr2	216	99	35M	=	424	243	ATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAG	<<<<<<<<<<<<&<<<<:<<9<<<9<<<<75;;;<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:18:1757:95	99	chr2	216	45	35M	=	374	193	ATGAGTCGCAGGTATTCCTGAGGAAAAAGAAAAAG	<<<<<<<<<<<<<<<<<<<1<:<<<<<<:<<<;:<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS51_66:6:310:747:415	163	chr2	217	99	35M	=	387	205	TGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGT	<<<<<<<<<<<<<<<<<<:<<<<<;<<<<<;<;<;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:114:938:216	147	chr2	218	99	36M	=	63	-191	GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA	<<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:179:629:513	163	chr2	220	99	35M	=	409	224	GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG	<<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<;<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:88:55:1187	99	chr2	220	66	35M	=	391	206	GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG	;;<;;;<<99<<;;<;;;;;:;49;:;;;;87898	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:119:38:945	99	chr2	221	99	35M	=	428	242	TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA	<<<<<<<<<<<<<<<8<<<<<8<<<8<;<<7<:<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:67:800:450	147	chr2	221	99	35M	=	41	-215	TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA	9-<9<;<<<<9;5<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:5:102:915:87	147	chr2	222	99	35M	=	65	-192	CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA	;<8<;;<<<<7;<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:113:367:659	163	chr2	222	72	35M	=	390	203	CACAGGTATTCCTGAGGAAAAAGAAAAAGCGAGAA	=9====8==========:=:=====9=:=&====5	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS218_1:2:26:211:481	147	chr2	222	99	35M	=	43	-214	CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA	:<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:90:1906:1528	83	chr2	222	99	35M	=	41	-216	CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA	:<<<<<<<<<3:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:13:100:876	163	chr2	223	73	36M	=	397	210	ACAGGGATTCCTGAGGAAAAAGAAAAAGTGAGAAGT	<8<<<*<2<7<<<6<<<<<<6<<8<<<<5<<<<4<9	MF:i:18	Aq:i:30	NM:i:1	UQ:i:9	H0:i:0	H1:i:1
+EAS56_63:5:117:570:971	163	chr2	223	99	35M	=	413	225	ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG	<<<<<<<<<<<<<;;;<<<<6<7;9;<:;<;<;;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:50:1203:1094	83	chr2	223	99	35M	=	46	-212	ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG	<7<<<<<5:+63<<<<<<<<<<<<<<<<2<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:107:395:312	83	chr2	224	99	35M	=	44	-215	CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT	;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:29:833:612	83	chr2	224	99	35M	=	58	-201	CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT	<<;<<<;<::<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:158:943:467	83	chr2	225	99	35M	=	57	-203	AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT	<:<<;;<:5<<<<<<<<<<<<<<<<<<;<<<;<<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:201:768:529	163	chr2	225	99	35M	=	396	206	AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT	==========================1=======;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:11:994:584	99	chr2	226	97	35M	=	417	226	GGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTT	<<<<<<<<<<<7<<<<<<<<<<<<<6<<<<<<3<6	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:206:873:186	83	chr2	227	99	35M	=	66	-196	GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG	;<<;--7<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:4:38:28:122	83	chr2	227	99	35M	=	46	-216	GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG	;9;9;-1<<<<<<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:66:372:343	83	chr2	228	99	35M	=	40	-223	TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG	;<1;89<<<<<;<9<<<<9<<<;8<9<;<<<<<;8	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:3:277:144:848	83	chr2	228	99	35M	=	64	-199	TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG	<<<)63<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:21:1601:1666	83	chr2	228	99	40M	=	56	-212	TATTACTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA	-;;3&1<<<<<<<<<<<<1<<<</<<<<<</<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS56_57:1:189:503:110	83	chr2	229	79	35M	=	63	-201	ATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGA	=;;6:==============================	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:5:257:654:116	147	chr2	231	99	35M	=	64	-202	TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA	0+37<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:69:1130:832	147	chr2	231	94	35M	=	50	-216	TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA	6)377;3;;;;;;;;;1;;;;;;;;;;;;;;;;;;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:254:542:848	147	chr2	233	99	36M	=	79	-190	CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC	,:4<8<<<<<<<<<<<<<;:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:285:489:327	147	chr2	233	99	35M	=	68	-200	CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA	9;;<<8<<<<<<<<<<<<;<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:163:611:211	163	chr2	234	99	35M	=	405	206	TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC	============8===============;=6;;<;	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:296:224:724	83	chr2	234	99	35M	=	50	-219	TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC	8<<<5<<<<<<<<<<<<<<<<<<<<7<<<<<;<9<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:58:271:612	99	chr2	236	99	35M	=	415	214	AGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTA	<;<<<<<<<<<7<<<<<<<<<<<<<<+47<<;<::	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:15:381:715	147	chr2	237	99	35M	=	72	-200	GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT	<<<<<<<<<<<<<<9<<<<<<97;<<<<<<<<9<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:203:419:243	83	chr2	237	99	35M	=	54	-218	GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:41:1281:1785	99	chr2	237	99	35M	=	399	197	GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT	<<<<<<<<<<<<<<<<<<<<<;<<<;<<<<<<<8<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:218:858:445	99	chr2	239	99	35M	=	421	217	AAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT	;===5=;=======;==3======9;,79==;===	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:4:319:250:718	83	chr2	240	99	35M	=	52	-223	AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG	<;:<<<<;<<<:<<<<<<49:<<<<<<<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:7:92:493:891	99	chr2	240	99	35M	=	408	203	AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG	<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<8	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:78:855:352	83	chr2	240	99	34M	=	65	-209	AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT	2<<<<<<<9<<4<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:277:921:474	83	chr2	241	99	35M	=	45	-231	AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:41:199:388	99	chr2	243	99	35M	=	403	195	AGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGG	;;<<<<<;;<<<<<<;;<;;<<;;<<<<<<99999	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:307:481:625	99	chr2	245	99	36M	=	410	201	AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:134:126:465	99	chr2	245	99	35M	=	434	224	AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA	<<<<<<<<<<<<<;<<<<<<<<<<<<<5<<:<<41	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:44:153:969	163	chr2	245	95	35M	=	447	237	AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA	*:::7<77<:<<<<:<<(597:<:<9//7<529/0	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:182:1002:639	83	chr2	246	99	35M	=	77	-204	AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG	<<;;9;9<<<<<<;<7;<;<<<<;;<<<;<<7;<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:54:91:1232	147	chr2	246	99	35M	=	57	-224	AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG	;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:204:737:61	163	chr2	247	99	35M	=	437	225	AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT	<<<<<<<<<<<<<<<<<<<<<<<<<:<<9<+4:<0	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:6:148:170:895	147	chr2	247	99	35M	=	91	-191	AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT	<<9<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:46:122:479	147	chr2	248	99	35M	=	87	-196	AAGTGAGAAGTTTGGAAGAACTATTTGAGGAAGTA	<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS219_1:7:16:1343:1621	99	chr2	248	99	35M	=	426	213	AAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTA	<<<<<<<<8<<<<;<<<;<;<<<<<<<:;4;71:;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:313:531:169	83	chr2	250	99	36M	=	89	-197	GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT	98;<;;<<;8<<<<<<<<<<<8<<<<<<<<8<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:75:166:463	147	chr2	250	99	35M	=	64	-221	GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT	<<<<<==============================	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:130:260:553	99	chr2	250	99	34M	=	439	224	GTGAGAAGTTTGGAAAAACTATTTGAGGAAGCAC	<<<<<1<<<<<<<<<<6<<81</<4*2;7:+90(	MF:i:18	Aq:i:42	NM:i:2	UQ:i:31	H0:i:1	H1:i:0
+EAS56_59:2:60:677:921	99	chr2	250	96	35M	=	393	178	GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:60:1037:1146	99	chr2	250	99	35M	=	447	232	GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT	<<<<<<<<<<<<<<<<<<<<<<<<<;<:;;;;;;<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:17:1222:783	83	chr2	251	99	35M	=	87	-199	TGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT	6<<<8<69<8199<7<<<6<<<<<<<<<1:<:<<:	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:96:491:1891	163	chr2	253	99	35M	=	409	191	AGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGG	<:<<<<<::<<<<<<<<<<<<<<<<:<<::7<<:7	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:75:615:555	99	chr2	255	99	35M	=	416	196	AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG	<<<<<<<<<<<<<<<<<<<<<;<;<<<29<;.484	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:32:686:735	147	chr2	255	78	35M	=	84	-206	AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG	<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:65:85:1547	163	chr2	257	99	35M	=	434	212	GTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAA	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<:<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:94:1655:1921	99	chr2	258	85	35M	=	447	224	TTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAA	<<<8<<<<<<<<<8<<8;8<;<;<;;<<9+868<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_610:7:177:469:800	99	chr2	259	99	35M	=	433	209	TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA	<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<<;<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:178:276:693	83	chr2	259	99	36M	=	96	-199	TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAAC	:;<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:14:697:541	99	chr2	259	99	35M	=	432	208	TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA	<<<<<<<<<<<<<<<<<<<:<<<<<<<;;;;8;;<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:37:156:134	163	chr2	261	99	35M	=	443	217	GGAAAAACTATTTGAGGAAGTAATTGGGGAAAACC	;;;;;;;;;;9;;;;;;;;;;;;;;;9;;;77679	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:215:861:605	83	chr2	262	94	36M	=	107	-191	GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC	;<<<<<;:<7:<<<;<<<<<<<;:<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:3:945:2005	83	chr2	262	99	35M	=	77	-220	GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCT	7<<<<;;<<;<<<<<7<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:52:751:360	163	chr2	263	99	35M	=	443	215	AAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC	<<<<<<<<<<<<<<<<<<<<<<<:76<<<<;9:;:	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:238:514:194	83	chr2	265	99	35M	=	68	-232	AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT	<<6<<<<:9<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:5:194:470:416	147	chr2	265	99	35M	=	98	-202	AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT	<<<7<<;<<<<<<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:71:517:742	147	chr2	266	99	35M	=	81	-220	AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT	<<<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:254:617:73	83	chr2	266	99	35M	=	83	-218	AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT	<<:<<<9;<<<;;<:<-<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:199:818:124	147	chr2	266	99	35M	=	73	-228	AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:41:653:1568	83	chr2	266	99	35M	=	95	-206	AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT	977979;:;<;;;;;;<<5;<;<;<<<;;;;;;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:211:84:84	99	chr2	268	99	35M	=	440	207	CTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAG	<<<<<<<<<<<<<<<<:<<:<<:<<<44<4<<9<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:2:152:355:962	163	chr2	269	99	35M	=	456	222	TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	<;<<<<<;8<<<<<<<<<;5;;88<<3<<<<<&0;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:285:395:450	99	chr2	269	99	35M	=	458	224	TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	<<<<<<<;<<<;<<<<<;:<:7<;<;7<7<<;;7<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:15:568:42	121	chr2	269	69	35M	=	269	0	TTTTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	!!;:<8<;<<<8<<<<<<<<8<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:2	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:15:568:42	181	chr2	269	0	*	=	269	0	TTTTTTTTTTTGTTTTTTTTTTTTTTTTTTTTATA	!!!!!!!!!++++!!!!!!!!!!!!!!!!!!!,!,	MF:i:192
+EAS192_3:8:6:237:885	99	chr2	269	99	35M	=	433	199	TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<;;;<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:5:5:259:250	147	chr2	269	99	35M	=	115	-189	TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	8<83;<<<<<<<<<<5<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:206:994:556	73	chr2	270	75	35M	=	270	0	ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<<;<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:206:994:556	133	chr2	270	0	*	=	270	0	NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	MF:i:192
+EAS54_71:4:169:256:888	83	chr2	270	99	34M	=	94	-210	ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT	&<<:<;<<;;<8<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:317:72:221	163	chr2	270	99	35M	=	422	187	ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC	===========;=======;;:==6=;=====;==	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:40:925:442	83	chr2	271	99	35M	=	93	-213	TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT	=;=================================	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:158:909:321	163	chr2	271	99	35M	=	453	217	TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:35:522:294	83	chr2	272	99	35M	=	95	-212	TTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:176:971:874	163	chr2	273	76	35M	=	432	195	TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG	<<<<<<<<<<<<<:<;<<<<<<<<<<<<<5<<<<7	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:226:869:36	99	chr2	273	99	35M	=	461	223	TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG	:<<<<,:<;:.:<<:<<717,;2171717717116	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:106:595:322	163	chr2	274	99	35M	=	440	201	GAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<::	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:54:436:1452	83	chr2	275	99	35M	=	108	-202	AGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:77:1780:693	147	chr2	276	99	40M	=	106	-210	GGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGAT	:**::799<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:3:147:423:584	99	chr2	277	99	35M	=	451	209	GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;96	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:2:188:782:483	163	chr2	277	99	35M	=	431	189	GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<7<;77	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:78:1314:1275	99	chr2	277	99	35M	=	469	227	GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG	<<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<<<8	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:63:727:203	147	chr2	278	99	35M	=	114	-199	AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA	<<;7<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:13:1507:1146	147	chr2	278	99	35M	=	84	-229	AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA	88788;,;:-:2;;;;;;;;:;:;;;;;;;;;;;;	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:77:1000:1780	83	chr2	279	66	35M	=	123	-191	AGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAG	777774;;4-7;;;;;;:;;;:;;;<;;;;<<<<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:93:490:901	163	chr2	280	99	35M	=	445	200	GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA	<<<<<<<<<<<<<;<<<<<<<;<<<<<:<<1+4-8	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:227:657:95	99	chr2	280	99	35M	=	458	213	GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<85	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:57:324:546	163	chr2	281	99	36M	=	458	213	TAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT	<<<<<<<<<<<<<<<<<<<<<:<<<8:8<<;::;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:223:440:667	147	chr2	282	99	35M	=	97	-220	AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT	<<;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:26:274:1078	163	chr2	282	99	40M	=	458	216	AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC	<<<2<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;:::::	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:196:511:896	163	chr2	283	99	35M	=	446	198	ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT	<<<<<<<<<<<<<<<<<<<<<<<<;<<<4<88;<<	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:112:729:591	147	chr2	283	99	35M	=	86	-232	ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT	;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:34:380:815	83	chr2	283	99	35M	=	91	-227	ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT	;;;;<<<<<<;<<<<;<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:117:156:84	147	chr2	285	99	35M	=	95	-225	TGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAG	<;;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:61:1000:1534	83	chr2	286	99	35M	=	104	-217	GGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGA	<<;<<<<;;<<;6;<<<;<4;<<7<<<<<;<<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:22:1623:709	147	chr2	287	99	35M	=	107	-215	GGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC	<'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:7:7:682:201	163	chr2	288	99	35M	=	452	199	GGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACA	<<<<<<<7<<7<<<<77&;-9<97<76<;<<993<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:91:89:666	153	chr2	289	60	35M	*	0	0	GAAAACCTCTTTAGTCTTGCTAGAGATTTAGACAT	74752;;4;;;;;;;;7);;;4;;;;)4;;;;;13	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:46:13:880	99	chr2	290	99	35M	=	445	190	AAAACCTCTTTAGTCTTGCTAGAGATTTAGACATC	<<<<<<<<<<<<<<<<<<<<;<7<3<<<9<+;;<9	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:187:715:521	163	chr2	291	99	35M	=	451	195	AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT	<<<<<<<<<<<<<<<<<<<<:<<<<<<<;<<;<;;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:210:809:735	83	chr2	291	99	35M	=	93	-233	AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:145:383:182	83	chr2	291	99	35M	=	105	-221	AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT	<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:8:89:254:332	83	chr2	291	76	35M	=	124	-202	AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT	<<<<<<:<;<<<<<<<<9<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:63:816:921	83	chr2	291	99	35M	=	106	-220	AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT	<<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:280:662:939	99	chr2	294	99	35M	=	442	183	CCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAA	<<<<<<<<<<<<<;<<<;;7<<<<<<<<<<<<:8<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:250:628:423	163	chr2	295	99	36M	=	489	230	CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG	<<<<<<<<<<<<<<<<<<:;<<<<:<<<<;;;;;;4	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:4:255:549:422	163	chr2	295	99	35M	=	456	196	CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT	<<<<<<<<<<<<<<<<;<<<<<<<:<<<<<<;;;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:2:491:1886	89	chr2	295	75	35M	*	0	0	CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT	<<:<8:<<<:<<<<<<<<<<<9<<<<<<<<<<<<:	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:267:821:860	163	chr2	296	99	35M	=	451	189	TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG	;<<<<<8<<<<<8<<;<8<<<<<5<;<<<<<2;<5	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:42:333:516	83	chr2	296	99	35M	=	109	-222	TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG	<<<<<<<<7<63<7<<<<<<<<<<<7<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:2:119:161:322	99	chr2	297	99	35M	=	479	217	CTTTAGTCTTGCTAGAGATTTAGACATCTAAATGA	<<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<</6	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:48:310:473	147	chr2	298	66	35M	=	123	-210	TTTAGTCTTGCTAGAGATTTAGACATCTAAATGAA	77999;;6;;;;;;;;;;;;;;;9;;;;;;;;;;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:159:273:253	153	chr2	299	76	35M	*	0	0	TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA	<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:181:392:500	99	chr2	299	99	35M	=	470	206	TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA	<<<<<:<<<2<<<<;5<<<<29+<<)</65<7.24	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:17:989:186	147	chr2	299	91	35M	=	120	-214	TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA	87;38$<3=/<==============9=========	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:33:1445:1357	147	chr2	299	85	35M	=	121	-213	TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA	88888;;;;;;;:;;;;;;;:;9;;;;;;;;;;;;	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:119:730:190	147	chr2	301	99	35M	=	114	-222	AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGA	;;;3;<<:<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:62:969:12	99	chr2	303	99	35M	=	464	196	TCTTGCTAGAGATTTAGACATCTAAATGAAAGAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:103:731:697	147	chr2	304	72	35M	=	125	-214	CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC	:::;3:<<<<<<<:<<<<<<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:111:142:21	163	chr2	304	99	35M	=	479	210	CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC	<<<<<<<<:<:<<<<<<<<<<<<<<<<<<<<;<;9	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:7:319:280:57	99	chr2	306	99	35M	=	467	196	TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC	;==========;=====6;=========;=<;6;;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:76:205:587	163	chr2	306	99	35M	=	483	212	TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:279:124:41	147	chr2	307	69	36M	=	124	-219	GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA	:17<8<<<:&<<<<<<:;'<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:10:349:1147	153	chr2	307	74	40M	*	0	0	GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA	:/:::<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:16	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:22:490:2011	99	chr2	307	99	35M	=	485	213	GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:46:173:214	163	chr2	308	99	35M	=	487	214	CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA	<<<<<<<<<<<<<<<<<<<<<<<<<;<3<<<<<<;	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:283:577:398	99	chr2	308	99	35M	=	488	215	CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA	<<<<<<<<<<<<<<<<<<<9<<<<<<<<<;<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:27:280:592	99	chr2	310	99	36M	=	484	210	AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGA	<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<5<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:3:11:1238:1728	163	chr2	310	99	35M	=	475	200	AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAG	<<7<<<<<;<<<<<<<<<<<<;<<<;<<<<<<;;<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:118:121:760	89	chr2	311	77	36M	*	0	0	GAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA	:<<<;;<<<<6<;<<<;<<<<;<<<<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:7:318:679:883	153	chr2	313	75	35M	*	0	0	GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT	<<;4<<;<:<<7<<<<<<<<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:30:1452:1563	83	chr2	313	94	35M	=	122	-226	GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT	<<39<<<59<<:<<+<<<6<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:189:130:136	99	chr2	314	79	35M	=	494	215	ATTTAGACATCTAAATGAAAGAGGCTCAAAGAATG	==<<=================<<====<<=;=6==	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:5:27:577:849	83	chr2	316	99	35M	=	114	-237	TTAGACATCTAAATGAAAGAGGCTCAAAGAATGCC	5:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:3:71:478:175	83	chr2	317	99	35M	=	171	-181	TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA	<<<<;<96<<<<;<<<<<<<<<77<<<<<<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:38:999:463	99	chr2	317	39	35M	=	503	221	TAGACATCTAAATGAAAGNNGCNNNAAGAATGCCA	7<<<<<<<<:07<<:<<7!!<<!!!::<88<<<<4	MF:i:130	Aq:i:39	NM:i:5	UQ:i:0	H0:i:0	H1:i:0
+EAS54_71:8:215:830:609	89	chr2	317	71	33M	*	0	0	AAGACATCTAAATGAAAGAGGCTCAAAGAATGC	+<)<:<<:<<<<<<<<<9<<<<<;<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:1	UQ:i:11	H0:i:1	H1:i:0
+EAS188_7:7:213:309:373	83	chr2	317	99	35M	=	161	-191	TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA	<<<86<82<<<<<<<<<<<<<<<9<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:45:1339:1807	153	chr2	319	64	35M	*	0	0	GACATCTAAATGAAAGAGGCTCAAAGAATGCCAGG	77797;;:;::&:;;0:;8;;4;;:;;6;;;;;;;	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:197:52:58	83	chr2	323	99	35M	=	165	-193	TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA	<7;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:8:6:104:118	83	chr2	323	99	35M	=	154	-204	TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:185:96:948	147	chr2	324	99	36M	=	160	-200	CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATA	6<;;<;<<;<<<<<747<<<<<<<<77<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:61:346:384	163	chr2	324	68	35M	=	496	207	CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT	<<;<<<<<<<<9<;<<9;<6<2;<6<<<;9*558;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:177:800:714	163	chr2	324	76	35M	=	497	208	CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT	<<<<<<<<<<<<<<<<<<<<<;<<<;<;<<<<<;<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:329:339:408	99	chr2	325	99	36M	=	515	226	TAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:214:565:337	99	chr2	326	99	35M	=	481	190	AAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC	<;<<<<<<<<<<<<<<;<<<<9<<<<<;;;;<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:296:401:60	89	chr2	327	68	35M	*	0	0	AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA	<<*<<<<7<<)<<3<<<9<<<<<<<<<<<<<<;<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:88:1413:14	89	chr2	327	76	35M	*	0	0	AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA	<<<<<<<<<<<;;;<<<<<<;<;;<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:34:649:318	163	chr2	328	65	35M	=	481	188	ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACAT	9<<3<<<9<<<<<<<<<7<<9<<0<<.0<*:77,;	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:29:1822:1881	83	chr2	328	74	40M	=	150	-218	ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA	;87;;<<<;<5<5<<<<<<<;<<<<<<<<<<<<:<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:187:199:369	153	chr2	329	74	35M	*	0	0	TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT	;<><<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<<	MF:i:32	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:23:268:529	153	chr2	329	71	35M	*	0	0	TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT	7;<<<<<<57;-<<<<<<:<77<<<<<<<;<;<<<	MF:i:32	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:315:219:7	153	chr2	330	69	35M	*	0	0	GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG	7==::<2=8<<<=====>888<=2=>==>,>,>>8	MF:i:32	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:4:63:5:870	83	chr2	330	75	35M	=	148	-217	GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG	:<;<;<<<4:;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:243:557:560	163	chr2	331	75	36M	=	499	204	AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA	<<<<<<<9<<<<<<<<<<<<<<<<<<;<<89<<9<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:270:430:269	163	chr2	331	99	36M	=	519	224	AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;7;:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:6:284:442:747	89	chr2	331	75	35M	*	0	0	AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC	<;<<<<<:<;<<<<<<<<;<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:71:31:1973	89	chr2	331	76	35M	*	0	0	AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC	<<<<<7<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:2:30:466:652	147	chr2	332	98	35M	=	163	-204	AAGAGGCTAAAAGAATGCCAGGAAGATACATTGCA	<<<<<;3;&<<<<<<<</6<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS56_61:3:208:118:673	147	chr2	332	76	35M	=	169	-198	AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA	<<<<<;;<;<<<<<<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:95:1530:28	163	chr2	332	74	35M	=	490	193	AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA	;;;;;;;;;;:;;;;;;;8;;;;;;;;;;;77747	MF:i:18	Aq:i:9	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:7:104:965:517	73	chr2	333	77	35M	=	333	0	AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA	<<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<;<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:7:104:965:517	133	chr2	333	0	*	=	333	0	NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	MF:i:192
+EAS54_65:7:155:629:357	163	chr2	333	99	35M	=	521	223	AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA	<<<<<<<<8<8<<6<<<<<<<<;<9<5<;<;;941	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:149:572:877	83	chr2	334	99	36M	=	197	-173	GAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA	6<94693<;<<<<;;<<<<<<<<<<;9<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:53:544:889	99	chr2	335	76	35M	=	495	195	AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA	<<<<<<<<;<<<<<<<<<<<<<<<<<;<<<<<;<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:226:370:91	99	chr2	335	99	35M	=	482	182	AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA	8<<<;<8<8<;<<<8<<;7<7;8784<<,;864<&	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:119:651:88	163	chr2	337	99	35M	=	527	225	GCTCAAAGAATGCCAGGAAGATACATTGCAAGACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:20:592:496	163	chr2	338	75	35M	=	498	195	CTCAAAGAATGCCAGGAAGATACATTGCAAGACAG	<<<<<<<<<<<<<<<<<<<<<<<<<==<<<<<<:<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:214:946:229	83	chr2	339	99	35M	=	165	-209	ACAAAGAATGCCAGGAAGATACATTGCAAGACAGA	)+<<<*<<77;8<;7<<8<4<;<88<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS188_7:5:163:982:695	99	chr2	339	77	35M	=	499	195	TCAAAGAATGCCAGGAAGATACATTGCAAGACAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:14:1872:1521	163	chr2	339	62	35M	=	500	196	TCAAAGAATGCCAGGAAGATACATTGCAAGTCAGA	7<<<<77<<<3<3<7.'<<<<<7<67<+.0%4*<4	MF:i:18	Aq:i:2	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS192_3:4:293:168:240	147	chr2	340	99	35M	=	167	-208	CAAAGAATGCCAGGAAGATACATTGCAAGACAGAC	+;;;;<8<<86<<<<<<<;;8;7;<;<8<8;<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:86:697:941	83	chr2	341	99	35M	=	187	-189	AAAAAAATCCCGGAAGATACATTGCAAGACAGACT	1<<%<<<1:<58<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:4	UQ:i:67	H0:i:0	H1:i:0
+EAS54_71:4:14:88:306	99	chr2	341	99	34M	=	521	215	AAAGAATGCCAGGAAGATACATTGCAAGACAGAC	<<<<<<8<<<<<<;<<<3<<<8<<;<;;<15<:6	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:183:697:555	163	chr2	341	84	35M	=	505	199	AAAGAATGCCAGGAAGATACATTGCCAGACAGACT	=====================:===&==:;==5;;	MF:i:18	Aq:i:37	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS56_57:3:41:739:907	163	chr2	344	99	35M	=	520	211	GAATGCCAGGAAGATACATTGCAAGACAGACTTCA	<<<<<<<<<<<<<<<<<<<<<<<<;<9<<<;;;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:100:1147:124	83	chr2	345	99	35M	=	150	-230	AATGCCAGGAAGATACATTGCAAGACAGACTTCAT	<<<<96<<<<<<<<<<<<<<<<<<<<<<:<<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:127:828:697	99	chr2	346	99	35M	=	552	241	ATGCCAGGAAGATACATTGCAAGACAGACTTCATC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:62:125:888	163	chr2	347	99	35M	=	504	192	TGCCAGGAAGATACATTGCAAGACAGACTTCATCA	<<<<<<<<<<<<<<<<<<<::<<<:7<::<:;<<:	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:1:1598:843	163	chr2	347	99	40M	=	500	193	TGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATA	<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<8<4:8::	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:71:83:58	83	chr2	349	77	35M	=	148	-236	CCAGGAAGATACATTGCAAGACAGACTTCATCAAG	8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:88:1454:418	163	chr2	349	99	35M	=	522	208	CCAGGAAGATACATTGCAAGACAGACTTCATCAAG	:<<:<<<<<<<<<<<::::<:<:<9<5<<<<<<8:	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:36:649:554	163	chr2	350	99	35M	=	523	208	CAGGAAGATACATTGCAAGACAGACTTCATCAAGA	<<<<<4<<8<<<<<<8<6<<88<<<<<<<-;<;0;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:189:831:878	163	chr2	351	99	35M	=	555	239	AGGAAGATACATTGCAAGACAGACTTCATCAAGAT	:<<<2<<<<<<<<<<:8<8<<<<<<<<<<87489;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:14:1211:1332	83	chr2	351	99	35M	=	178	-208	AGGAAGATACATTGCAAGACAGACTTCATCAAGAT	978961;;991;97;<;;<;<<;;;;;<;;<:8:<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:4:328:537:640	147	chr2	352	99	35M	=	185	-202	GGAAGATACATTGCAAGACAGACTTCATCAAGATA	;:<<;<<<<<::<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:85:361:418	99	chr2	353	99	36M	=	517	200	GAAGATACATTGCAAGACAGACTTCATCAAGATATG	<<<<<<<<<<<<<;<<<<<<<<<<<<<<;4;<<<<3	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:329:437:643	99	chr2	354	99	36M	=	540	222	AAGATACATTGCAAGACAGACTTCATCAAGATATGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<<<1	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:135:354:66	147	chr2	356	99	35M	=	188	-203	GATACATTGCAAGACAGACTTCATCAAGATATGTA	;;;;7<<<<:<<<<;<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:9:648:712	147	chr2	358	99	35M	=	182	-211	TACATTGCAAGACAGACTTCATCAAGATATGTAGT	*;0;;;95<<<<7<<<;;<<<;;<<<<;<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:36:1184:994	163	chr2	358	99	35M	=	518	195	TACATTGCAAGACAGACTTCATCAAGATATGTAGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<8<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:50:30:15	147	chr2	358	10	35M	=	192	-201	TACATTGCAAGACAGTCGTCAGCAAGATATGTAGT	1-%-22&&)&11,&/&&176<&<<<222<,6,<<<	MF:i:18	Aq:i:10	NM:i:3	UQ:i:26	H0:i:0	H1:i:0
+EAS51_66:4:322:350:374	163	chr2	360	99	35M	=	546	221	CATTGCAAGACAGACTTCATCAAGATATGTAGTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:7:41:745:603	163	chr2	360	99	35M	=	536	211	CATTGCAAGACAGACTTCATCAAGATATGTAGTCA	<<<<<<<<<<<<:<<<<<<<<<<<<<<<6<:8<<:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:138:186:459	163	chr2	360	97	35M	=	518	193	CATTGCAAGACAGACTTCATCAAGATATGTAGTCA	<*<<7<<0<7<<+<-:<<&<:6:4:0-:<<2.:5<	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:41:1308:619	83	chr2	360	99	35M	=	184	-211	CATTGCAAGACAGACTTCATCAAGATATGTAGTCA	0<9476<<<<<0<<<2<&<0<.<<<<<<<<<.<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:125:884:276	163	chr2	362	99	35M	=	541	214	TTGCAAGACAGACTTCATCAAGATATGTAGTCATC	<<<<<<<<<<<8<<<<<<<<<<<<<<<<<<;;<<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:156:21:69	83	chr2	362	99	35M	=	163	-234	TTGCAAGACAGACTTCATCAAGATATGTAGTCATC	<:3:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:66:1381:181	163	chr2	362	99	40M	=	544	222	TTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACT	<<6<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<::4:7	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:11:1261:1200	163	chr2	362	99	35M	=	558	231	TTGCAAGACAGACTTCATCAAGTTATGTAGTCATC	<<<<<<<<<<<;<<<<<<<<;<<<;<:<<8<<:<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_99:5:191:885:623	163	chr2	363	99	35M	=	551	223	TGCAAGACAGACTTCATCAAGATATGTAGTCATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;;;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:53:783:78	99	chr2	363	99	35M	=	561	233	TGCAAGACAGACTTCATCAAGATATGTAGTCATCA	<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<7;<:;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:5:177:24:389	83	chr2	365	99	35M	=	175	-225	CAAGACAGACTTCATCAAGATATGTAGTCATCAGA	+<<;<9<<<9<<;<<7<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:58:684:520	99	chr2	367	99	35M	=	538	206	AGACAGACTTCATCAAGATATGTAGTCATCAGACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:71:187:824	99	chr2	367	99	35M	=	534	202	AGACAGACTTCATCAAGATATGTAGTCATCAGACT	;===;======3==;==========4=;=7;;3;6	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:324:238:736	83	chr2	367	99	35M	=	180	-222	AGACAGACTTCATCAAGATATGTAGTCATCAGACT	<<<9<<<70,<<4<<<<<7<4<7<<<<<0<<<<<7	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:19:306:982	99	chr2	368	99	35M	=	538	205	GACAGACTTCATCAAGATATGTAGTCATCAGACTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:168:829:88	83	chr2	369	99	35M	=	205	-199	ACAGACTTCATCAAGATATGTAGTCATCAGACTAT	<,,;<838883;;;<<<<<;<8<8;<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:122:589:134	163	chr2	369	99	35M	=	562	228	ACAGACTTCATCAAGATATGTAGTCATCAGACTAT	<<:<<:<:<<<<<:<8<<<<<<<:<::<<<4:<;;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:3:303:970:243	163	chr2	370	99	35M	=	564	229	CAGACTTCATCAAGATATGTAGTCATCAGACTATC	<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<8<8<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:2:19:736:559	147	chr2	370	99	35M	=	209	-196	AAGACTTCATCAAGATATGTAGTCATCAGACTATC	)<7<2;;4<<4<<<<;<<<<<<<<<<7<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS51_66:3:246:711:981	99	chr2	371	99	35M	=	559	223	AGACTTCATCAAGATATGTAGTCATCAGACTATCT	<<<<<<<<;<<<<:;<<;;<:<<<4<<:4;00<;<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:89:1164:573	99	chr2	371	99	35M	=	560	224	AGACTTCATCAAGAGATGTAGTCATCAGACTATCT	<:<<;<2<<<<<<<&:2<;<;<<<<;,+;:<<4:<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS220_1:8:18:1757:95	147	chr2	374	45	35M	=	216	-193	CTTCATCAAGATATGTAGTCATCAGACTATCTAAA	<<<6<&:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:284:597:682	99	chr2	375	99	35M	=	557	217	TTCATCAAGATATGTAGTCATCAGACTATCTAAAG	<<<<<<<9<<<<<;<<6<<<<<;<9<<<<<<1;;9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:10:394:392	99	chr2	376	99	35M	=	542	201	TCATCAAGATATGTAGTCATCAGACTATCTAAATT	<<<<<<<<<<<<<<<<<<<:<<<<<<;<<;;:6&;	MF:i:18	Aq:i:68	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_97:5:28:538:148	163	chr2	376	99	35M	=	557	216	TCATCAAGATATGTAGTCATCAGACTATCTAAAGT	<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<+771;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:60:590:1760	147	chr2	376	99	35M	=	201	-210	TCATCAAGATATGTAGTCATCAGACTATCTAAAGT	<8<-<<<<<<<82<<<4<<<<<<<<<<<<<8<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:73:1158:535	83	chr2	377	99	40M	=	213	-204	AATAAAGATATGTAGTCATCAGACTATCTAAAGTCAACAT	+;6+;<;<<<<<<<<<0<<;<<<;<<<8<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:2	UQ:i:20	H0:i:1	H1:i:0
+EAS188_7:3:182:104:921	99	chr2	378	99	35M	=	575	232	ATCAAGATATGTAGTCATCAGACTATCTAAAGTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:3:160:173:889	83	chr2	379	99	35M	=	215	-199	TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA	;)<</<8<<<<<<</<;<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:71:311:202	83	chr2	379	99	35M	=	188	-226	TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA	;6<;<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:315:201:673	163	chr2	381	45	36M	=	542	197	AAGATATGTAGTCATCAGACTATCTAAAGTCAACAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<<:;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:228:915:631	163	chr2	381	66	35M	=	547	201	AAGATATGTAGTCATCAGACTATCTAAAGTCAACA	=================;==========4======	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:228:736:747	163	chr2	381	68	35M	=	542	196	AAGATATGTAGTCATCAGACTATCTAAAGTCAACA	<<<<<<<<<;<<<<<<<;;<<;<<<<;::<;;7;7	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:263:689:572	99	chr2	381	68	35M	=	553	207	AAGATATGTAGTCATCAGACTATCTAAAGTCAACA	<<<<;<<<<<;<<<<<<&;;<<<;<<:<+;;7;;7	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:5:81:685:141	147	chr2	382	85	35M	=	207	-210	AGATATGTAGTCATCAGACTATCTAAAGTCAACAT	;+;(;)..=3.1=.7=;=8;==<4====;======	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:2	H1:i:2
+EAS114_32:1:208:971:600	163	chr2	382	99	35M	=	559	212	AGATATGTAGTCATCAGACTATCTAAAGTCAACAT	<<<<<<<<<<<<<<<<<8<<:<<<0;44<<:4<:<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:7:1864:1569	99	chr2	382	99	35M	=	561	214	AGATATGTAGTCATCAGACTATCTAAAGTCAACAT	<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<8<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:224:592:744	147	chr2	383	99	35M	=	188	-230	GATATGTAGTCATCAGACTATCTAAAGTCAACATG	6<6<<<<<<9+<6-<<<:<:<:<<<<<:<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:6:25:949:33	147	chr2	383	99	35M	=	201	-217	GATATGTAGTCATCAGACTATCTAAAGTCAACATG	-<4<666<<-7<5<<<<<(<<<<<<<<<<<<<<-<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:2	H1:i:1
+EAS54_73:5:271:874:367	163	chr2	384	99	35M	=	560	211	ATATGTAGTCATCAGACTATCTAAAGTCAACATTA	<<<<<<<<<<<<<<4<;<;<:<;4<4<<99<7<+%	MF:i:18	Aq:i:51	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS139_19:4:26:1312:1400	147	chr2	385	99	40M	=	207	-218	TATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAA	::77:<;:+6<+<<<;<<74<<<;<<;<<<<<<<<<<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:2
+EAS51_66:6:310:747:415	83	chr2	387	99	35M	=	217	-205	TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG	;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:2	H1:i:6
+EAS56_57:6:4:223:776	83	chr2	387	93	35M	=	203	-219	TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG	<;9<;<0<<;<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:2	H1:i:6
+EAS114_28:3:32:492:907	99	chr2	387	95	36M	=	571	220	TGTAGTCATCAGACTATCTAAAGTCAACATGAAGGA	<<<<<<<<<<<<<<<<<<<;<;;<<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS114_26:4:110:840:431	163	chr2	388	93	35M	=	567	214	GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA	=====================5:======54=+3+	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS114_45:6:86:693:234	83	chr2	388	82	35M	=	202	-221	GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA	83997;<;;;;98;;3*6<<;<:8;;;;;<;;<<<	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:3	H1:i:13
+EAS139_11:8:96:1314:1448	83	chr2	388	93	35M	=	213	-210	GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA	<<<<7<<:<<<<<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:3	H1:i:8
+EAS114_30:6:41:461:436	83	chr2	389	74	35M	=	200	-224	TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA	;<986<;6<<<<<<<;<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:3	H1:i:13
+EAS221_3:8:55:932:613	163	chr2	389	77	35M	=	568	214	TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA	<<<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:3	H1:i:10
+EAS1_97:5:219:174:684	163	chr2	390	71	35M	=	560	205	AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA	<<<<<<<<<<<8<8<<<7<<;<<<<<2<;&;;;;9	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:2	H1:i:14
+EAS56_57:5:24:284:360	163	chr2	390	76	35M	=	567	212	AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA	<<<<<<<<<<<<<<<<<;<<<<<<<;<9;<;99;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:2	H1:i:14
+EAS114_26:1:113:367:659	83	chr2	390	72	35M	=	222	-203	AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA	<<5<0&9;<3<<<<<9<<<<4<;<9<9<<<<7<3<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:3	H1:i:17
+EAS114_32:5:109:199:592	163	chr2	390	72	35M	=	576	221	AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA	<<<<<<<<<<<;:<;;<<:;6<<;:;:<<+;;;<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:2	H1:i:14
+EAS114_45:4:88:55:1187	147	chr2	391	66	35M	=	220	-206	GTCATCAGACTATCTAAAGTCAACATGAAGGAAAA	7769,7;;;;;;;;;;;;;;9;;;;;;;;;;;;;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:2	H1:i:7
+EAS56_59:2:60:677:921	147	chr2	393	96	35M	=	250	-178	CATCAGACTATCTAAAGTCAACATGAAGGAAAAAA	========9==;======8==>=============	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:4	H1:i:13
+EAS114_39:3:88:84:1558	147	chr2	394	95	35M	=	203	-226	ATCAGACTATCTAAAGTCAACATGAAGGAAAAAAA	;;<<;<<;<<5<<<<<<;<<:<<<;<<<<<<;<<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:2	H1:i:3
+EAS56_59:2:201:768:529	83	chr2	396	99	35M	=	225	-206	CAGACTATCTAAAGTCAACATGAAGGAAAAAAATT	3<:<9<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:13:100:876	83	chr2	397	73	36M	=	223	-210	AGAATATATAAAGTCAACATGAAGGAAAAAAATTCT	;9<$<<<$<<<<<<<<75<<<<<<<9<9<<<<<<<<	MF:i:18	Aq:i:30	NM:i:2	UQ:i:6	H0:i:1	H1:i:1
+EAS139_11:4:26:137:1382	99	chr2	397	99	35M	=	579	217	AGACTATCTAAAGTCAACATGAAGGAAAAAAATTC	<<<<<<7<<<77<<<<<<</<<+<<<<<<7<+<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_67:3:197:261:624	99	chr2	398	99	35M	=	587	224	GACTATCTAAAGTCAACATGAAGGAAAAAAATTCT	<<<<<<<<<<<;<<<<<<<;<<;<<<<<<;<<<9<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS218_4:3:41:1281:1785	147	chr2	399	99	35M	=	237	-197	ACTATCTAAAGTCAACATGAAGGAAAAAAATTCTA	<6<<<6<<<<<<:<<6<:<<<<<<<<<<<<6<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+B7_610:5:51:904:391	83	chr2	401	97	35M	=	212	-224	TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA	;<96<<<<<<7<<7<<<<<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_63:7:137:139:248	163	chr2	401	97	35M	=	569	203	TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA	<<<<<<<<<9<<<<<<<<<<;<<<<<<<;;<;<;<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:3	H1:i:2
+B7_610:7:15:696:693	163	chr2	403	34	35M	=	570	202	TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT	2:+:7<<3<<<<<6+36<<<<<<<6<<6&<<;<.7	MF:i:18	Aq:i:10	NM:i:0	UQ:i:0	H0:i:2	H1:i:1
+EAS114_45:2:41:199:388	147	chr2	403	99	35M	=	243	-195	TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT	84898;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:163:611:211	83	chr2	405	99	35M	=	234	-206	TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA	<<<<9<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:1:114:19:769	163	chr2	405	90	35M	=	572	202	TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA	<<<<<*2;6;<<<4.;;<&;;<.<40)<);5-/7;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS51_64:7:92:493:891	147	chr2	408	99	35M	=	240	-203	AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA	<383<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:5:996:2000	163	chr2	408	99	35M	=	575	202	AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_93:1:179:629:513	83	chr2	409	99	35M	=	220	-224	GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA	<;,<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:84:1505:1037	99	chr2	409	99	35M	=	586	212	GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA	<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<::)	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS221_1:6:96:491:1891	83	chr2	409	99	35M	=	253	-191	GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA	:;5<<7<;:<<;<<<<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:307:481:625	147	chr2	410	99	36M	=	245	-201	TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA	;4<<4<;;<<;;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+B7_610:5:120:596:847	83	chr2	410	83	35M	=	211	-234	TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAG	;/<<:<;<<<<<<<<<<<<<;;<<<<<;<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_45:3:3:864:1888	99	chr2	411	99	35M	=	579	203	CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA	;<<;;<<;;;<;;<<;<;<<;<<;8<<:<;79799	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:34:1614:558	99	chr2	411	99	35M	=	569	193	CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA	<<<<<<<<<<<7<<<<<8<<<<<<2<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:5:117:570:971	83	chr2	413	99	35M	=	223	-225	ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA	<,<9<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:1
+EAS112_34:8:45:800:733	163	chr2	413	99	35M	=	607	229	ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA	<<<</<<<<<<<<<<<<<<<2<9<<<<<5*5;599	MF:i:18	Aq:i:34	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS219_FC30151:7:87:1289:83	163	chr2	413	99	35M	=	585	207	ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA	<<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<<<:	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_39:4:58:271:612	147	chr2	415	99	35M	=	236	-214	ATGAAGGAAAAAAATTCTAAAATCAGCAAGAGCAA	;:2=<<;<<<<<<:67:<<:<<<<<<<<<<<<,<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:11	H0:i:0	H1:i:2
+EAS1_108:1:33:779:821	163	chr2	416	99	35M	=	579	198	TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS112_34:6:75:615:555	147	chr2	416	99	35M	=	255	-196	TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA	;<<<;<<<<<<<<<:;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS188_7:6:11:994:584	147	chr2	417	97	35M	=	226	-226	GAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAG	<<<<;<<<<<<<;<:<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS114_26:7:218:858:445	147	chr2	421	99	35M	=	239	-217	GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATA	;<<<<<<<8;:<<<<<<;<<:<<<<<<<<<<<<;<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS54_81:2:317:72:221	83	chr2	422	99	35M	=	270	-187	AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC	=========:======;==;===============	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:70:766:2016	163	chr2	422	99	35M	=	607	220	AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS56_53:4:45:707:147	83	chr2	424	99	35M	=	216	-243	AAAAATTCTAAAATCAGCAAGAGAAAAGCATACAG	<<<<<<;3<<<<<4;<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:16:1343:1621	147	chr2	426	99	35M	=	248	-213	AAATTCTAAAATCAGCAAGAGAAAAGCATACAGTC	;<<9;7=====;;==<==================<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:184:912:258	99	chr2	428	99	35M	=	582	189	ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:119:38:945	147	chr2	428	99	35M	=	221	-242	ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT	=;;8=====:========<================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:95:235:746	163	chr2	430	99	35M	=	598	203	TCTAAAATCAGCAAGAGAAAAGCATACAGACATCT	<<<<;<<<<<<<<79<<<<<<<<<<<<<<*;;;<9	MF:i:18	Aq:i:72	NM:i:1	UQ:i:9	H0:i:1	H1:i:0
+EAS1_99:2:188:782:483	83	chr2	431	99	35M	=	277	-189	CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA	7<<<<<<4<;;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:39:348:594	163	chr2	431	99	35M	=	600	204	CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA	<<;<<<<<<<<<;<;;<<<<<<<<<<;<<<:<:<:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:176:971:874	83	chr2	432	76	9M1D26M	=	273	-195	TAAAATCAGAAGAGAAAAGCATACAGTCATCTATA	<<<<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_30:3:14:697:541	147	chr2	432	99	35M	=	259	-208	TAAAAGCAGCAAGAGAAAAGCATACAGTCATCTAT	8<<<<&6<;8<<<<<<<<<<<<;<<<<;<<<<<<8	MF:i:18	Aq:i:71	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+B7_610:7:177:469:800	147	chr2	433	99	35M	=	259	-209	AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA	=<<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:131:518:588	163	chr2	433	99	35M	=	607	209	AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<1<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:8:6:237:885	147	chr2	433	99	35M	=	269	-199	AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA	<<<<1:<;:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:134:126:465	147	chr2	434	99	35M	=	245	-224	AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA	<<;:&<3)<<7<:<<<<.:<<<<<8<<<<<<<<<<	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:104:402:732	163	chr2	434	99	35M	=	610	211	AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA	=========================7=;===;=:=	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:65:85:1547	83	chr2	434	99	35M	=	257	-212	AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA	<<<<<<;:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:2:85:686:696	163	chr2	435	99	35M	=	594	193	AATCAGCAAGAGAAAAGCATACAGTCATCTATAAA	==================<=====:==<=<;=:==	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:144:242:602	163	chr2	436	99	36M	=	611	211	ATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG	========================;=====<;;<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:204:737:61	83	chr2	437	99	35M	=	247	-225	TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG	(7=72=;==2=====<===<<==============	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:124:253:889	163	chr2	437	99	35M	=	598	196	TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG	<<<<<<6<<:<<<<<<<<<<<<<;;<<;<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:310:155:312	163	chr2	438	99	35M	=	606	203	CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA	;<<<;<<<8<<<<<<<<<<<<;<<<<<8<<<<8<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:78:692:671	99	chr2	438	99	35M	=	610	207	CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA	<<<<<<<<<<<<<;<<<<<<<:<<:<<<:8<<0;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:130:260:553	147	chr2	439	99	35M	=	250	-224	AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA	<*;<<7<);<<;9;<5<*<9<;<<;;<7<<<<<1<	MF:i:18	Aq:i:42	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:60:163:1612	163	chr2	439	99	35M	=	617	213	AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA	<<<<<<<<<21<<<<<<<<<3<--<+<<<+<<63<	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:106:595:322	83	chr2	440	99	35M	=	274	-201	GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA	;+<<<<<<<<<<<<<<<<<<;<<7<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:211:84:84	147	chr2	440	99	35M	=	268	-207	GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA	6:<<:<<<<<<9<<<<<<<<<<<;<<<;;;<;<3;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:280:662:939	147	chr2	442	99	35M	=	294	-183	AAGAGAAAAGCATACAGTCATCTATAAAGGAAATC	<<;<;<<<<<:<<<;<<<;<<;<<<<<<<<<<<;<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:52:751:360	83	chr2	443	99	35M	=	263	-215	AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC	<-<9<<<<<6<<<8<<;;<<9<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:234:167:381	163	chr2	443	99	35M	=	625	217	AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;;7<;;	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:37:156:134	83	chr2	443	99	35M	=	261	-217	AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC	99998<<<<:<<<<<<<;<<><<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:93:490:901	83	chr2	445	99	35M	=	280	-200	AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA	<<<<<<<;<<<;<<<;<<;<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:96:489:453	99	chr2	445	99	35M	=	625	215	AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;:	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:46:13:880	147	chr2	445	99	35M	=	290	-190	AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA	=&====8==========0=================	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:167:905:852	163	chr2	445	99	36M	=	647	238	AGAAAAGCATACAGTCATCTATAAAGAAAATCCCAT	<<<7<<<<<<<<<<<<<<:<:<<:::&.<:<66:3<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS219_FC30151:3:13:674:1717	163	chr2	445	99	35M	=	623	213	AGAAAAGCATGCAGTCATCTATAAAGGAAATCCCA	<<<<<<<<<<%<<<<<<<<<<<<<<<<<<<;:;;;	MF:i:18	Aq:i:45	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS51_62:7:196:511:896	83	chr2	446	99	35M	=	283	-198	GAAAAGCATACAGTCATCTATAAAGGAAATCCCAT	8<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:154:118:488	163	chr2	447	99	35M	=	624	212	AAAAGCATACAGTCATCTATAAAGGAAATCCCATC	<<<<<<<<<<<<<<<<<<<<<<:7<<<<7<:;;::	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:44:153:969	83	chr2	447	95	35M	=	245	-237	AAAAGCATACAGTCATCTATAAAGGAAATCCCATC	<<5<:7<72<51<7<*79<<<<<5<<<<<<<<<2<	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:215:246:640	99	chr2	447	99	36M	=	624	213	AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA	<<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:94:1655:1921	147	chr2	447	85	35M	=	258	-224	AAAAGCATACAGTCATCTATAAAGGAAATCCCATC	<<<<;:===<==;<==<;================;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:60:1037:1146	147	chr2	447	99	35M	=	250	-232	AAAAGCATACAGTCATCTATAAAGGAAATCCCATC	<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:1:23:536:229	99	chr2	448	99	35M	=	614	201	AAAGCATACAGTCATCTATAAAGGAAATCCCATCA	<<<<<<<<<<<<<<<<<:<8<:<<;<<<<<<7<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:130:865:838	163	chr2	448	99	35M	=	649	236	AAAGCATACAGTCATCTATAAAGGAAATCCCATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:<;3	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:239:1001:406	99	chr2	450	99	35M	=	634	219	AGCATACAGTCATCTATAAAGGAAATCCCATCAGA	<<<<<<7<<<<<<<<8<;<<<7<<<<36<<3<:33	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:3:147:423:584	147	chr2	451	99	35M	=	277	-209	GCATACAGTCATCTATAAAGGAAATCCCATCAGAA	27<;<3<<<+<<;<<<;;-4<<<<<;<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:187:715:521	83	chr2	451	99	35M	=	291	-195	GCATACAGTCATCTATAAAGGAAATCCCATCAGAA	<7<:<9<<<<<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:172:196:746	99	chr2	451	99	35M	=	620	204	GCATACAGTCATCTATAAAGGAAATCCCATCAGAA	<<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:267:821:860	83	chr2	451	99	34M	=	296	-189	GCATACAGTCATCTATAAAGGAAATCCCATCAGA	$&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS56_61:7:7:682:201	83	chr2	452	99	35M	=	288	-199	CATACAGTCATCTATAAAGGAAATCCCATCAGAAT	0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:3:82:13:897	163	chr2	453	99	35M	=	606	188	ATACAGTCATCTATAAAGGAAATCCCAGCAGAATA	<<<<;<<<<<<;<;<;5<51;<1<<<<%<<<<,58	MF:i:18	Aq:i:41	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS56_53:6:180:695:621	99	chr2	453	99	35M	=	637	219	ATACAGTCATCTATAAAGGAAATCCCATCAGAATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:158:909:321	83	chr2	453	99	35M	=	271	-217	ATACAGTCATCTATAAAGGAAATCCCATCAGAATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:237:497:165	99	chr2	454	99	35M	=	619	200	TACAGTCATCTATAAAGGAAATCCCATCAGAATAA	8===<8===========37=<===7=;7=8=====	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:2:152:355:962	83	chr2	456	99	35M	=	269	-222	CAGTCATCTATAAAGGAAATCCCATCAGAATAACA	&<.9.<;+;<;<<<<<<<<<<::<<:<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS192_3:4:255:549:422	83	chr2	456	99	35M	=	295	-196	AAGTCATCTATAAAGGAAATCCCATCAGAATAACA	&<;;+<;4;<<<<<<<<<<<;<;<<;<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:1	H1:i:2
+EAS220_1:4:100:20:1199	163	chr2	456	99	35M	=	614	193	CAGTCATCTATAAAGGAAATCCCATCAGAATAACA	7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:71:408:741	163	chr2	457	99	35M	=	637	215	AGTCATCTATAAAGGAAATCCCATCAGAATAACAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:285:395:450	147	chr2	458	99	35M	=	269	-224	GTCATCTATAAAGGAAATCCCATCAGAATAACAAT	8)3<8+;<)<<<<<<<<97:7<<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:4:854:140	99	chr2	458	72	35M	=	638	215	GTCATCTATAAAGGAAATCCCATCAGAATAACAAT	<<<6<<<:<6<<<:36:<<<<3<<8:.6<38::4<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:227:657:95	147	chr2	458	99	35M	=	280	-213	GTCATCTATAAAGGAAATCCCATCAGAATAACAAT	;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<<	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:57:324:546	83	chr2	458	99	36M	=	281	-213	GTCATCTATAAAGGAAATCCCATCAGAATAACAATG	;;5<;,<<<;;<<<<<<<97<<<<<<<<<<9<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:26:274:1078	83	chr2	458	99	40M	=	282	-216	GTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCT	9:*:64<<;<<<<<<<<<;8;<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:107:636:642	163	chr2	458	99	35M	=	630	207	GTCATCTATAAAGGAAATCCCATCAGAATAACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:226:869:36	147	chr2	461	99	35M	=	273	-223	ATATATAAAGGAAATCCCATCAGAATAACAATGGG	<0/)</<<<:<<<<<)<<7<<<<<+55<<1<<<:<	MF:i:18	Aq:i:59	NM:i:1	UQ:i:14	H0:i:1	H1:i:0
+EAS192_3:4:312:915:751	99	chr2	461	99	35M	=	621	195	ATCTATAAAGGAAATCCCATCAGAATAACAATGGG	<2<<<<<<<8;<<<<<<<<:<<<<8<<<<<84,4:	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:96:899:106	99	chr2	462	99	35M	=	636	209	TCTATAAAGGAAATCCCATCAGAATAACAATGGGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:62:969:12	147	chr2	464	99	35M	=	303	-196	TATAAAGGAAATCCCATCAGAATAACAATGGGCTT	<<;<;<::<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:67:56:806	99	chr2	464	99	35M	=	637	208	TATAAAGGAAATCCCATCAGAATAACAATGGGCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<:7:	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:37:611:267	99	chr2	464	99	35M	=	610	181	TATAAAGGAAATCCCATAAGAATAACAATGGGCTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_93:7:319:280:57	147	chr2	467	99	35M	=	306	-196	AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC	<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:96:720:940	163	chr2	467	99	35M	=	654	222	AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC	<<<<<<;<<<<<<<<<<;9<<8<<6<;:;<;;.;;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:2:59:286:290	99	chr2	467	99	35M	=	628	196	AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC	<<<<<<<<;<<<;<<<<<<<<<<<<<;;;<<;7;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:236:841:20	163	chr2	467	99	35M	=	652	220	AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC	<<<<<<<<<<<<<<<<<7<<<<:<<9<<<<;<:<9	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:49:656:507	99	chr2	468	99	35M	=	637	204	AAGGAAATCCCATCAGAATAACAATGGGCTTCTCA	<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:78:1314:1275	147	chr2	469	99	35M	=	277	-227	AGGAAATCCCATCAGAATAACAATGGGCTTCTCAG	<<<<<<<<6:<<<<<<<<<<<<<<<<<<<<<<<1<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:6:181:392:500	147	chr2	470	99	35M	=	299	-206	GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC	/5<<;(88<<<;<;<<6<<<<<7<<<<<<<7<<<<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:133:8:379	163	chr2	470	99	35M	=	653	218	GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC	<<<<<<<<<<<<<<<<<<<<<<<<8;<<8<<<:6<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:198:929:684	163	chr2	471	99	35M	=	624	188	GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA	<7<<<<;<<<<<<<<<<<<;<<<<<:<<<<::<:7	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:181:582:435	99	chr2	471	99	35M	=	629	193	GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;::	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:214:784:690	99	chr2	472	99	35M	=	657	220	AAATCCCATCAGAATAACAATGGGCTTCTCAGCGG	<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<4<44	MF:i:18	Aq:i:30	NM:i:1	UQ:i:19	H0:i:1	H1:i:0
+EAS114_39:3:11:1238:1728	83	chr2	475	99	35M	=	310	-200	TCCCATCAGAATAACAATGGGCTTCTCAGCGGAAA	:677<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS112_34:4:12:273:89	163	chr2	477	99	35M	=	631	189	CCATCAGAATAACAATGGGCTTCTCAGCGGAAACC	==========<====:=========+===4414;;	MF:i:18	Aq:i:71	NM:i:1	UQ:i:28	H0:i:1	H1:i:0
+EAS56_63:2:119:161:322	147	chr2	479	99	35M	=	297	-217	ATCAGAATAACAATGGGCTTCTCAGCAGAAACCTT	<83<;<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_30:2:111:142:21	83	chr2	479	99	35M	=	304	-210	ATCAGAATAACAATGGGCTTCACAGCGGAAACCTT	;88<:<;;<6<;;<<<:<<<<;<<<<<<<<;<<<<	MF:i:18	Aq:i:28	NM:i:2	UQ:i:53	H0:i:0	H1:i:0
+EAS1_99:1:34:649:318	83	chr2	481	65	35M	=	328	-188	AAGAATAACAATGGGCTTCACAGCGGAACCCTTAC	)<7<<3<<<<<<+<1<;<8&<<<<<<<<<<<<<<<	MF:i:130	Aq:i:65	NM:i:3	UQ:i:59	H0:i:0	H1:i:0
+EAS114_30:6:214:565:337	147	chr2	481	99	35M	=	326	-190	CAGAATAACAATGGGCTTCTCAGCAGAAACCTTAC	;;<;<1<9<<<8<<<<<;<<<<<<8<<<;<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:226:370:91	147	chr2	482	99	35M	=	335	-182	AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA	<':<6<;<<<;2<;<-7;;;<<<<<<<;;;<<7;<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS139_11:6:13:682:680	99	chr2	482	99	35M	=	685	238	AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA	<<<<<<<<<<<<<:<<<<<<<<<<;<;<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_593:2:273:348:37	163	chr2	483	99	36M	=	688	241	GAATAACAATGGGCTTCTCAGCAGAAACCTTACACG	<<<<<<<9<49<<<;<<<<*<<19<15;<</5<;.5	MF:i:18	Aq:i:41	NM:i:1	UQ:i:13	H0:i:1	H1:i:0
+EAS139_11:8:76:205:587	83	chr2	483	99	35M	=	306	-212	GAATAACAATGGGCTTCTCAGCGGAAACCTTACGA	8<<5<<<<<<<<<<<<<<<<<<<<<<<<<7<<</<	MF:i:18	Aq:i:28	NM:i:2	UQ:i:41	H0:i:0	H1:i:0
+B7_591:2:27:280:592	147	chr2	484	99	36M	=	310	-210	AATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC	<<<<<<<<<<<8<<<<<<<<7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_99:7:171:196:287	163	chr2	485	99	35M	=	658	208	ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC	<<<<<<<<<<<<<<<<<<<<<;6<<<<<<2:8<0:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:2:224:579:433	163	chr2	485	99	35M	=	662	212	ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC	<<<<<<<<<<<<<<<<<:<<<<<<<<<<<8<+8;:	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:22:490:2011	147	chr2	485	99	35M	=	307	-213	ATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC	<7<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_65:6:46:173:214	83	chr2	487	99	35M	=	308	-214	AACAATGGGCTTCTCAGCAGAAACCTTACAAGCCA	<<2<<<<<<<<<<<5<<5<7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:4	H1:i:6
+EAS1_103:4:164:79:134	99	chr2	488	99	35M	=	656	203	ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_32:2:283:577:398	147	chr2	488	99	35M	=	308	-215	ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG	;8;;&<<<;<;67<;<;<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:1	UQ:i:27	H0:i:0	H1:i:2
+EAS54_67:5:149:639:910	163	chr2	489	99	35M	=	669	215	CAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGA	<<<<<<<<<<<<<<<<<<<<<<<<7<;;<<;<<;<	MF:i:18	Aq:i:42	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:250:628:423	83	chr2	489	99	36M	=	295	-230	CAATGGGCTTCTCAGCGGAAACCTTACAAGCCAGAA	+<<4;;9;;7.;7<;7<;<<<;;<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_108:1:242:419:512	163	chr2	490	94	35M	=	672	217	AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA	<<8<<<<<<<<<<<<<<<<<<<<<<<<;<8<(<30	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS114_45:1:95:1530:28	83	chr2	490	74	35M	=	332	-193	AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA	77741(9;;994;5;;4;;1;;;;;1;<;<<<<;<	MF:i:18	Aq:i:9	NM:i:0	UQ:i:0	H0:i:42	H1:i:45
+EAS192_3:6:326:887:180	163	chr2	492	73	35M	=	672	215	TGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGC	;<<<<<;<<<<<<<<<8<<<<<<<<<<<<0<;;<+	MF:i:18	Aq:i:0	NM:i:1	UQ:i:25	H0:i:3	H1:i:7
+EAS1_99:1:86:871:319	99	chr2	494	71	35M	=	651	192	GGCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGA	<<<<<:<<<:<:<<<<<<<<<<<<8<<:<1;<::)	MF:i:18	Aq:i:0	NM:i:1	UQ:i:25	H0:i:0	H1:i:4
+EAS56_57:1:189:130:136	147	chr2	494	79	35M	=	314	-215	GGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGA	823;23<7<57<7<<<<<;<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:63	H1:i:85
+EAS51_64:7:140:752:822	99	chr2	495	76	35M	=	667	207	GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT	<<<<<<<<<<<<<<<<<7<<<<<<<<<<<<<;<:;	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:0	H1:i:5
+EAS56_57:5:53:544:889	147	chr2	495	76	35M	=	335	-195	GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT	,<;<<<;<<<<<<<<<:;;<<<<<;;<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:2	H1:i:32
+EAS54_65:4:61:346:384	83	chr2	496	68	35M	=	324	-207	CAACTAAGAAGAAACCTTACAAGCCAGAAGAGATT	7&$+&,<<+;;<;;<<6<<8<<<;<<;<<<<<<<<	MF:i:18	Aq:i:0	NM:i:3	UQ:i:19	H0:i:1	H1:i:53
+EAS54_81:8:177:800:714	83	chr2	497	76	35M	=	324	-208	TTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTG	=;3=+=<:=<========8================	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:29	H1:i:85
+B7_597:6:20:592:496	83	chr2	498	75	35M	=	338	-195	TCTCAGCGGAAACCTTACAAGCCAGAAGAGATTGG	97<7;<;<;<<<<;<9<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:5	H1:i:48
+B7_591:5:243:557:560	83	chr2	499	75	36M	=	331	-204	CTAAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT	69&<;&<&<<;6.<<<+<<<;;<<<<<<<<;<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:1	H1:i:9
+EAS188_7:5:163:982:695	147	chr2	499	77	35M	=	339	-195	CTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGA	<:<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:7	H1:i:42
+EAS139_19:1:1:1598:843	83	chr2	500	99	40M	=	347	-193	TCAGCGGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT	1)::6::<<;<98<<<<<<9<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:1	UQ:i:25	H0:i:1	H1:i:0
+EAS139_19:6:78:1029:512	163	chr2	500	99	40M	=	656	196	TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT	<0:;<<<<<<<<<:<<:;<<<;<7<<;<7;;;:6;::672	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:14:1872:1521	83	chr2	500	62	35M	=	339	-196	TCATCAAAAACCTTACAAGCCAGAAGAGATTGGAT	/1<%73&7<1<3577,<<<7/733<<<<<<<<1<<	MF:i:18	Aq:i:2	NM:i:2	UQ:i:9	H0:i:1	H1:i:8
+EAS221_3:6:51:1486:1131	163	chr2	500	77	35M	=	685	220	TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT	<<<<<<<<<;<<<<<<<<<1<5<<8<<<'<;<<;1	MF:i:18	Aq:i:3	NM:i:0	UQ:i:0	H0:i:22	H1:i:22
+EAS192_3:6:45:183:25	163	chr2	501	95	35M	=	672	206	CAGCGGAAACCTTACAAGCCAGAAGAGATTGGATC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<86;<;:;	MF:i:18	Aq:i:23	NM:i:1	UQ:i:27	H0:i:0	H1:i:2
+B7_597:4:38:999:463	147	chr2	503	39	35M	=	317	-221	GCGGAAACCTTACAAGCCAGAAGAGATTGGATCTA	.*:&<<0<0!<<+<<<<<<<<<<<<<0<<<<<<<<	MF:i:18	Aq:i:39	NM:i:2	UQ:i:25	H0:i:0	H1:i:1
+EAS114_45:1:30:1882:1210	163	chr2	503	82	35M	=	665	197	GCAGAAACCTTACAAGCCAGAAGAGATTGGATCTA	;;::;;;;:;;;;;:;;;;;;9;;:7;;8:77777	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_108:6:222:579:961	163	chr2	504	99	35M	=	679	210	CAGAAACCTTACAAGCCAGAAGAGATTGGATCTAA	<<<<<<<<<<<<<<<<<<<<<<<<<7<<:7;;;68	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:92:875:345	163	chr2	504	99	35M	=	690	221	CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_63:8:62:125:888	83	chr2	504	99	35M	=	347	-192	CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA	,;3<<<8;;3<,<<<8;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+EAS221_1:2:23:127:880	99	chr2	504	99	35M	=	686	217	CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA	<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS51_66:8:43:972:506	163	chr2	505	99	35M	=	686	216	AGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT	<;<<<<<<<<<<<<6;<;<<<<<<<<<<:;;<;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:183:697:555	83	chr2	505	84	35M	=	341	-199	AGAAATCTTAGAAGCCAGAAGAGATTGGATCTAAT	<<<;&,.;);&96<84<<81<<&<<<9<<8<8<<1	MF:i:18	Aq:i:37	NM:i:2	UQ:i:16	H0:i:0	H1:i:1
+EAS221_3:8:65:463:703	99	chr2	506	99	35M	=	693	222	GAAACCTTACAAGCCAGAAGAGATTGGATCTAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:7:101:752:996	163	chr2	508	99	35M	=	687	214	AACCTTACAAGCCAGAAGAGATTGGATCTAATTTT	<<<<<<<<<<<<<<<;<<<<<9<<<<<<;<<;;;;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:267:953:459	99	chr2	509	99	35M	=	667	193	ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT	<<<<<<<<<9<<<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:33:1240:846	99	chr2	509	99	35M	=	685	211	ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT	<<<<<<<<<<<<7<<2<;<<;<<<;<<<:6:<<<:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:135:401:735	99	chr2	510	99	35M	=	703	228	CCTTACAAGCCAGAAGAGATTGGATCTAATTTTTG	<<<<<<<<<<<<<<<<<<<<<;<<<<<8<<<<<<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:3:186:68	99	chr2	512	99	35M	=	687	210	TTACAAGCCAGAAGAGATTGGATCTAATTTTTGTA	<<<<<<<<<<<<;<<<<<<<<<<<<;;<<<<<&%8	MF:i:18	Aq:i:71	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_78:7:164:727:977	163	chr2	513	99	35M	=	689	211	TACAAGCCAGAAGAGATTGGATCTAATTTTTCGAC	<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;;79;	MF:i:18	Aq:i:75	NM:i:1	UQ:i:26	H0:i:1	H1:i:0
+B7_589:1:110:543:934	163	chr2	514	99	35M	=	700	221	ACAAGCCAGAAGAGATTGGATCTAATTTTTGGACT	<<<<<<<<<<<<;<<<<<;;<<<;;<<<<<,,;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:329:339:408	147	chr2	515	99	36M	=	325	-226	CAATCCAGAAGAGATTGGATCTAATTTTTGGACTTC	7<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:1	UQ:i:27	H0:i:1	H1:i:0
+EAS56_59:5:325:544:349	163	chr2	515	99	35M	=	716	236	CAAGCCAGAAGAGATTGGATCTAATTTTTGGACTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6;;;<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:3:903:957	99	chr2	516	99	35M	=	661	180	AAGCCAGAAGAGATTGGATCTAATTTTTGGACTTC	<<<<<<<<<<<<<<<<;;<;<;<<<<<<66<;<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:85:361:418	147	chr2	517	99	36M	=	353	-200	AGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT	;;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:138:186:459	83	chr2	518	97	35M	=	360	-193	GCCAGAAGAGATTGGAGCTAATTTTTGGACTTCTT	+/2/;<:<&7:7</<2&<<<&<<<<<<<<<8<<:3	MF:i:18	Aq:i:37	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS139_11:4:36:1184:994	83	chr2	518	99	35M	=	358	-195	GCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT	<84<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:270:430:269	83	chr2	519	99	36M	=	331	-224	CCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA	28<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:295:882:282	163	chr2	520	99	35M	=	691	206	CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA	========================<6<======8;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:3:41:739:907	83	chr2	520	99	35M	=	344	-211	CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA	;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:5:272:240:950	163	chr2	520	97	35M	=	696	211	CAGCAGAGCTTGGATCTAATTTTTGGACTTCTTCA	6<<&:<<<&<::;&7<<<3<;<<;<:;:<8:<<(<	MF:i:18	Aq:i:25	NM:i:3	UQ:i:17	H0:i:0	H1:i:0
+EAS54_65:7:155:629:357	83	chr2	521	99	35M	=	333	-223	AGAAGAGATTGGATCTAATTTTTGGACTTCTTAAA	<<<<<<<<;<<<<<<<<<<<<6<<<<<<<<<;<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:14:88:306	147	chr2	521	99	35M	=	341	-215	AGAAGAGATTAGATCTAATTTTTGGACTTCTTAAA	<1;<;<;<4<&<<<:<<<:<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS1_108:5:115:193:231	163	chr2	522	99	35M	=	684	197	GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG	<<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6<7	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:88:1454:418	83	chr2	522	99	35M	=	349	-208	GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG	<<<<<<<<<<6<96<<<1911<<<1<<<<<<<<<1	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:36:649:554	83	chr2	523	99	35M	=	350	-208	AAGAGATTGGATCTAATTTTTGGACTTCTTAAAGA	<<<<<888;<<<;<<<;<;<8<<<<8<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:119:651:88	83	chr2	527	99	35M	=	337	-225	GATTGGATCTAATTTTTGGACTTCTTAAAGAAAAA	<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:57:826:977	163	chr2	528	99	35M	=	693	200	ATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAA	<<<<<<<<<<<<<<<<+<<<<<<<<6<9:6<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:285:417:147	99	chr2	529	99	35M	=	712	218	TTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAA	<<<<<<<<<<<<<<<;8<<<<<<<<<;6<:<;<<;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:160:130:351	99	chr2	530	99	35M	=	697	202	TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA	<<<<<<<<<<<<<<<;<<<<4<<<<<;<<<:<<:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:3:287:665:495	163	chr2	530	99	35M	=	702	207	TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA	==========================98====8=8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:71:187:824	147	chr2	534	99	35M	=	367	-202	TCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCT	0040;<7<<<<0<7<<<;<7*<<<<<7<<771<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:70:445:1289	99	chr2	535	99	35M	=	702	202	CTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTG	<<<<<<<<<<2<<<<<<<<<<:<<<<<<<;;;;<:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:7:41:745:603	83	chr2	536	99	35M	=	360	-211	TAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGT	;<<;;<;<8<<<<<<<<<<<;<<;<<<<<<<<<;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:197:759:975	163	chr2	537	99	35M	=	698	196	AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<;	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:140:253:322	99	chr2	537	99	35M	=	689	187	AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC	<<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:58:684:520	147	chr2	538	99	35M	=	367	-206	ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA	<85;;:<<<7<<7<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:19:306:982	147	chr2	538	99	35M	=	368	-205	ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA	<<<<<<<<<9<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:273:562:954	99	chr2	539	99	35M	=	722	218	TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:78:775:555	99	chr2	539	99	35M	=	691	187	TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA	6:<<<<:<<<<6:<<)::8<6<<:<<)<::63832	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:49:330:699	163	chr2	540	99	35M	=	722	217	TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAA	==;=================;======5;;;==5=	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:329:437:643	147	chr2	540	99	36M	=	354	-222	TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC	885<8;;<;3,8<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:125:884:276	83	chr2	541	99	35M	=	362	-214	TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC	,;;3,<7<;7<<===;============;======	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:4:315:201:673	83	chr2	542	45	36M	=	381	-197	TTGGACTTATTAAAGAAAAAAAAACCTGTCAAACAC	;;;;<-;;&;;<<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_597:3:10:394:392	147	chr2	542	99	35M	=	376	-201	TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA	28-:;0-<0<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:1:228:736:747	83	chr2	542	68	35M	=	381	-196	TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA	<07<<&<;+<<<<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:267:394:437	163	chr2	544	99	35M	=	735	226	GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACG	<<<<<<<<<<;<;<<<<<;;<<<<<;<<:;8<;<8	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:66:1381:181	83	chr2	544	99	40M	=	362	-222	GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT	;;;+;;&<7<<<+<<<<<<<;<;8<<<;<<<<8<<<;<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:74:668:424	99	chr2	545	99	40M	=	707	202	GACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:322:350:374	83	chr2	546	99	35M	=	360	-221	ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA	<+;8&84<<<:<<<<<<<<<<;<<<<<<<;<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:307:208:477	163	chr2	546	99	35M	=	710	199	ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA	<<<<<<<;<<;<<<<<<<<<<<<<<<<;:<<<88;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:228:915:631	83	chr2	547	66	35M	=	381	-201	ATTATTAAAGAAAAAAAAACCTGTCAAACACGAAT	&-))-*===/=========9====4==========	MF:i:18	Aq:i:0	NM:i:2	UQ:i:13	H0:i:1	H1:i:0
+EAS1_93:5:246:177:525	99	chr2	549	98	35M	=	738	224	TCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT	<<<<<<<<<<<<<<<<<<<<<1<<<<<<;;;<8;;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:93:634:323	99	chr2	550	99	35M	=	721	206	CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT	<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<,<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:8:165:441:708	163	chr2	550	99	35M	=	737	222	CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT	=<===============================99	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:5:191:885:623	83	chr2	551	99	35M	=	363	-223	TTAAAGAAAAAAAAACCTGTCAAACACGAATGTTA	66<<<<<<<<<<<<<2<<<<9<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:127:828:697	147	chr2	552	99	35M	=	346	-241	TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT	;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:5:115:249:673	163	chr2	552	99	35M	=	743	226	TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<6<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:263:689:572	147	chr2	553	68	35M	=	381	-207	AAAGAAAAAAAAACCTGTCAAACACGAATGTTATG	<9<2<<<<<<<<<22;;02<<<9<<;9<9<<;<<3	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:99:1632:76	99	chr2	553	99	40M	=	705	192	AAAGAAAAAAAACCCTGTCAAACACGAATGTTATGCCCTG	<<<<<<<<<<<<*<<<<8<9<<<<<<<<<9;;;;<18:;:	MF:i:18	Aq:i:47	NM:i:1	UQ:i:9	H0:i:0	H1:i:1
+EAS54_71:7:250:698:842	163	chr2	554	99	35M	=	753	233	AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<24	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:41:314:1173	99	chr2	554	99	35M	=	718	199	AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC	<;<<<<<<<;;<<<<<-<<<;;;<;8<*;;<<<<'	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:189:831:878	83	chr2	555	99	35M	=	351	-239	AGAAAAAAAAACCTGTCAAACACGAATGTTATGCC	<9<<<<<<<<<<;9<:<<<<<6<<<<<<<;<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:216:47:302	99	chr2	557	99	35M	=	729	207	AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT	<<<<<<<<<<<7<<<<<<<<<<<<+<<<<<//6;<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:5:28:538:148	83	chr2	557	99	35M	=	376	-216	AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT	<<<<<<<<<<7;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:284:597:682	147	chr2	557	99	35M	=	375	-217	AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT	<<<<<<<<9;;7<;:<<<:<;<<<<<<<<;<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:11:1261:1200	83	chr2	558	99	35M	=	362	-231	AAAAAAAACCTGTCAAACACGAATGTTATGCCCTG	<<<<<<<:<<6<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:246:711:981	147	chr2	559	99	35M	=	371	-223	AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC	;;:;7<<:5:<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:1:208:971:600	83	chr2	559	99	35M	=	382	-212	AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC	<<<<<<<3*+<4/<<<<7<<<<0<<:<8<<<<0<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:5:219:174:684	83	chr2	560	71	35M	=	390	-205	AAAAAAACTGTCAAACACGAATGTTATGCCCTGCT	<<<<:;+9<<<;<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS51_66:7:4:234:610	163	chr2	560	84	35M	=	729	204	AAAAAACCTGTCAAACACGAATGTTATGCCCTCCT	<<<<<<<<7;<<<;7<7;7;7<;-<-<&<<<0%06	MF:i:18	Aq:i:22	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS54_73:5:271:874:367	83	chr2	560	99	35M	=	384	-211	AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT	<<<<<<5;<<<:<<<;<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:2:168:1878	99	chr2	560	37	35M	=	743	218	AAAAAACCTGGCAAACACGAATGTTATGACATGTN	;<:;;<:<;<;<;;;;:;<;:::&9:&:68&6&*!	MF:i:18	Aq:i:37	NM:i:5	UQ:i:61	H0:i:0	H1:i:1
+EAS221_1:6:89:1164:573	147	chr2	560	99	35M	=	371	-224	AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT	3<<<6<%7<<08<<4<3<<103<1<<<<<<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:53:783:78	147	chr2	561	99	35M	=	363	-233	AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA	<;;;;<<0<,<<<<<<<<<;<<<;<;<<<<;<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:30:570:902	163	chr2	561	99	35M	=	730	204	AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA	<<<<<<<<<<<;4<<:<<44<<<<<<<<<<<4<<+	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:7:1864:1569	147	chr2	561	99	35M	=	382	-214	AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:89:942:84	163	chr2	562	74	35M	=	759	232	AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:122:589:134	83	chr2	562	99	35M	=	369	-228	AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA	;<;4<<538<<;<<;<<<<';,:<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:77:1529:522	99	chr2	562	99	35M	=	722	195	AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA	<<;<<<<<<<<<<<4<<4<;;:;2:7<<<2*<;;8	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:8:48:805:860	99	chr2	563	78	35M	=	755	227	AAACCTGTCAAACACGAATGTTATGCCCTGCTAAA	<<<<<<<;<<<<<<<41;<<8<<<<<<<8+<4,+;	MF:i:18	Aq:i:13	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:144:492:61	99	chr2	564	99	35M	=	728	199	AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC	<<<;<<<<<<<<<<<;<<<<<<7:<<<<::;9;;6	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:3:303:970:243	83	chr2	564	99	35M	=	370	-229	AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC	<<0+<<<,<4<:<:<<<<<<<<<<<::<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:78:806:800	163	chr2	564	99	40M	=	717	193	AACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGC	<<<<<<<<<<<<<<<<<<<4<<:<1<0<;<9;<:78::::	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:94:1440:2016	163	chr2	564	99	35M	=	751	222	AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC	<<<<<<<<<<<<<<<<<<<;<<;;;<<:<8:::75	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:103:443:166	163	chr2	565	99	35M	=	747	217	ACCTGTCAAACACGAATGTTATGCCCTGCTAAACT	<<<<<<<<<<<<<<<<<<<<;<<<<<<<1<-;;;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:24:284:360	83	chr2	567	76	35M	=	390	-212	CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA	:;<;:<<<;<<<<<<<<<<<<<<<<<;;<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:3:166:626:836	163	chr2	567	99	35M	=	757	225	CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA	<<<<<<<<<<<<<<<<<<<<9<<<<<<<<;<;;;9	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:110:840:431	83	chr2	567	93	35M	=	388	-214	CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA	77<;7<<<<<<<<<4<<<<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:116:738:142	99	chr2	568	99	35M	=	722	189	TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG	<<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<:;2	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:55:932:613	83	chr2	568	77	35M	=	389	-214	TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:137:139:248	83	chr2	569	97	35M	=	401	-203	GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC	;;;99<<<;<;;<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:34:1614:558	147	chr2	569	99	35M	=	411	-193	GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC	<<9<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:15:696:693	83	chr2	570	10	35M	=	403	-202	TCAAACACGAATGTTAATCCCTGCTAAACTAATCA	)6<:7<.7<6.<0&&<&3:&7<<7<0<<<<<<<<<	MF:i:18	Aq:i:10	NM:i:3	UQ:i:50	H0:i:0	H1:i:0
+EAS114_28:3:32:492:907	147	chr2	571	95	36M	=	387	-220	CAAACACGAATGTTATGCCCTGCTAAACTAAGCATC	8<;<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:1:114:19:769	83	chr2	572	90	35M	=	405	-202	AAACACGAATGTTATGCCCTGCTAAACTAAGCATC	5+;+3/6;<+;/8<8*/<7/59<97147<;;9<7<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:182:104:921	147	chr2	575	99	35M	=	378	-232	CACGAATGTTATGCCCTGCTAAACTAAGCATCATA	;<;<<<<<<:<<<<<:<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:5:996:2000	83	chr2	575	99	35M	=	408	-202	CACGAATGTTATGCCCTGCTAAACTAAGCATCATA	<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:5:109:199:592	83	chr2	576	72	35M	=	390	-221	ACGAATATTATGCCCTGCTAAACTAAGCATCATAA	;9<9<:&:<<<<;;<;;<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS219_1:3:90:219:528	163	chr2	576	75	35M	=	758	217	ACGAATGTTATGCCCTGCTAAACTAAGCATCATAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<9	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:94:294:387	163	chr2	578	99	35M	=	736	193	GAATGTTATGCCCTGCTAAACTAAGCATCATAAAT	<<<<<<<;<<<<<<<<<:<<<<<<<<<<<<;)7;;	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:33:779:821	83	chr2	579	99	35M	=	416	-198	AATGTTATGCCCTGCTAAACTAAGCATCATAAATG	<<730<<<<9<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:5:43:114:617	163	chr2	579	99	35M	=	738	194	AATGTTATGCCCTGCTAAACTAAGCATCATAAATG	=============;=========;===========	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:5:23:944:377	99	chr2	579	75	36M	=	757	214	AATGTTATGCCCTGCTAAACTAAGCATCATAAATGA	<<<<<<<<9<<<<;<<<<<<<<<;<7<<<<;8;<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:3:864:1888	147	chr2	579	99	35M	=	411	-203	AATGTTATGCCCTGCTAAACTAAGCATCATAAATG	888588;;;;;;;;;;;;;;;;;;;;8;;;;;;;;	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:26:137:1382	147	chr2	579	99	35M	=	397	-217	AATGTTATGCCCTGCTAAACTAAGCATCATAAATG	<<-<8<<<<<<:<<<<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:265:251:147	163	chr2	581	99	35M	=	754	208	TGTTATGCCCTGCTAAACTAAGCATCATAAATGAA	<<<<<<<<<<<<<<88<<<80:;<<<<<;:4;;:4	MF:i:18	Aq:i:50	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:5:184:912:258	147	chr2	582	99	35M	=	428	-189	GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG	<;;<<<<;:<<7<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:115:646:430	99	chr2	582	45	35M	=	768	217	GTTATGCCCTGCTAAACTTAGCATCATAAATGAAG	<7<<<<<<<<<<<<;<<<<<;<7<<<<;5;<;67<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_108:3:24:319:429	163	chr2	582	99	35M	=	740	193	GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG	<<<<<<<<<<<<<<<<;<<<<<<<<1<<-6<<</<	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:8:49:182:192	99	chr2	582	99	35M	=	750	203	GTTATGCCCTGCTAAACTGAGCATCATAAATGAAG	=====================;============<	MF:i:18	Aq:i:49	NM:i:1	UQ:i:28	H0:i:0	H1:i:1
+EAS114_45:1:100:979:1863	99	chr2	583	85	35M	=	757	209	TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG	;<;;;;;;;7;;;79;;77;9;;99;974;677-6	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:53:458:581	73	chr2	583	77	35M	=	583	0	TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:53:458:581	133	chr2	583	0	*	=	583	0	CTCAATTAATTGTTTTATAAAACCTGTGAGTTTTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<99<<<<<	MF:i:192
+B7_589:6:108:958:42	163	chr2	584	81	35M	=	755	206	TATGCCCTGCTAAACTAAGCATCATAAATGAAGGG	<<<<<<<<<<<<<<<<<<<<1<<<<<<9<<;<5<:	MF:i:18	Aq:i:9	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:89:457:591	99	chr2	585	69	35M	=	770	216	ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG	<<<<<<<<<<<4<<<<<<<<<<<<8<7/4<<<<4+	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:87:1289:83	83	chr2	585	99	35M	=	413	-207	ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG	<<<::<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:1:84:1505:1037	147	chr2	586	99	35M	=	409	-212	TGCCCTGCTAAACTAAGCATCATAAATGAAGGGGA	<<966<<7<<<<7<<<<9<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:197:261:624	147	chr2	587	99	35M	=	398	-224	GCCCTGCTAAACTAAGCATCATAAATGAAGGGGAA	866;2:/;<<<;:<<<;<;;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:118:41:489	163	chr2	588	76	35M	=	779	226	CCCTGCTAAACTAAGCATCATAAATGAAGGGGAAA	<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<95:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:157:361:309	99	chr2	589	99	35M	=	747	193	CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<;<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS114_39:6:71:644:1792	163	chr2	589	84	35M	=	754	200	CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT	<<<<<<<;<<<<<<<<<<;<<<<<<<<<;<;:<:<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_589:2:9:49:661	163	chr2	591	99	35M	=	747	191	TGCTAAACTAAGCATCATAAATGAAGCGGAAATAA	<<<<<<<<<<<<<<<<;<<<<<<;:<<;;;7<9;9	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_71:2:85:686:696	83	chr2	594	99	34M	=	435	-193	TAAACTAAGCATCATAAATGAAGTGGAAATAAAG	:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS188_7:1:177:522:118	69	chr2	594	0	*	=	594	0	TCTCAATTAATTGTTTTATAAAACCTGTGAGTTTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<57<<<<	MF:i:192
+EAS188_7:1:177:522:118	137	chr2	594	49	35M	=	594	0	TAAACTAAGCATCATAAATGAAGGGGAAATAAAGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:103:870:105	99	chr2	595	44	35M	=	778	214	AAACTAAGCATCATAAATGAAGGGGAAATAAAGTC	<<<<<<<<<<<<<<<<<<<<<<<<8<<<<<;<<7;	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS51_62:8:52:967:804	73	chr2	596	76	35M	=	596	0	AACTAAGCATCATAAATGAAGGGGAAATAAAGTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:8:52:967:804	133	chr2	596	0	*	=	596	0	TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT	===============<=======<<===<======	MF:i:192
+EAS1_108:6:95:235:746	83	chr2	598	99	35M	=	430	-203	CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG	==&=;===7=3===8======;=;8===8=====;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:124:253:889	83	chr2	598	99	35M	=	437	-196	CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG	8<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:6:174:650:125	99	chr2	600	76	35M	=	770	201	AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:39:348:594	83	chr2	600	99	35M	=	431	-204	AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC	<<;;<;:<;<<<;<<<<<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:92:693:228	99	chr2	601	75	35M	=	770	200	AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;9<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:285:349:797	163	chr2	604	76	35M	=	773	200	ATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:3:82:13:897	83	chr2	606	99	35M	=	453	-188	CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT	,<2<;<<;<<<<;;;<<;<<<<<<<;;;;<<<<<<	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:310:155:312	83	chr2	606	99	35M	=	438	-203	CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT	2;<<;<<;<<;;/<<<<<<;<<<<8<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:45:178:1321	163	chr2	606	77	35M	=	771	196	CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:193:420:78	99	chr2	607	99	35M	=	787	215	ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:131:518:588	83	chr2	607	99	35M	=	433	-209	ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG	<.<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:45:800:733	83	chr2	607	99	35M	=	413	-229	ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG	<7<<7&<<9<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:34	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:70:766:2016	83	chr2	607	99	35M	=	422	-220	ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:2:1217:398	163	chr2	608	99	40M	=	780	212	TAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC	<<<<<<<<<<<<<;<<<<<<<7<<<3<<<<;<<<<9:7::	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:73:1458:1337	163	chr2	609	99	35M	=	806	232	AAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGAC	<<<<<;;;<<<<<<<<<<<<<<<<<<<;<<7;;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:104:402:732	83	chr2	610	99	35M	=	434	-211	AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:37:611:267	147	chr2	610	99	35M	=	464	-181	AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA	<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:78:692:671	147	chr2	610	99	35M	=	438	-207	AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA	<<);<<;;<<<<<;<<<<<<<<<<<<<6<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:144:242:602	83	chr2	611	99	36M	=	436	-211	ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:6:1243:981	69	chr2	611	0	*	=	611	0	TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT	<<<<8<<8<<<<2<<<<<<<<8<55<<8*<<8<<<	MF:i:192
+EAS219_FC30151:5:6:1243:981	137	chr2	611	68	35M	=	611	0	ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAA	<;<;;<<<;3;;3<<<;<<;<7%<<<.1<<<..<3	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:291:404:199	163	chr2	612	76	36M	=	777	197	TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:266:994:429	99	chr2	612	76	35M	=	769	188	TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG	=====================9=======4===:=	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:7:159:253:353	163	chr2	613	67	35M	=	778	196	GAAGGGGAAATAAAGTCAAGTCTTTCCTGACAGGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<0,%4(+,	MF:i:18	Aq:i:67	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS1_108:5:175:149:296	163	chr2	614	99	35M	=	811	232	AAGGGGAAATAAAGTCAAGCCTTTCCTGACAAGCA	<<<<<<<<<<<<<<<<<<<49<<<<<<<<<<<<;4	MF:i:18	Aq:i:45	NM:i:1	UQ:i:19	H0:i:0	H1:i:1
+EAS56_65:1:23:536:229	147	chr2	614	99	35M	=	448	-201	AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA	<<99<<<<<;<<<;2<<<<<<;<<<9<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:100:20:1199	83	chr2	614	99	35M	=	456	-193	AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA	:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:181:713:140	99	chr2	615	84	35M	=	793	213	AGGGGAAATAAAGTCAAGTATTTCCTGACAAGCAA	<7<<<<<<<<<<<<7<7<6+<<<5;<;<2<;;+;;	MF:i:18	Aq:i:41	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS139_19:6:82:1051:921	163	chr2	616	99	40M	=	800	224	GGGGAAATAAAGTCAAGGCTTTCCTGACAAGCAAATGCTA	<<<<<9<799<<<<7::/<<<9<7:9:;2:7552+9''66	MF:i:18	Aq:i:41	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+EAS192_3:3:309:187:267	163	chr2	616	99	35M	=	786	205	GGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAA	<<<<<<<<<<<<<<<<<<<<<<<;<;<;<;68;;8	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:115:649:259	99	chr2	617	99	36M	=	782	201	GGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;<<9	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:261:267:597	163	chr2	617	86	35M	=	787	205	GGGTAATAAAGTCAAGTCTTTCCTGACAAGCAAAT	<<<<<<<<<;<<<<<7<<<<<<<<<:7<7<;44:;	MF:i:18	Aq:i:41	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_26:4:123:1001:580	163	chr2	617	43	35M	=	771	185	GGGAANTAAAGTCAAGTCTTTCCTGACAAGCAAAT	=====!=====================1.8131*=	MF:i:18	Aq:i:43	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+EAS139_11:7:60:163:1612	83	chr2	617	99	35M	=	439	-213	GGGAACTAAAGTCAAGTCTTTCCTGACAAGCAAAT	-<<<<)<<<<<<<<<<<<<<<<<<<<<8<<<<<<<	MF:i:18	Aq:i:59	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS54_65:4:325:795:213	163	chr2	618	99	35M	=	790	207	GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG	<<<<<<<;<<<<;;<<<<<<<<<<<<;:<</;/;;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:165:665:220	163	chr2	618	76	35M	=	779	196	GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG	<<<<<<<<<<<<<<<<<<<<<;<;;<<<;;<;<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:22:206:150	163	chr2	619	99	35M	=	792	208	GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC	==========================::=5&;<2<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:237:497:165	147	chr2	619	99	35M	=	454	-200	GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC	9=:=======2=27======<>&<=,==4>4=>>=	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:82:1540:77	163	chr2	619	99	35M	=	786	202	GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<:8	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:172:196:746	147	chr2	620	99	35M	=	451	-204	AAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCT	<<<;><<+<<<<:<<<<2<;<<<;<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:97:892:419	163	chr2	621	99	35M	=	800	214	AATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:4:312:915:751	147	chr2	621	99	35M	=	461	-195	AATAAAGTCAAGTCTTTCCTGACAAGCAAAAGCTA	<:-<<<99:::);:7<4;8<<<<<<<;<2<+8<;<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS1_93:4:325:352:67	163	chr2	622	99	35M	=	794	207	ATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAA	==================<========<=<;-===	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:83:731:540	99	chr2	623	99	35M	=	804	216	TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG	<<<<<<<<<;<<<<<<<<<<<<<:<7<*;&;<;;9	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:5:74:329:459	163	chr2	623	99	35M	=	795	207	TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG	<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9;599	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:13:674:1717	83	chr2	623	99	35M	=	445	-213	TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:141:415:738	69	chr2	624	0	*	=	624	0	TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT	<<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<8<<<	MF:i:192
+EAS1_105:1:141:415:738	137	chr2	624	76	35M	=	624	0	AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA	<<<<<<<<<<<<<<<<<<<<<<:<<;<<;<<<<6:	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:154:118:488	83	chr2	624	99	35M	=	447	-212	AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA	<<<;58<<95:<<;<;<<<;<<<;;<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:198:929:684	83	chr2	624	99	35M	=	471	-188	AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA	<<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:215:246:640	147	chr2	624	99	36M	=	447	-213	AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT	;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:234:167:381	83	chr2	625	99	35M	=	443	-217	AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT	<<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:96:489:453	147	chr2	625	99	35M	=	445	-215	AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT	;<;;;<<<<5:<<:<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:3:79:879:15	99	chr2	626	99	35M	=	790	199	AGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<;<<1<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:2:59:286:290	147	chr2	628	99	35M	=	467	-196	TCAAGTCTTTCCTGACAAGCAAATGCTAAGATAAT	77<<<<7<<<97<<,7<<<;<<<;<9<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:5:263:511:936	99	chr2	629	99	35M	=	801	207	CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT	<<<<<<<<<<<<<<<<<;<<<<<;<<:<:<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:181:582:435	147	chr2	629	99	35M	=	471	-193	CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT	<<<<<<<<;<<<<<;<<4<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:107:636:642	83	chr2	630	99	35M	=	458	-207	AAGTCTTTCCTGACAAGCAAATGCTAAGATAATTC	<<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:12:273:89	83	chr2	631	99	35M	=	477	-189	AGTCTTTCCTGACAAGCAAATGCTAAGATAATTCA	<:737<288<<<7<<<<<<<<<:9<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:239:1001:406	147	chr2	634	99	35M	=	450	-219	CTTTCCTGACAAGCAAATGCTAAGATAATTCATCA	0':.71;;:9==9=;====;=;=============	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:7:96:899:106	147	chr2	636	99	35M	=	462	-209	TTCCTGACAAGCAAATGCTAAGATAATTCATCATC	;;;;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:6:67:56:806	147	chr2	637	99	35M	=	464	-208	TCCTGACAAGCAAATGCTAAGATAATTCATCATCA	844:8;7<88;8<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:71:408:741	83	chr2	637	99	35M	=	457	-215	TCCTGACAAGCAAATGCTAAGATAATTCATCATCA	;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:6:180:695:621	147	chr2	637	99	35M	=	453	-219	TACTGAAAAGCAAATGCTAAGATAATTCATCATCA	;&377<&<<;7<<<<<7<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:2	UQ:i:10	H0:i:1	H1:i:0
+EAS114_30:6:49:656:507	147	chr2	637	99	35M	=	468	-204	TCCTGACAAGCAAATGCTAAGATAATTCATCATCA	%44;;<:<<;<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:3:4:854:140	147	chr2	638	72	35M	=	458	-215	CCTGACAAGCAAATGCTAAGATAATTCATCATCAC	:9':<;<<<;<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:85:1521:58	99	chr2	639	99	40M	=	813	214	CTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACC	<<<<<<<<9<<<<<<<<<<<<<7<<<<<<<<<<<<;;:7:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:2:57:1064:925	137	chr2	640	76	35M	*	0	0	TGACAAGCAAATGCTAAGATAATTCATCATCACTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<	MF:i:32	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:323:196:855	163	chr2	642	99	35M	=	809	202	ACAAGCAAATGCTAAGATAATTCATCATCACTAAA	<<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7:	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:117:33:262	163	chr2	642	99	35M	=	814	207	ACAAGCAAATGCTAAGATAATTCATCATCACTAAA	<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:59:742:549	99	chr2	642	99	35M	=	816	209	ACAAGCAAATGCTAAGATAATTCATCATCACTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:55:562:403	163	chr2	643	99	36M	=	825	218	CAAGCAAATGCTAAGATAATTCATCATCACTAAACC	<<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<;<;:	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:97:743:602	163	chr2	644	99	35M	=	821	211	AAGCAAATGCTAAGATAATTCATCATCACTAAACC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<:	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:167:905:852	83	chr2	647	99	36M	=	445	-238	CAAATGCTAAGATAATTCATCATCACTAAACCAGTC	+<<<9;7;<<+<<<<<39<;9<;9<<7<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:130:865:838	83	chr2	649	99	35M	=	448	-236	AATGCTAAGATAATTCATCATCACTAAACCAGTCC	;<:84<<<4<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:60:1420:660	163	chr2	649	99	35M	=	808	194	AATGCTAAGATAATTCATCATCACTAAACCAGTCC	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:180:89:582	99	chr2	650	99	36M	=	809	195	ATGCTAAGATAATTCATCATCACTAAACCAGTCCTA	<<<<<<<<<7<<<<<<<<<7<<<:<<<:<<::77:<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:86:871:319	147	chr2	651	71	35M	=	494	-192	TGCTAAGATAATTCATCATCACTAAACCAGTCCTA	7;+1;<:<<<<<<<<;<<;<<9<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:236:841:20	83	chr2	652	99	35M	=	467	-220	GCTAAGATAATTCATCATCACTAAACCAGTCCTAT	7;<<<;<<<<;;<<<<<<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:133:8:379	83	chr2	653	99	35M	=	470	-218	ATAAGATAATTCATCATCACTAAACCAGTCCTATA	&=========='==7==0=2====28===00====	MF:i:18	Aq:i:70	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_105:8:96:720:940	83	chr2	654	99	35M	=	467	-222	TAAGATAATTCATCATCACTAAACCAGTCCTATAA	*<<<<;<<<9<<;,<;0<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:71:994:576	99	chr2	655	99	35M	=	805	185	AAGATAATTCATCATCACTAAACCAGTCCTATAAG	<<<<<<<<<<<<<<<<<<<<<<<;<<5<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:164:79:134	147	chr2	656	99	35M	=	488	-203	AGATAATTCATCATCACTAAACCAGTCCTATAAGA	<;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:78:1029:512	83	chr2	656	99	40M	=	500	-196	AGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGC	;;;;;<;;<<<.<<6;<<;<;8<<<<::<<<<<<<<;<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:1:214:784:690	147	chr2	657	99	35M	=	472	-220	GATAATTCATCATCACTAAACCAGTCCTATAAGAA	-<7<<7<:<<2<<<<;<<<<<;<<<<3<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS220_1:4:6:1178:1105	99	chr2	657	93	35M	=	830	208	GATAATTCATCATCACTAAACCAGTCCTATAAGAA	<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:171:196:287	83	chr2	658	99	35M	=	485	-208	ATAATTCATCATCACTAAACCAGTCCTATAAGAAA	<;;;98;<;&<;;<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:220:801:282	99	chr2	660	99	36M	=	837	213	AATTCATCATCACTAAACCAGTCCTATAAGAAATGC	<<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<:	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS221_1:2:73:955:728	163	chr2	660	44	35M	=	823	198	AATTCATCATCACTAAACCAGTCCTATAAGAAATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:14	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS1_105:1:3:903:957	147	chr2	661	99	35M	=	516	-180	ATTCATCATCACTAAACCAGTCCTATAAGAAATGC	<%12<&<<<;<:<<<<<<<<<7<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_65:2:224:579:433	83	chr2	662	99	35M	=	485	-212	TTCATCATCACTAAACCAGTCCTATAAGAAATGCT	'<08/8<+<</<<:<<<<<8<<9<38<<<<<<<<;	MF:i:18	Aq:i:31	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:5:209:824:866	163	chr2	665	73	35M	=	828	198	ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:30:1882:1210	83	chr2	665	82	35M	=	503	-197	ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA	776778;5;;;;8;;7:8;;;;;;;<<<;;;;;<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:181:476:394	163	chr2	666	99	35M	=	847	216	TCATCACTAAACCAGTCCTATAAGAAATGCTCAAA	<<<<<<<<<<<<<<<<<<<<<<<<<;<<:<<<:;;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:267:953:459	147	chr2	667	99	35M	=	509	-193	CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA	%<07<94========<<==================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:7:140:752:822	147	chr2	667	76	35M	=	495	-207	CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA	;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:322:391:742	99	chr2	667	99	35M	=	847	215	CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:149:639:910	83	chr2	669	99	35M	=	489	-215	TCACTAAACCAGTCCTATAAGAAATGCTCAAAAGA	<;49;<<;;<<<<8;<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:42	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:242:419:512	83	chr2	672	94	35M	=	490	-217	CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT	*:<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:45:183:25	83	chr2	672	95	35M	=	501	-206	CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT	;1<<;<<<;;;;<<<<<+<<<<<<<<<9<<<<<<<	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:326:887:180	83	chr2	672	73	35M	=	492	-215	CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT	8:<<:<5<<<;7<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:145:635:390	163	chr2	673	99	35M	=	860	222	TAAACCAGTCCTATAAGAAATGCTCAAAAGAATTG	<<<<<<<<<<<<<<<<<<:<<<<<<<8<<<::;;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:31:628:1820	163	chr2	675	98	35M	=	828	188	AACCAGTCCTATAAGAAATGCTCAAAAGAATTGTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:7:117:452:744	163	chr2	676	99	35M	=	850	209	ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA	<<<<<<<<<<;<<<;<<<<<<<<<<:<<<<<<<;;	MF:i:18	Aq:i:50	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:297:949:26	163	chr2	676	99	35M	=	842	201	ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:17:437:1378	163	chr2	676	99	35M	=	847	206	ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:222:579:961	83	chr2	679	99	35M	=	504	-210	AGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAG	=58====;==8=======;================	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:98:995:929	163	chr2	680	99	35M	=	844	199	GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT	<;<;<8<;<<;1;<<<<<;<;;;08;<;<1&0+8<	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:76:1765:700	163	chr2	680	99	35M	=	866	221	GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT	;;6;;;;;;;;;6;;;;6;;;;;;;;;;;;88878	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:68:306:409	99	chr2	682	99	40M	=	856	214	CCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;:;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:115:193:231	83	chr2	684	99	35M	=	522	-197	TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA	=========7===========<=============	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:57:1675:720	99	chr2	684	99	35M	=	841	192	TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:13:682:680	147	chr2	685	99	35M	=	482	-238	ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA	<<<<<<<<<<:<5<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:6:51:1486:1131	83	chr2	685	77	35M	=	500	-220	ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA	<<<<<<<<<<,<6<<<<<<<<<<<<<<<<<<7<<<	MF:i:18	Aq:i:3	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:33:1240:846	147	chr2	685	99	35M	=	509	-211	ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA	<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:8:43:972:506	83	chr2	686	99	35M	=	505	-216	TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT	;<<<<<<<+;<;<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:23:127:880	147	chr2	686	99	35M	=	504	-217	TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT	<<<<<<<<<%<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:7:101:752:996	83	chr2	687	99	35M	=	508	-214	AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT	<<<<<<<<7<7<<<<<<<<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:6:3:186:68	147	chr2	687	99	35M	=	512	-210	AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT	<<;<<<<<&:,<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:273:348:37	83	chr2	688	99	36M	=	483	-241	AGAAATGCGCAAAAGAATTGTAAAAGTCAAAATTAA	9;7;;0<++1<<<;<7<+;;1<<<;<17<<<<<<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS51_78:7:164:727:977	83	chr2	689	99	35M	=	513	-211	GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA	;<;<;<:<:<<<<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:6:140:253:322	147	chr2	689	99	35M	=	537	-187	GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA	=;===;54:====================>>===>	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:146:374:692	99	chr2	690	99	35M	=	874	219	AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA	<<<<<<<<<<<<<<<</<<<<<<<<<<<<<<<<<:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:1:92:875:345	83	chr2	690	99	35M	=	504	-221	AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA	<<<;<.;7<<<<<<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:45:601:439	163	chr2	691	99	35M	=	864	208	AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG	<<<<;<<<<<<<<<<<<<<<<4<<<<9<<<<<<;;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:5:295:882:282	83	chr2	691	99	35M	=	520	-206	AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG	<<:<8<-<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:78:775:555	147	chr2	691	99	35M	=	539	-187	AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG	<<-<%4/<<<<<<<<<<<<<<<<<5<<<0<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:255:796:239	99	chr2	692	99	35M	=	869	212	ATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGT	<<<<<<<<6<<<<<<<<<<<<<<<<;6<<<:<:<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:57:826:977	83	chr2	693	99	35M	=	528	-200	TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT	875:6<<<<<<<<<<<<<<<;<<<<<<;8<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:187:996:432	99	chr2	693	99	36M	=	860	203	TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:8:65:463:703	147	chr2	693	99	35M	=	506	-222	TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT	<<3<9<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:288:384:444	163	chr2	696	99	35M	=	855	194	TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:5:272:240:950	83	chr2	696	97	35M	=	520	-211	TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA	37<<<<<<<<<<<<<<<<<<<<<<;;<;<<<<<<;	MF:i:18	Aq:i:25	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:160:130:351	147	chr2	697	99	35M	=	530	-202	CAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAAT	4<;;<;<<<-<<<<<<<<<<;;<<<<;<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:189:530:40	163	chr2	698	99	36M	=	883	221	AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATAC	<<<<<<<<<<;<<<<<:<<<<<<<<<<<<<<;<<<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:168:247:414	99	chr2	698	99	35M	=	876	213	AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA	<<<<<<<<<<<<<<<<*<<<<<<<<<;:6<<<<<;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:6:197:759:975	83	chr2	698	99	35M	=	537	-196	AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:29:411:1208	99	chr2	698	99	40M	=	882	224	AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC	<<<<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<;;;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:110:543:934	83	chr2	700	99	35M	=	514	-221	AAGAATTGTAAAAGTCAAAATTAAAGTTCAATACT	<<<<<5<<;<<<<<<;<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:3:287:665:495	83	chr2	702	99	35M	=	530	-207	GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA	===,9=;;====7=====5===;==1=========	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:70:445:1289	147	chr2	702	99	35M	=	535	-202	GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA	<<<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:172:827:592	163	chr2	703	99	35M	=	899	231	AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC	=;=======;==;===:==========;==9<<.3	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:135:401:735	147	chr2	703	99	35M	=	510	-228	AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC	<<::7<<<<<<::<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:39:208:644	99	chr2	704	99	35M	=	859	190	ATTGTAAAAGTCAAAATTAAAGTTCAATACTCACC	<;<<<<<;;:<<;;<<<<<<;;;;;;.<;<79997	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:99:1632:76	147	chr2	705	99	40M	=	553	-192	TTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATA	4641::<<4<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:52:1144:509	99	chr2	706	99	35M	=	867	196	TGTAAAAGTCAAAATTAAAGTTCAATACTCACCAT	<<<<<<<<<<<<<<<<<<<;<<<<<<<;<;<<;<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:116:157:612	99	chr2	707	99	35M	=	889	217	GTAAAAGTCAAAATTAAAGTTCAATACTCACCATC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:36:481:1079	163	chr2	707	99	40M	=	881	214	GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::8	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:74:668:424	147	chr2	707	99	40M	=	545	-202	GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA	:::::<<96<<<<<;<<<;<<5<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:122:398:994	163	chr2	708	99	35M	=	871	198	TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA	<:<9<<<<<<4<<<;9<<<<<98<;<<<:;<;<;7	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:36:1231:1381	99	chr2	708	99	35M	=	891	218	TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:57:366:844	163	chr2	708	99	40M	=	877	209	TAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::7:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:307:208:477	83	chr2	710	99	35M	=	546	-199	AAAGTCAAAATTAAAGTTCAATACTCACCATCATA	<<<<<.<<<<<<<<<<<<;<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:3:285:417:147	147	chr2	712	99	35M	=	529	-218	AGTCAAAATTAAAGTTCAATACTCACCATCATAAA	<..)<<<<;<<<<7<;-<<;<<<<<;8<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:325:544:349	83	chr2	716	99	35M	=	515	-236	AAAATTAAAGTTCAATACTCACCATCATAAATACA	<<<<57<<<7<;6<<<<;<7<7;<<7<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:2:33:357:858	163	chr2	716	99	35M	=	870	189	AAAATTAAAGTTCAATACTCACCATCATAAATACA	<<<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:78:806:800	83	chr2	717	99	40M	=	564	-193	AAATTAAAGTTCAATACTCACCATCATAAATACACACAAA	::;9:<<<;<<:<<<<:<.<1:<<1<<<<<<;<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:41:314:1173	147	chr2	718	99	35M	=	554	-199	AATTAAAGTTCAATACTCACCATCATAAATACACA	<<2**<<82/<<<<<<<<<<9<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:82:963:128	163	chr2	719	99	35M	=	905	221	ATTAAAGTTCAATACTCACCATCATAAATACACAC	<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<<;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:240:719:799	99	chr2	720	99	35M	=	900	215	TTAAAGTTCAATACTCACCATCATAAATACACACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:93:634:323	147	chr2	721	99	35M	=	550	-206	TAAAGTTCAATACTCACCATCATAAATACACACAA	<<<<;<;<<<<;;<<2<:<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:12:1335:1372	163	chr2	721	99	40M	=	906	225	TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTA	<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<99::.:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:116:738:142	147	chr2	722	99	35M	=	568	-189	AAAGTTCAATACTCACCATCATAAATACACACAAA	<:<7;+:<<:<<<;<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:2:49:330:699	83	chr2	722	99	35M	=	540	-217	AAAGTTCAATACTCACCATCATAAATACACACAAA	===/=;========;=;==================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:7:273:562:954	147	chr2	722	99	35M	=	539	-218	AAAGTTCAATACTCACCATCATAAATACACACAAA	;<<+;95<<<;5;<<;:<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:6:77:1529:522	147	chr2	722	99	35M	=	562	-195	AAAGTTCAATACTCACCATCATAAATACACACAAA	<<<;7;,<<<<<<.<,6<<6<<<<<<<;<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:67:1467:1447	163	chr2	722	99	35M	=	898	211	AAAGTTCAATACTCACCATCATAAATACACACAAA	<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:251:819:772	99	chr2	726	99	36M	=	881	191	TTCAATACTCACCATCATAAATACACACAAAAGTAC	<3<<<9<9<3<</<<<<<<59<3<9<<</9/++*/'	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:144:492:61	147	chr2	728	99	35M	=	564	-199	AAATACTCACCATCATAAATACACACAAAAGTACA	+;;3;,:7<:;<<7<<<<<<<;;<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:11	H0:i:1	H1:i:0
+EAS54_73:7:200:65:291	99	chr2	728	99	35M	=	930	237	CAATACTCACCATCATAAATACACACAAAAGTACA	<<<<1<<<<<<<<<<<<<<<<<<<:<8<<<<:<;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:130:609:467	99	chr2	728	99	35M	=	877	184	CAATACTCACCATCATAAATACACACAAAAGTACA	==8=====;==8==;=4=;;8=====;6=177.==	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:216:47:302	147	chr2	729	99	35M	=	557	-207	AATACTCACCATCATAAATACACACAAAAGTACAA	<<;<8<:<6<<<;<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:7:4:234:610	83	chr2	729	84	35M	=	560	-204	AAAAATCAACATCACAAATACACACAAAAGTACAA	<:+:'+&<+'<+'2&<:<7<2<':2<:<<7<7<<<	MF:i:18	Aq:i:22	NM:i:4	UQ:i:31	H0:i:0	H1:i:0
+EAS54_81:8:271:180:509	99	chr2	729	99	35M	=	896	202	AATACTCACCATCATAAATACACACAAAAGTACAA	=============================='====	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:41:530:663	163	chr2	730	99	35M	=	908	213	ATACTCACCATCATAAATACACACAAAATTACAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;;<<	MF:i:18	Aq:i:74	NM:i:1	UQ:i:22	H0:i:1	H1:i:0
+EAS114_39:4:30:570:902	83	chr2	730	99	35M	=	561	-204	ATACTCACCATCATAAATACGCACAAAAGTACAAA	<:<6:6<&:<<6<<<<<<<<.<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:13	H0:i:0	H1:i:1
+EAS1_105:1:87:430:995	99	chr2	731	67	35M	=	909	213	TACTCACCATCATAAATACACACAAAATTACAAAA	<<;<<7;;;<;<<777;7(77;;1;7;%117;,7(	MF:i:18	Aq:i:30	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS114_28:7:215:863:521	163	chr2	732	99	36M	=	890	194	ACTCACCATCATAAATACACACAAAAGTACAAAACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:267:394:437	83	chr2	735	99	35M	=	544	-226	AAACATCATAAATACACACAAAAGTACAAAACTCA	&<&,<8.<;<<<;<8<8<7<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:2	UQ:i:10	H0:i:1	H1:i:0
+EAS1_108:6:94:294:387	83	chr2	736	99	35M	=	578	-193	ACCATCATAAATACACACAAAAGTACAAAACTCAC	779=53=9===;=:=;=========;=========	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:38:332:54	163	chr2	737	99	36M	=	904	203	CCATCATAAATACACACAAAAGTACAAAACTCACAG	<;<<<<<<<<<<<<<<<<<<<<<<<<<<<0;;;<;;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:8:165:441:708	83	chr2	737	99	35M	=	550	-222	CCATCATAAATACACACAAAAGTACAAAACTCACA	6+<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:246:177:525	147	chr2	738	98	35M	=	549	-224	CATCATAAATACACACAAAAGTAAAAAACTCACAG	%<(4<2<<<<<:<;<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_26:5:43:114:617	83	chr2	738	99	35M	=	579	-194	AATCATAAATACACACAAAAGTACAAAACTCACAG	+=22=6=================9===========	MF:i:18	Aq:i:52	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS1_99:8:152:778:228	163	chr2	739	99	35M	=	915	211	ATCATAAATACACACAAAAGTACAAAACTCACAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:3:24:319:429	83	chr2	740	99	35M	=	582	-193	TAATAAATACACACAAAAGTACAAAACTCACAGGT	0%=3%=3====<=9=====89==93==9=6=====	MF:i:18	Aq:i:56	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS51_66:5:210:674:911	99	chr2	740	99	35M	=	904	199	TCATAAATACACACAAAAGTACAAAACTCACAGGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:88:451:1773	99	chr2	742	99	35M	=	902	195	ATAAATACACACAAAAGTACAAAACTCACAGGTTT	;;:::<:;:<<;:6::;:;;:::;;<;;;367177	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:2:168:1878	147	chr2	743	37	35M	=	560	-218	TAAATACACACAAAAGTAGAAAACGCACCAGTTTT	*3/6)9.;;;;;;;;5;;);;;3;(;;;+(;7.)3	MF:i:130	Aq:i:37	NM:i:4	UQ:i:32	H0:i:0	H1:i:0
+EAS188_7:5:115:249:673	83	chr2	743	99	35M	=	552	-226	TAAATACACACAAAAGTACAAAACTCACAGGTTTT	:<<<;<<<;<9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:178:187:610	99	chr2	744	99	35M	=	903	194	AAATACACACAAAAGTACAAAACTCACAGGTTTTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:2:9:49:661	83	chr2	747	99	35M	=	591	-191	TACACACAAAAGTACAAAACTCACAGGTTTTATAA	<<6<5<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:157:361:309	147	chr2	747	99	35M	=	589	-193	TACACACAAAAGTACAAAACTCACAGGTTTTATAA	:<-<5<0<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:103:443:166	83	chr2	747	99	35M	=	565	-217	TACACACAAAAGTACAAAACTCACAGGTTTTATAA	7<4<4<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:8:49:182:192	147	chr2	750	99	35M	=	582	-203	ACACAAAAGTACAAAACTCACAGGTTTTATAAAAC	<5<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:12:630:707	99	chr2	751	99	35M	=	915	199	CACAAAAGTACAAAACTCACAGGTTTTATAAAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:7:94:1440:2016	83	chr2	751	99	35M	=	564	-222	CACAAAAGTACAAAACTCACAGGTTTTATAAAACA	:<8<<<<9<<9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:206:741:810	163	chr2	753	99	35M	=	929	210	CAAAAGTACAAAACTCACAGGTTTTATAAAACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:-;<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:250:698:842	83	chr2	753	99	34M	=	554	-233	AAAAAGTACAAAACTCACAGGTTTTATAAAACAA	)<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:39	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+EAS54_81:6:265:251:147	83	chr2	754	99	35M	=	581	-208	AAAAGTACAAAACTCACAGGTTTTATAAAACAATT	<<<<::<8<<<;<;8<8<<<<<<<<:<<<<<<<<<	MF:i:18	Aq:i:50	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:71:644:1792	83	chr2	754	84	35M	=	589	-200	AAAAGTACAAAACTCACAGGTTTTATAAAACAATT	<<<<;<<<<<<:;/<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:6:108:958:42	83	chr2	755	81	35M	=	584	-206	AAAGTACAAAACTCACAGGTTTTATAAAACAATTA	<<<;;</<<<<;<<<<<<<<<<<<<<<<<<<<<<+	MF:i:18	Aq:i:9	NM:i:1	UQ:i:27	H0:i:0	H1:i:3
+B7_597:8:48:805:860	147	chr2	755	78	35M	=	563	-227	AAAGTACAAAACTCACAGGTTTTATAAAACAATTA	<<<;3<;7<<97<7<<<<7<4<<<<<<<<<<;8<+	MF:i:18	Aq:i:13	NM:i:1	UQ:i:27	H0:i:0	H1:i:3
+B7_591:3:179:496:161	163	chr2	756	99	36M	=	919	199	AAGTACAAAACTCACAGGTTTTATAAAACAATTAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+	MF:i:18	Aq:i:49	NM:i:2	UQ:i:53	H0:i:1	H1:i:0
+EAS56_59:3:166:626:836	83	chr2	757	99	35M	=	567	-225	AGTACAAAACTCACAGGTTTTATAAAACAATTAAT	<;;7<<<<<<;<7;<<<<<<<<<<<<7<<<<<<<+	MF:i:18	Aq:i:28	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS114_28:5:23:944:377	147	chr2	757	75	36M	=	579	-214	AGTACAAAACTCACAGGTTTTATAAAACAATTAATT	<;7;8<<<<:<;<:<<<<<<<<<<<<<;<<<<<<<;	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_45:1:100:979:1863	147	chr2	757	85	35M	=	583	-209	ATTACAAAACTCACAGGTTTTATAAAACAATTAAT	6&,*3;6;66;9(572692;;;79;4)9;96;59+	MF:i:18	Aq:i:23	NM:i:3	UQ:i:51	H0:i:0	H1:i:0
+EAS219_1:3:90:219:528	83	chr2	758	75	35M	=	576	-217	GTACAAAACTCACAGGTTTTATAAAACAATTAATT	;:<5<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_108:5:89:942:84	83	chr2	759	74	35M	=	562	-232	TACAAAACTCACAGGTTTTATAAAACAATTAATTG	===================>=>>>==>>===>==>	MF:i:130	Aq:i:74	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_108:6:159:493:275	99	chr2	760	72	35M	=	939	214	ACAAAACTCACAGGTTTTATAAAACAATTAATTGA	=====3=============================	MF:i:130	Aq:i:72	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS139_11:1:81:1019:558	163	chr2	760	77	35M	=	926	201	ACAAAACTCACAGGTTTTATAAAACAATTAATTGA	<<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7<	MF:i:130	Aq:i:77	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS51_62:7:162:195:761	163	chr2	767	30	18M4I13M	=	922	190	TCACAGGTTTTATAAAACAATTAATTGAGACTACA	<<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;;	MF:i:130	Aq:i:30	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+B7_597:3:115:646:430	147	chr2	768	45	17M4I14M	=	582	-217	CACAGGTTTTATAAAACAATTAATTGAGACTACAG	5;5<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:45	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_30:6:243:209:110	163	chr2	768	48	17M4I14M	=	920	187	CACAGGTTTTATAAAACAATTAATTGAGACTACAG	<<<<<;<;<<<;<<<<<<<<<<<;<:;<<:;;+85	MF:i:130	Aq:i:48	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_108:2:266:994:429	147	chr2	769	76	16M4I15M	=	612	-188	ACAGGTTTTATAAAACAATTAATTGAGACTACAGA	</<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_30:5:32:461:154	99	chr2	769	71	16M4I15M	=	945	211	ACAGGTTTTATAAAACAATTAATTGAGACTACAGA	<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<+<;;	MF:i:130	Aq:i:71	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_39:6:7:492:1088	99	chr2	769	57	16M4I15M	=	926	192	ACAGGTTTTATAAAACAATTAATTGAGACTACAGA	<<<<<<<<<<<<<<<<<<<<<<<<7<:<<<<<<6;	MF:i:130	Aq:i:57	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_95:6:174:650:125	147	chr2	770	76	15M4I16M	=	600	-201	CAGGTTTTATAAAACAATTAATTGAGACTACAGAG	===;===============================	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS56_59:6:89:457:591	147	chr2	770	69	15M4I16M	=	585	-216	CAGGTTTTATAAAACAATTAATTGAGACTACATAG	797<<9<<<<<<<3<7<<<<<<<<<<)<<<<<07<	MF:i:130	Aq:i:69	NM:i:1	UQ:i:15	H0:i:0	H1:i:0
+EAS114_39:2:38:670:564	99	chr2	770	73	15M4I16M	=	930	195	CAGGTTTTATAAAACAATTAATTGAGACTACAGAG	<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;<5<;	MF:i:130	Aq:i:73	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS188_7:4:92:693:228	147	chr2	770	75	14M4I17M	=	601	-200	AAGGTTTTATAAAAAAATTAATTGAGACTACAGAG	6=77=<<=======&====================	MF:i:130	Aq:i:75	NM:i:1	UQ:i:28	H0:i:0	H1:i:0
+EAS218_1:4:61:1369:440	163	chr2	770	47	15M4I16M	=	964	229	CAGGTTTTATAAAACAATTAATTGAGACTACAGAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<8	MF:i:130	Aq:i:47	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_26:4:123:1001:580	83	chr2	771	43	14M4I17M	=	617	-185	AGGTTTTATAAAACAATTAATTGAGACTACAGAGC	<.00..3<6<<<<<<<3;<<08<<<<<6<<<<<<<	MF:i:130	Aq:i:43	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_39:4:10:1312:1558	163	chr2	771	76	14M4I17M	=	928	192	AGGTTTTATAAAACAATTAATTGAGACTACAGAGC	5<<<<<<<<<<<<<<<<<<<<<<<;;<<<<<;8;<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS220_1:8:45:178:1321	83	chr2	771	77	14M4I17M	=	606	-196	AGGTTTTATAAAACAATTAATTGAGACTACAGAGC	<<<<<<<<<<<<<<<<<:<<:<<<<<<<<<<<<<<	MF:i:130	Aq:i:77	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS56_59:5:125:137:58	163	chr2	772	76	13M4I18M	=	932	195	GGTTTTATAAAACAATTAATTGAGACTACAGAGCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS192_3:3:285:349:797	83	chr2	773	76	12M4I19M	=	604	-200	GTTTTAAAAAACCAATAATTGAGACTACAGAGCAA	;;<<<7.:<<<..<.<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:1	UQ:i:13	H0:i:0	H1:i:0
+EAS114_45:5:56:1757:1319	163	chr2	775	67	10M4I21M	=	957	217	TTTATAAAACAATTAATTGAGACTACAGAGCAACT	;;;;9;;;;;;;;;;;;;4;9;98;;;;;9388&7	MF:i:130	Aq:i:67	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+B7_591:3:291:404:199	83	chr2	777	76	8M4I24M	=	612	-197	TATAAAACAATTAATTGAGACTACAGAGCAACTAGG	<<<<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS54_65:7:159:253:353	83	chr2	778	67	7M4I24M	=	613	-196	ATAAAACAATTAATTGAGACTACAGAGCAACTAGG	<8<<<<:<<;;<<<<<<<<<<<;<<<<<<<<<<<<	MF:i:130	Aq:i:67	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS56_57:1:122:38:103	163	chr2	778	79	7M4I24M	=	972	229	ATAAAACAATTAATTGAGACTACAGAGCAACTAGG	<<<<<<<<<<<<<<<<;<<<<<<<<3<<<<9<8;<	MF:i:130	Aq:i:79	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS188_4:5:103:870:105	147	chr2	778	44	7M4I24M	=	595	-214	ATAAAACAATTAATTGAGACTACAGAGCAACTAGG	<<<<<<<<<<<<<=<:<;<<<<<<<<<<*<<<<<<	MF:i:130	Aq:i:44	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_105:8:24:718:322	163	chr2	779	23	35M	=	953	209	ACAATTAATTGAGACTACAGACCAATTATGTAAAA	5/7<3+<;<1<<1<95<.&&.&&.<&)5)1)17<%	MF:i:130	Aq:i:23	NM:i:3	UQ:i:18	H0:i:0	H1:i:0
+EAS51_64:6:118:41:489	83	chr2	779	76	35M	=	588	-226	ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA	<+<<;<<<38<<<<5<<3<<<<3<<8<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS56_61:3:165:665:220	83	chr2	779	76	35M	=	618	-196	ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA	<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS114_30:6:238:803:383	99	chr2	779	75	35M	=	954	210	ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA	<<<<<<<<<<<<;<<<<<;<;<<;<<;<<<9<;<<	MF:i:130	Aq:i:75	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS1_105:3:232:364:583	99	chr2	780	71	35M	=	956	211	CAATTAATTGAGACTACAGAGCAACTAGGTAAAAA	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<	MF:i:130	Aq:i:71	NM:i:0	UQ:i:0	H0:i:0	H1:i:0
+EAS139_19:2:2:1217:398	83	chr2	780	99	40M	=	608	-212	CAATTAATTGAGACTACAGAGCAACTAGGTAAAAAATTAA	+;;:9<<66<<<;+<<7<<<<;<<+;<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:3	UQ:i:73	H0:i:1	H1:i:0
+B7_593:2:81:435:410	99	chr2	782	99	36M	=	966	220	ATTAATTGAGACTACAGAGCAACTAGGTAAAAAATT	<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<;<<;;	MF:i:18	Aq:i:29	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+B7_593:3:115:649:259	147	chr2	782	99	36M	=	617	-201	ATTAATTGAGAATACAGAGCAACTAGGTAAAAAATT	;<;<<;<<<<;&<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:3	UQ:i:58	H0:i:0	H1:i:1
+EAS1_93:3:181:93:694	163	chr2	783	99	35M	=	954	206	TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT	++<<<<<<;<<<<<<:;8<<;<<<5;<;<<<+<<<	MF:i:18	Aq:i:28	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS114_30:1:188:863:790	163	chr2	783	98	35M	=	969	221	TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT	++<;<<;;;:<<<<:<:<<:1<<1<<<6:6;4;;4	MF:i:18	Aq:i:27	NM:i:2	UQ:i:54	H0:i:0	H1:i:0
+EAS1_93:2:313:711:530	163	chr2	784	99	35M	=	968	219	TAATTGAGACTACAGAGCAACTAGGTAAAAAATTA	+<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<:	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_589:7:154:26:712	99	chr2	786	99	35M	=	959	208	ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC	<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:185:87:475	163	chr2	786	99	36M	=	949	199	ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:69:1593:819	163	chr2	786	99	40M	=	977	231	ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTAC	<<<<<<<<<<<<<<;<<<<<;;<:<<<<<:<<<<<:777:	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:309:187:267	83	chr2	786	99	35M	=	616	-205	ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC	<:0;<;<4<<7<<<<:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:82:1540:77	83	chr2	786	99	35M	=	619	-202	ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC	<48;<;</;<<<<<<:<<0<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:193:420:78	147	chr2	787	99	35M	=	607	-215	TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA	81<<;<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:261:267:597	83	chr2	787	86	35M	=	617	-205	TTGAGAATAAAGAGCAACTAGGTAAAAAATTAACA	*-1<9<+1<+<<<<:<<;9<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:41	NM:i:2	UQ:i:20	H0:i:0	H1:i:1
+EAS56_59:4:262:928:237	99	chr2	787	99	35M	=	971	219	TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:262:53:888	163	chr2	787	99	35M	=	965	213	TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA	<<<<<<<<;<<<<<<<<<<;<<;<;<;6<<;<;;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:138:211:582	99	chr2	788	99	35M	=	957	204	TGAGACTACAGAGCAAATAGGTAAAAAATTAACAT	<<;<<<<<<<<<<<<<&;<;<7<<;<<<<<<<5<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_597:7:113:408:211	99	chr2	789	99	35M	=	952	198	GAGACTACAGAGCAACTAGGTAAAAAATTAACATT	<<<<<<<<<<<<<<<:&<<<&:<<<<<<<<<<;:/	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:3:79:879:15	147	chr2	790	99	35M	=	626	-199	AGACTACAGAGCAACTAGGTAAAAAATTAACATTA	<;;5;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:325:795:213	83	chr2	790	99	35M	=	618	-207	AGACTACAGAGCAACTAGGTAAAAAATTAACATTA	<<<0<<;<<<<;<<;:<<<<<<<<<<<;<<<<<9<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:4:22:206:150	83	chr2	792	99	35M	=	619	-208	AAAAAAGAGCAACTAGGTAAAAAATTAACATTACA	8&)<)<<<<+<<+<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:3	UQ:i:21	H0:i:1	H1:i:0
+EAS56_59:5:181:713:140	147	chr2	793	84	35M	=	615	-213	CTACAGAGCAACAAGGTAAAAAATTAACATTACAA	78<+<7<-7;;;&<5<7<<<<7<<<<<<<<<<<7<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_589:7:76:306:561	163	chr2	794	89	35M	=	987	228	TACAGAGCAACTAGGTAAAAAATTAACATTACAAC	<<)<<<<<<8<<8<<<<<<<;;;<<1<<3;=7<<9	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:4:325:352:67	83	chr2	794	99	35M	=	622	-207	TACAGAGCAACTAGGTAAAAAATTAACATTACAAC	;<8<<<;;<<7<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:310:287:420	99	chr2	794	99	35M	=	965	206	TACAGAGCAACTAGGTAAAAAATTAACATTACAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:5:74:329:459	83	chr2	795	99	35M	=	623	-207	ACAGAGCAACTAGGTAAAAAATTAACATTACAACA	</<;<8/<<9<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:57:1342:1166	99	chr2	796	99	35M	=	964	203	CAGAGCAACTAGGTAAAAAATTAACATTACAACAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:3:542:428	163	chr2	797	99	35M	=	965	203	AGAGCAACTAGGTAAAAAATTAACATTACAACAGG	7<4<<<6<<,<9)<<<<6<,<<7<<7<<<<<<<<1	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:97:892:419	83	chr2	800	99	35M	=	621	-214	GCAACTAGGTAAAAAATTAACATTACAACAGGAAC	;8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:82:1051:921	83	chr2	800	99	40M	=	616	-224	GCAAATAGGTAAAAAATTAACATTACAACAGGAACAAAAC	3-::-7<;+:9<;<<<5<;9,::53-;:3<<<<9<<3<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS1_95:5:263:511:936	147	chr2	801	99	35M	=	629	-207	CAAATAGGTAAAAAATTAACATTACAACAGGAACA	+<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS114_26:7:157:876:302	163	chr2	801	99	35M	=	964	198	CAACTAGGTAAAAAATTAACATTACAACACGAACA	2<<;<<<22<<<<<<77<<<<22<7<<<<%-<<1<	MF:i:18	Aq:i:66	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS54_65:2:127:288:655	163	chr2	803	99	35M	=	999	231	ACTAGGTAAAAAATTAACATTACAACAGGAACAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:83:731:540	147	chr2	804	99	35M	=	623	-216	CTAGGTAAAAAATTAACATTACAACAGGAACAAAA	;7<:+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:82:843:1838	99	chr2	804	99	35M	=	999	230	CTAGGTAAAAAATTAACATTACAACAGGAACAAAA	;<<;:;;<<<;;<<<<;;<<;;;;;<;;;;68887	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:71:994:576	147	chr2	805	99	35M	=	655	-185	TAGGTAAAAAATTAACATTACAACAGGAACAAAAC	<<9;;<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:24:415:944	99	chr2	805	99	35M	=	974	204	TAGGTAAAAAATTAACATTACAACAGGAACAAAAC	<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:3:73:1458:1337	83	chr2	806	99	35M	=	609	-232	AGGTAAAAAATTAACATTACAACAGGAACAAAACC	<</<<<<<<<6:<::<<<1<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:142:353:398	163	chr2	807	99	35M	=	977	205	GGTAAAAAATTAACATTACAACAGGAACAAAACCT	=================================9=	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:46:522:426	163	chr2	807	99	35M	=	964	192	GGTAAAAAATTAACATTACAACAGGAACAAAACCT	=======================:==;<===78==	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:59:871:351	163	chr2	808	99	35M	=	963	190	GTAAAAAATTAACATTACAACAGGAACAAAACCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:6:235:505:553	163	chr2	808	99	35M	=	987	214	GTAAAAAATTAACATTACAACAGGAACAAAACCTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:;:	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:60:1420:660	83	chr2	808	99	35M	=	649	-194	GTAAAAAATTAACATTACAACAGGAACAAAACCTC	99<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:180:89:582	147	chr2	809	99	36M	=	650	-195	TAAAAAATTAACATTACAACAGGAACAAAACCTCAT	;<<<<<<4<<<:<<<<<<<<<6<<<<<<<<<<;<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:323:196:855	83	chr2	809	99	35M	=	642	-202	TAAAAAATTAACATTACAACAGGAACAAAACCTCA	&<<<<<<09<<7<7;<;<<0<<<<<;<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:295:547:216	163	chr2	809	99	35M	=	970	196	TAAAAAATTAACATTACAACAGGAACAAAACCTCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:126:361:250	99	chr2	810	99	35M	=	1002	227	AAAAAATTAACATTACAACAGGAACAAAACCTCAT	<<<<<<;9<<<<<<<<<<<<<<;;;<<<;<664;;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:266:133:789	99	chr2	810	99	35M	=	988	213	AAAAAATTAACATTACAACAGGAACAAAACCTCAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:175:149:296	83	chr2	811	99	35M	=	614	-232	AAAAATTAACATTACAACAGGAACAAAACCTCATA	=;==26==;==;================7======	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:5:136:260:254	99	chr2	813	99	35M	=	988	210	AAATTAACATTACAACAGGAACAAAACCTCATATA	<<<<<<<<<<<<<<<<<<><<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:85:1521:58	147	chr2	813	99	40M	=	639	-214	AAATTAACATTACAACAGGAACAAAACCTCATATATCAAT	:::86<<:<<8<<<<;<<8<<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:164:719:947	99	chr2	813	99	35M	=	1005	227	AAATTAACATTACAACAGGAACAAAACCTCATATA	<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<<<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:50:257:341	163	chr2	813	99	35M	=	971	193	AAATTAACATTACAACAGGAACAAAACCTCATATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<6<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:5:117:33:262	83	chr2	814	99	35M	=	642	-207	AATTAACATTACAACAGGAACAAAACCTCATATAT	<<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:8:90:706:1276	163	chr2	814	99	35M	=	980	201	AATTAACATTACAACAGGAACAAAACCTCATATAT	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:<:<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:116:966:193	163	chr2	815	99	35M	=	967	187	ATTAACATTACAACAGGAACAAAACCTCATATATC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:59:742:549	147	chr2	816	99	35M	=	642	-209	TTAACATTACAACAGGAACAAAACCTCATATATCA	-<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:74:213:877	99	chr2	816	99	35M	=	996	215	TTAACATTACAACAGGAACAAAACCTCATATATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_610:3:85:219:371	163	chr2	817	99	35M	=	967	185	TAACATTACAACAGGAACAAAACCTCATATATCAA	<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<;<;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:176:653:957	163	chr2	819	82	35M	=	982	198	ACATTACAACAGGAACAAAACCTCATATATCAATA	????????????<<???@<<<<<@<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:64:526:339	163	chr2	819	96	35M	=	1019	235	ACATTACAACAGGAACAAAACCTCATATATCAATA	<<<<<<<<;<<<<<<<<<<7<:<<<<<<<<<8:<:	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:97:743:602	83	chr2	821	99	34M	=	644	-211	ATTACAACAGGAACAAAACCTCATATATCAATAT	<(&<:<<&<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:2	H1:i:6
+B7_610:2:75:887:149	163	chr2	823	99	35M	=	1004	216	TACAACAGGAACAAAACCTCATATATCAATATTAA	<<<<<<<<<<<<<<;<<<<<<<;<<<<<<<;<;;;	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS221_1:2:73:955:728	83	chr2	823	44	35M	=	660	-198	TACAACAGGAACAAAACCTCATATATCAATATTAA	;<-<<6<;<<<6<<<<;7<6<<<<<<<<<<<<<<<	MF:i:18	Aq:i:14	NM:i:0	UQ:i:0	H0:i:3	H1:i:18
+EAS1_108:2:102:543:160	163	chr2	825	99	35M	=	977	187	CAACAGGAACAAAACCTCATATATCAATATTAACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<:<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS114_28:2:55:562:403	83	chr2	825	99	36M	=	643	-218	CAACAGGAACAAAACCTCATATATCAATATTAACTT	+<<&<<<<<<<<<<+<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+B7_593:1:19:695:59	99	chr2	826	99	36M	=	988	198	AACAGGAACAAAACCTCATATATCAATATTAACTTT	<<<<<<<<<<<;<<<<<<<<<;<<;;<;<<7<<<<;	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS221_1:2:8:327:522	163	chr2	826	99	35M	=	1001	210	AACAGGAACAAAACCTCATATATCAATATTAACTT	<<<<<<<<<<:<<<<<<<<<<:<<<<<<<<<:<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS114_45:6:90:561:850	163	chr2	827	85	35M	=	1004	212	ACAGGAACAAAACCTCATATATCAATATTAACTTT	;;;;;;;;;;;;;;;;;;;;;;;;9;9;6;77777	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:2	H1:i:25
+EAS56_61:5:209:824:866	83	chr2	828	73	35M	=	665	-198	CAGCAACAAAACCTCATATATCAATATTAACTTTG	;<:&<<:<<<<;<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:1	UQ:i:5	H0:i:1	H1:i:7
+EAS139_11:2:31:628:1820	83	chr2	828	98	35M	=	675	-188	CAGGAACAAAACCTCATATATCAATATTAACTTTG	<<<<<<:<<<<:6<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS220_1:4:6:1178:1105	147	chr2	830	93	35M	=	657	-208	GGAACAAAACCTCATATATCAATATTAACTTTGAA	<:<<9<<<<::7<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:11
+EAS114_28:4:305:707:258	99	chr2	831	58	36M	=	992	197	GAACAAAACCTCATATATCAATATTAACTTTGAATA	9<<<<<<<<<<<<;<<-<<;;<;<<9<<;<<+99;7	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:2	H1:i:9
+EAS54_67:3:114:736:433	163	chr2	832	63	35M	=	998	201	AACAAAACCTCATATATCAATATTAACTTTGAATA	;<<9<8;<<<<8<8<;<<;;;0<<8;<;<<47;;;	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+B7_591:7:157:447:758	99	chr2	833	99	36M	=	994	197	ACAAAACCTCATATATCAATATTAACTTTGAATAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_591:4:159:508:571	99	chr2	834	84	36M	=	989	191	CAAAACCTCATATATCAATATTAACTTTGAATAAAA	<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS54_65:7:68:825:405	163	chr2	835	30	35M	=	1015	215	AAAACCTCATATATCAATATTAACTTTGAATAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;9	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+B7_593:3:102:856:670	99	chr2	836	99	36M	=	1025	225	AAACCTCATATATCAATATTAACTTTGAATAAAAAG	<<<<<<<;<<<;<<;:<<<<<<<<<<:;;<<;<<<7	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:260:827:289	163	chr2	836	99	35M	=	999	198	AAACCTCATATATCAATATTAACTTTGAATAAAAA	<<<<2<<<<;<<<<;<<<<<<:<<<&-<8<<88<3	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS114_28:1:220:801:282	147	chr2	837	99	36M	=	660	-213	AACCTCATATATCAATATTAACTTTGAATAAAAAGG	;7;87;===;==;====:===<==7===========	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:57:1675:720	147	chr2	841	99	35M	=	684	-192	TCATATATCAATATTAACTTTGAATAAAAAGGGAT	<,<<<<<<:<<<<<<<<:9<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:297:949:26	83	chr2	842	99	35M	=	676	-201	CATATATCAATATTAACTTTGAATAAAAAGGGATT	5<;<;<;:<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:1:76:34:691	89	chr2	843	58	35M	*	0	0	ATATATCAATATTAACTTTGAATAAAAAGGGATTA	<<<<<<16<<<<<916<<<499<966161919<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:5:98:995:929	83	chr2	844	99	35M	=	680	-199	TATAACAATATTAACTTTGAATAAAAAGGGATTAA	&<+<'7<<+<&<<<7+4<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:63	NM:i:1	UQ:i:6	H0:i:1	H1:i:0
+EAS139_19:3:58:923:1915	163	chr2	846	99	40M	=	1007	201	TATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCC	<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<:::::	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:181:476:394	83	chr2	847	99	35M	=	666	-216	AACAATATTAACTTTGAATAAAAAGGGATTAAATT	<+;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS112_32:7:322:391:742	147	chr2	847	99	35M	=	667	-215	ATCAATATTAACTTTGAATAAAAAGGGATTAAATT	<63<<<<9<<<:<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:8:17:437:1378	83	chr2	847	99	35M	=	676	-206	ATCAATATTAACTTTGAATAAAAAGGGATTAAATT	<<7<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:155:375:623	163	chr2	849	99	35M	=	1029	215	CAATATTAACTTTGAATAAAAAGGGATTAAATTCC	0<<<<<;<<<<<<<<<<<<<4<<8<<<<<<<<;<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:2:29:729:70	163	chr2	850	51	35M	=	1009	194	ANTATTANCTTTGANNAAAAAGGGATTAAATTCCC	:!<:<<8!::::5:!!:.77::33888633:8777	MF:i:130	Aq:i:51	NM:i:3	UQ:i:0	H0:i:0	H1:i:0
+EAS54_65:7:117:452:744	83	chr2	850	99	35M	=	676	-209	AATATTAACTTTGAATAAAAAGGGATTAAATTCCC	<;;<;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:50	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:288:384:444	83	chr2	855	99	35M	=	696	-194	TAACTTTGAATAAAAAGGGATTAAATTCCCCCACT	;=9;;<====<=;=/=9;<========<=======	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:133:514:754	163	chr2	855	63	36M	=	1036	217	TAAATTTGAATAAAAAGGGATTAAATTCCCCCACTT	***&,,,+(*,*********+*)*(***(**((*)(	MF:i:18	Aq:i:19	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS139_19:5:68:306:409	147	chr2	856	99	40M	=	682	-214	AACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG	::2:7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:3:155:758:710	163	chr2	859	98	35M	=	1048	224	TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG	=======8================6=:7===:=:=	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:39:208:644	147	chr2	859	99	35M	=	704	-190	TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG	78899;;;;4;;;;;;;;;;;;;;;;;;8;;8;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:16:438:245	89	chr2	860	65	35M	*	0	0	TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA	8*8<5'<77;;;;;7<7<<7-<;<<<;;<<<;;79	MF:i:32	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:145:635:390	83	chr2	860	99	35M	=	673	-222	TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA	+9;<<;<<<<<;;;<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:6:187:996:432	147	chr2	860	99	36M	=	693	-203	TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG	;<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:123:924:645	163	chr2	861	84	36M	=	1045	220	TGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA	<<<<<<<<<<<<;<<<<<<;<<<<<<<6:<7<1<+<	MF:i:18	Aq:i:11	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:146:961:63	163	chr2	861	86	35M	=	1041	215	TGAATAAAAAGGGCTTAAATTCCCCCACTTAAGGG	<<+<<<<::+1<;&<<88<<<<;;.<0;;85(;(8	MF:i:18	Aq:i:37	NM:i:2	UQ:i:12	H0:i:0	H1:i:1
+EAS114_30:6:4:665:771	69	chr2	862	0	*	=	862	0	GTGCTTTATCTGATATCAATGCCGATAAACTGCCT	<<<<<<<<<<<<%<8<3:7:77<(7,:3(:&2:(0	MF:i:192
+EAS114_30:6:4:665:771	137	chr2	862	71	35M	=	862	0	GAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA	<;<<;<18<;<8<<<<;<;;<<<<1<<<<6;;;;;	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:45:601:439	83	chr2	864	99	35M	=	691	-208	ATAAAAAGGGATTAAATTCCCCCACTTAAGAGATA	<8<<<<<<1<<<<<<<<)<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:4:126:966:514	163	chr2	865	99	35M	=	1027	197	TAAAAAGGGATTAAATTCCCCCACTTAAGAGATAT	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:76:1765:700	83	chr2	866	99	35M	=	680	-221	AAAAAGGGATTAAATTCCCCCACTTAAGAGATATA	77777;;;;7;7;<;;;;+;;<9<<<79;<1<<77	MF:i:18	Aq:i:63	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:155:807:19	99	chr2	867	99	35M	=	1074	242	AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG	<<<<<<<<<<<<<<<<9+<<<<<<9<<9;4<<<<:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:226:885:729	99	chr2	867	98	35M	=	1037	205	AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG	<<<;<<<<<<;<;<<<<<<<:;<<;4;%;<<;<<.	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:1:156:196	99	chr2	867	77	40M	=	1042	215	AAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGG	<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<:;9:9	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:52:1144:509	147	chr2	867	99	35M	=	706	-196	AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG	<<<<:<<<<<<<<<<;::;:<;<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:73:735:329	99	chr2	868	99	35M	=	1035	202	AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA	================;==;====;=;=======;	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:11:801:386	163	chr2	868	97	35M	=	1061	228	AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA	<<<<<<<<<<8<<<<<:4<::<854:5<:::;4+4	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:4:150:94:843	99	chr2	868	75	35M	=	1050	217	AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA	<<<<<<<<7<<<6<<<<<<<<<<<6<<62<<<<<2	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:255:796:239	147	chr2	869	99	35M	=	692	-212	AAGGGATTAAATTCCCCCACTTAAGAGATAGAGAT	<<3;;<7:<<<;(7<<7;<<;<<<<<<<<<7<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:22	H0:i:0	H1:i:1
+B7_589:5:147:405:738	163	chr2	870	99	35M	=	1048	213	AGGGATTAAATTCCCCCACTTAAGAGATATAGATT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:2:33:357:858	83	chr2	870	99	35M	=	716	-189	AGGGATTAAATTCCCCCACTTAAGAGATATAGATT	<;<:<<<<<<<<<;<9<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:122:398:994	83	chr2	871	99	35M	=	708	-198	GGGATTAAATTCCCCCACTTAAGAGATATAGATTG	95:<9<<<<:9<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_105:2:146:374:692	147	chr2	874	99	35M	=	690	-219	ATTAAATTCCCCCACTTAAGAGATATAGATTGGCA	<4:<<<1:<:<::<<<;<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:119:428:415	163	chr2	876	99	36M	=	1037	197	TAAATTCCCCCACTTAAGAGATATAGATTGGCAGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;<;;;	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:7:168:247:414	147	chr2	876	99	35M	=	698	-213	TAAATTCCCCCACTTAAGAGATATAGATTGGCAGA	,;;;,146<6;6<<8<<<<1<8<<<<<<<<<<;1<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:130:609:467	147	chr2	877	99	35M	=	728	-184	AAATTCCCCCACTTAAGAGATATAGATTGGCAGAA	===:2===;<====>==>=>=>=>>>==>>>=>>>	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:57:366:844	83	chr2	877	99	40M	=	708	-209	AAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT	;;;7:8&555<,;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:3:236:475:254	163	chr2	880	99	35M	=	1051	206	TTCCCCCACTTAAGAGATATAGATTGGCAGAACAG	<<<<<<<<<<<<<<<<<<<<<<<<<:::<:;</;/	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:251:819:772	147	chr2	881	99	36M	=	726	-191	TCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT	6+7++1<<%<<<<<<<+<+<9<<99<9<<<<<<9<<	MF:i:18	Aq:i:59	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:36:481:1079	83	chr2	881	99	40M	=	707	-214	TCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAA	:11+)*<4;<<<<<<<<<;;<<<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:29:411:1208	147	chr2	882	99	40M	=	698	-224	CCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAA	766+6<996<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:62:1076:540	99	chr2	882	99	35M	=	1066	219	CCCCCACTTAAGAGATATAGATTGGCAGAACAGAT	<<<<<<<<<<;<<<<<<<<<<<<<<<<;;<<;<7;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:189:530:40	83	chr2	883	99	36M	=	698	-221	CCCCACTTAAGAGATATAGATTGGCAGAACAGATTT	883;<<<<<<<<<:<<<<<<<<3<;<<<<<<<<;<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:113:856:319	163	chr2	884	99	35M	=	1067	216	CCCACTTAAGAGATATAGATTGGCAGAACAGATTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:55:296:1457	99	chr2	884	99	35M	=	1061	212	CCCACTTAAGAGATATAGATTGGCAGAACAGATTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:15:881:1932	99	chr2	886	92	35M	=	1061	210	CACTTAAGAGATATAGATTGGCAGAACAGATTTAA	<<<<<<<<<<<<<<<;<<<<:<<<2<26<8<<;;.	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:116:157:612	147	chr2	889	99	35M	=	707	-217	TTAAGAGATATAGATTGGCAGTACAGATTTAAAAA	;;<<<<<<<<<<<<<<<<;<</<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+EAS114_28:7:215:863:521	83	chr2	890	99	36M	=	732	-194	TAAGAGATATAGATTGGCAGAACAGATTTAAAAACA	;<<<<<<<<<<<<<;<<;<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:254:572:431	163	chr2	891	97	35M	=	1048	192	AAGAGATATAGATTGGCAGAACAGATTTAAAAACA	<<<<<<<<<<<<<<<<;<<<<<<<<<<<99;;;;;	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:273:424:207	163	chr2	891	99	35M	=	1066	210	AAGAGATATAGATTGGCAGAACAGATTTAAAAACA	<,<,<9<<9<<<<<<<<<<79<,599,<191<99+	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:4:571:820	163	chr2	891	99	35M	=	1071	215	AAGAGATATAGATTGGCAGAACAGATTTAAAAACA	<<<<<<<<<<<9<<;9<;;;<;6;:<<<3:;;;:6	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:36:1231:1381	147	chr2	891	99	35M	=	708	-218	AAGAGATATAGATTGGCAGAACAGATTTAAAAACA	<<<<<<;<<<<<<<<<8<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:66:718:481	99	chr2	891	99	40M	=	1072	221	AAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAAC	<<<<<<<<<<<<<<;<<<<<<<<;<<<<<<<;<<<:1:;:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:22:632:176	163	chr2	894	99	36M	=	1091	233	AGATATAGATTGGCAGAACAGATTTAAAAACATGAA	<<<<<;<<<<<<;<<;<:<<<:<<:<<<;<<<;;;:	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:271:180:509	147	chr2	896	99	35M	=	729	-202	ATATAGATTGGCAGAACAGATTTAAAAACATGAAC	<<<<<<<<<9<:<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:198:564:731	163	chr2	898	99	35M	=	1089	226	ATAGATTGGCAGAACAGATTTAAAAACATGAACTA	<<<<<;<<<<<<;<<:<<;9<<<<<<<<1;<<58<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:67:1467:1447	83	chr2	898	99	35M	=	722	-211	ATAGATTGGCAGAACAGATTTAAAAACATGAACTA	<<<<<::<<:<<<<:<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:172:827:592	83	chr2	899	99	35M	=	703	-231	TAGATTGGCAGAACAGATTTAAAAACATGAACTAA	8<<<<;7;7<<<<;<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:240:719:799	147	chr2	900	99	35M	=	720	-215	AGATTGGCAGAACAGATTTAAAAACATGAACTAAC	<:<<<<<:<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:24:1345:1627	73	chr2	900	78	35M	=	900	0	AGATTGGCAGAACAGATTTAAAAACATGAACTAAC	<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<8<3	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:24:1345:1627	133	chr2	900	0	*	=	900	0	NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	MF:i:192
+EAS139_19:1:58:726:1746	163	chr2	900	99	40M	=	1061	201	AGATTGGCAGAACAGATTTAAAAACATGAACTAACTATAT	<<<<<<<<<<<<<<<<<<<6<<<<8<<<<<<<<:8:8:88	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:88:451:1773	147	chr2	902	99	35M	=	742	-195	ATTGGCAGAACAGATTTAAAAACATGAACTAACTA	973776;;;;;;;;;::;;;;;;;;;;;;;;3;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:178:187:610	147	chr2	903	99	35M	=	744	-194	TTGGCAGAACAGATTTAAAAACATGAACTAACTAT	66:,:<7<<<<<<<1<<<<<<<<<<<<<<<2<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:6:38:332:54	83	chr2	904	99	36M	=	737	-203	TGGCAGAACAGATTTAAAAACATGAACTAACTATAT	8;;&<;<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:210:674:911	147	chr2	904	99	35M	=	740	-199	TGGCAGAACAGATTTAAAAACATGAACTAACTATA	27;2<;<<5<<<<;;<<<<<;<<<<<<;<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:82:963:128	83	chr2	905	99	35M	=	719	-221	GGCAGAACAGATTTAAAAACATGAACTAACTATAT	585<;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:2:12:1335:1372	83	chr2	906	99	40M	=	721	-225	GAAGAACAGATTTAAAAACATGAACTAACTATATGCTGTT	:&;;;<*<<<9<<<<<<<<<<<<<<4<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS114_39:1:98:641:1040	163	chr2	907	99	35M	=	1085	213	CAGAACAGATTTAAAAACATGAACTAACTATATGC	<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:8:41:530:663	83	chr2	908	99	35M	=	730	-213	AGAACAGATTTAAAAACATGAACTAACTATATGCT	=8=;*=5==;;=====:=====;===;========	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:87:430:995	147	chr2	909	67	35M	=	731	-213	GAAAAGAGTTAAAAACATGAACTAACTATATGCTG	1<4%81<..1<<<<<0<<<<<0.<<9<<(<6<<6<	MF:i:18	Aq:i:30	NM:i:2	UQ:i:17	H0:i:0	H1:i:1
+B7_595:3:85:964:950	163	chr2	910	99	35M	=	1095	220	AACAGATTTAAAAACATGAACTAACTATATGCTGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;:	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:8:68:570:705	99	chr2	910	99	35M	=	1100	225	AACAGATTTAAAAACATGAACTAACTATATGCTGT	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<8<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:198:503:669	99	chr2	912	99	35M	=	1107	230	CAGATTTAAAAACATGAACTAACTATATGCTGTTT	<<<<<<<<<<;8<<<<<;<<<<<<;<;<8<<8<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:273:545:1001	163	chr2	913	99	35M	=	1088	210	AGATTTAAAAACATGAACTAACTATATGCTGTTTA	<<<<<<<<<<<<<<<;;<<<<<<;<8;28<8;<<8	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:152:778:228	83	chr2	915	99	35M	=	739	-211	ATTTAAAAACATGAACTAACTATATGCTGTTTACA	<;;7=<<<<<<;<<<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:1:53:463:1132	163	chr2	915	99	40M	=	1109	234	ATTTAAAAACATGAACTAACTATATGCTGTTTACANGAAA	<<<<<<<<<<<<<<<<<<<<<;<<<8<<<<<<<8<!1488	MF:i:18	Aq:i:71	NM:i:1	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:12:630:707	147	chr2	915	99	35M	=	751	-199	ATTTAAAAACATGAACTAACTATATGCTGTTTACA	<:<<<<<<<;<<<<<9<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:179:119:876	163	chr2	917	60	35M	=	1112	230	TTAAAAACATGAACTAACTATATGCTGTTTACCAG	<<<<<<<7<<<<<<<8<<<6<<<<<<7<<<:0&<0	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:1	H1:i:1
+EAS1_97:6:308:667:658	99	chr2	918	10	35M	=	1116	233	TAAAAACATGAACTAACTATATCCTTCTTACAATA	9<96<<<;<96<<9<51<<<<<1:9++<9*%4;*5	MF:i:18	Aq:i:10	NM:i:4	UQ:i:45	H0:i:0	H1:i:0
+EAS114_28:5:163:832:715	163	chr2	918	99	36M	=	1085	203	TAAAAACATGAACTAACTATATGCTGTTTACAAGAA	<<0;<9<<<<<<<<<<<<9<<<<<<<<<<<<;;;<6	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:3:179:496:161	83	chr2	919	99	36M	=	756	-199	AAAAACATGAACTAACTATATGCTGTTTACAAGAAA	<<<<<9<<<<<7<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:8:13:325:483	163	chr2	919	99	35M	=	1101	217	AAAAACATGAACTAACTATATGCTGTTTACAAGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_103:7:139:578:951	163	chr2	919	98	35M	=	1095	211	AAAAACATGAACTAACTATATGCTGTTTACAAGAA	<<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<0;;	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_108:8:19:929:765	99	chr2	919	98	35M	=	1069	185	AAAAACATGAACTAACTATATGCTGTTTACAAGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;77<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_57:5:214:644:390	163	chr2	919	72	35M	=	1082	198	AAAAACATGAACTAACTATATGCTGTTTACAAGAA	<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<;<;	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_30:6:243:209:110	83	chr2	920	48	35M	=	768	-187	AAAACATGAACTAACTATATGCTGTTTACAAGAAA	;<;;;:<:<:;<<;;<;<;<;7<<;<<;;<;<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:247:900:123	99	chr2	920	99	35M	=	1123	238	AAAACATGAACTAACTATATGCTGTTTACAAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;<;	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS51_62:7:162:195:761	83	chr2	922	30	35M	=	767	-190	AACATGAACTAACTATATGCTGTTTACAAGAAACT	<<8<<:<<:<<<<<<<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS1_103:2:184:980:396	163	chr2	923	99	35M	=	1092	204	ACATGAACTAACTATATGCTGTTTACAAGAAACTC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:2:162:272:415	99	chr2	923	83	35M	=	1112	224	ACATGAACTAACTATATGCTGTTTACAAGAAACTC	<<<<<<<<<<<<<<<<<<<<<<;<<<<<9;<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:4:184:237:476	163	chr2	925	99	35M	=	1101	211	ATGAACTAACTATATGCTGTTTACAAGAAACTCAT	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;<;;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:202:341:984	99	chr2	926	99	35M	=	1094	203	TGAACTAACTATATGCTGTTTACAAGAAACTCATT	=========================4;========	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:107:738:484	99	chr2	926	75	35M	=	1097	206	TGAACTAACTATATGCTGTTTACAAGAAACTCATT	<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:7:492:1088	147	chr2	926	57	35M	=	769	-192	TGAACTAACTATATGCTGTTTACAAGAAACTCATT	4;<<75<<::<:<<<-<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS139_11:1:81:1019:558	83	chr2	926	77	35M	=	760	-201	TGAACTAACTATATGCTGTTTACAAGAAACTCATT	<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:10:1312:1558	83	chr2	928	76	35M	=	771	-192	AACTAACTATATGCTGTTTACAAGAAACTCATTAA	<<:<<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:4:206:741:810	83	chr2	929	99	34M	=	753	-210	ACTAACTATATGCTGTTTACAAGAAACTCATTAA	<3<<;5<<<<<;:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:7:200:65:291	147	chr2	930	99	35M	=	728	-237	CTAACTATATGCTGTTTACAAGAAACTCATTAATA	;9<;3<<9<7<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:2:38:670:564	147	chr2	930	73	35M	=	770	-195	CTAACTATATGCTGTTTACAAGAAACTCATTAATA	3<<<3:<<<<<:;<<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:57:1114:2032	99	chr2	931	99	35M	=	1102	206	TAACTATATGCTGTTTACAAGAAACTCATTAATAA	<7<<<<<<<<<<<<<<<<<777<<<7<<<<<3<<7	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:125:137:58	83	chr2	932	76	35M	=	772	-195	AACTATATGCTGTTTACAAGAAACTCATTAATAAA	<<9;<<<<<;<;<<<<;<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:1:38:250:647	163	chr2	933	71	35M	=	1100	202	ACTATATGCTGTTTACAAGAAACTCATTAATAAAT	<<<<<<<9<<9<<<<<<<6<<<<<<<<<<8<779%	MF:i:18	Aq:i:0	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS192_3:6:116:464:261	99	chr2	934	99	35M	=	1107	208	CTATATGCTGTTTACAAGAAACTCATTAATAAAGA	<<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<;;8<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:168:69:249	163	chr2	936	99	35M	=	1125	224	ATATGCTGTTTACAAGAAACTCATTAATAAAGACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:246:647:765	163	chr2	937	99	35M	=	1119	217	TATGCTGTTTACAAGAAACTCATTAATAAAGACAT	;<<<<<<<<<;<&<<3+3<<<3<<9&</:/87</8	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:3:307:113:346	163	chr2	938	99	35M	=	1123	220	ATGCTGTTTACAAGAAACTCATTAATAAAGACATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<8	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:6:159:493:275	147	chr2	939	72	35M	=	760	-214	TGCTGTTTACAAGAAACTCATTAATAAAGACATGA	4949;<<<<<<<<<<<6<;<<<<;<<<<<*<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:257:288:731	99	chr2	939	99	34M	=	1131	227	TGCTGTTTACAAGAAACTCATTAATAAAGACATG	<<<<<<<<8<8<<;<;<<<;<<<5<;;88.8<6<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:231:815:626	163	chr2	940	99	35M	=	1119	214	GCTGTTTACAAGAAACTCATTAATAAAGACATGAG	<;<<<<9<<<<<<<<<<<<<<<<<;<<;5<<<;:;	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:93:77:1338	163	chr2	940	10	35M	=	1098	193	GCTGCTTACAAGAAGCGCATTAATAAAGACATGAG	<<<<*<2<<<:<4<&<6<8<4<::<8<<<<82;;7	MF:i:18	Aq:i:0	NM:i:3	UQ:i:35	H0:i:0	H1:i:0
+EAS114_45:2:54:1886:719	99	chr2	941	99	35M	=	1125	219	CTGTTTACAAGAAACTCATTAATAAAGACATGAGT	;;;9;;<;;;9;;;;;:;<9;:;;;;9;;;99799	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:94:273:165	99	chr2	945	99	35M	=	1128	218	TTACAAGAAACTCATTAATAAAGACATGAGTTCAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;:7	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:5:32:461:154	147	chr2	945	71	35M	=	769	-211	TTACAAGAAACTCATTAATAAAGACATGAGTTCAG	;;</<<<<<;:<.<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:303:131:673	163	chr2	947	99	36M	=	1112	201	ACAAGAAACTCATTAATAAAGACATGAGTTCAGGTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:10:106:737	163	chr2	947	99	35M	=	1106	194	ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT	<<<;<1<;<<<<<<9<<<<;;<<<<<99<<94008	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:214:950:32	163	chr2	947	99	35M	=	1132	220	ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT	>>=>>>>==>=>>>==>=>=:=====;=:=6:::6	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:10:686:1024	163	chr2	947	99	35M	=	1103	191	ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT	<:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:53:61:31	163	chr2	949	99	35M	=	1122	208	AAGAAACTCATTAATAAAGACATGAGTTCAGATAA	<<<7;<7<<<;7<;;<7<7<7<;5<73<<</%;/;	MF:i:18	Aq:i:66	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS114_28:6:185:87:475	83	chr2	949	99	36M	=	786	-199	AAGAAACTCATTAATAAAGACATGAGTTCAGGTAAA	<<4<<<+<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:235:899:847	99	chr2	950	99	35M	=	1112	197	AGAAACTCATTAATAAAGACATGAGTTCAGGTAAA	<<3<;<<<<<<<<<;;<<<<<<<+<<<+6<8<3/<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:193:661:771	163	chr2	952	99	35M	=	1129	212	AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG	<<<<<<<<<;<<<;;;<<<<<;<<<=;<:;5:9::	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:113:408:211	147	chr2	952	99	35M	=	789	-198	AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG	<:;:;:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:8:24:718:322	83	chr2	953	23	35M	=	779	-209	AACTCATTAATAATGTCATGAGTTCAGGTAAAGGG	5:+:0;**&+<00&<&<<<5<28<<;;<83<<<<<	MF:i:18	Aq:i:23	NM:i:2	UQ:i:10	H0:i:0	H1:i:0
+EAS56_61:5:263:314:696	163	chr2	953	99	35M	=	1117	199	AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG	<<<<<<<<<<<<<<;<<<<<<<<<<<<:<<;<775	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:93:312:331	163	chr2	953	99	35M	=	1145	227	AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:3:181:93:694	83	chr2	954	99	35M	=	783	-206	ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG	<4;8<<+<<:<<<<<<<<<<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:238:803:383	147	chr2	954	75	35M	=	779	-210	ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG	;;<;;<<<<<<<<<<<<<<<<;:<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:44:77:1255	163	chr2	955	99	35M	=	1113	193	CTCATTAATAAAGACATGAGTTCAGGTAAAGGGGT	;;;;;;;8;;;7;8;;;;;;;;;;886;;;76777	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:232:364:583	147	chr2	956	71	35M	=	780	-211	TCATTAATAAAGACATGAGTTCAGGTAAAGGGGTG	;%;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:256:354:173	163	chr2	957	99	36M	=	1121	200	CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:4:138:211:582	147	chr2	957	99	35M	=	788	-204	CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG	:<8;<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:61:631:567	99	chr2	957	99	35M	=	1131	209	CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:56:1757:1319	83	chr2	957	67	35M	=	775	-217	CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG	&7778<<<<<8<;<<:::;<:<4<<:<:;8<8<;<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:7:154:26:712	147	chr2	959	99	35M	=	786	-208	TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:10:975:766	163	chr2	959	99	35M	=	1166	242	TTAATAAAGACATGAGTTCAGGTAAAGGGGTGAAA	<<<<<<<<;<<<<;<:<<;<6;;<<<:6-:+1+;;	MF:i:18	Aq:i:64	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS54_73:5:220:733:736	99	chr2	959	99	35M	=	1143	219	TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<5<<;9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:46:1566:668	163	chr2	959	99	35M	=	1148	224	TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:7:59:871:351	83	chr2	963	99	35M	=	808	-190	TAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAG	;<<<<<:<;<<<4;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:46:522:426	83	chr2	964	99	35M	=	807	-192	AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA	<<<<<:<<<<<<1/<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:157:876:302	83	chr2	964	99	35M	=	801	-198	AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA	===:=8=;==:892=,28==88==28====8=;;8	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:61:1369:440	83	chr2	964	47	35M	=	770	-229	AAAGACATGATTTCAGGTAAAGGGGTGGAAAAAGA	<<<<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:23	H0:i:0	H1:i:1
+EAS221_1:6:57:1342:1166	147	chr2	964	99	35M	=	796	-203	AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA	<<<<<;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:310:287:420	147	chr2	965	99	35M	=	794	-206	AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT	<<<<;<;<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:262:53:888	83	chr2	965	99	35M	=	787	-213	AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:3:542:428	83	chr2	965	99	35M	=	797	-203	AAGACATGAGTTCAGGTACAGGGGTGGAAAAAGAT	<<876</3<8874:<8:<)<5<<<;<<<<7<<<:<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:8	H0:i:0	H1:i:1
+B7_593:2:81:435:410	147	chr2	966	99	36M	=	782	-220	AGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT	;<;;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:29	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:3:85:219:371	83	chr2	967	99	35M	=	817	-185	GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT	<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:116:966:193	83	chr2	967	99	35M	=	815	-187	GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT	===================================	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:30:432:228	163	chr2	967	99	35M	=	1145	213	GACATGAGTTCAGGGAAAGGGGTGGAAAAAGATGT	<<<<<<<<<<<<<<8<<<<<<<<<<<<:<<<<<;;	MF:i:18	Aq:i:47	NM:i:1	UQ:i:23	H0:i:0	H1:i:1
+B7_610:1:12:88:200	163	chr2	968	99	35M	=	1133	200	ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT	<<<<<<<<<<<;<<<<<<<;<<<:<<<<<<9<<5<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:2:313:711:530	83	chr2	968	99	35M	=	784	-219	ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT	<7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:74:866:49	163	chr2	969	99	35M	=	1143	209	CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC	====================9==91==<=6==;:=	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:7:248:17:435	99	chr2	969	99	35M	=	1139	205	CATGAGTTCAGGAAAAGGGGTGGAAAAAGATGTTC	<<<<8<<<888<+<<<<<;<:<<<<8<<<<<;3<3	MF:i:18	Aq:i:43	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+EAS114_30:1:188:863:790	83	chr2	969	98	35M	=	783	-221	CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC	;<7<<<55<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:75:1503:1399	163	chr2	969	99	40M	=	1130	201	CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC	<<<<<<<<<<<<<<<<<<9<<<;<<<<<<;<<<<:::711	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:2:56:155:49	99	chr2	970	99	35M	=	1145	210	ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT	<<<<<<<<<<<<<<<<<<<<<<;<<;<<<;<9<9;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_4:5:295:547:216	83	chr2	970	99	35M	=	809	-196	ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:4:262:928:237	147	chr2	971	99	35M	=	787	-219	TGAGTTCAGGTAAAGGTGTGGAAAAAGATGTTCTA	;<<<<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:26	H0:i:0	H1:i:1
+EAS219_1:1:50:257:341	83	chr2	971	99	35M	=	813	-193	TGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:1:122:38:103	83	chr2	972	79	35M	=	778	-229	GAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTAC	===;3<===:=======<=================	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:82:670:302	99	chr2	973	99	35M	=	1146	208	AGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:8:24:415:944	147	chr2	974	99	35M	=	805	-204	GTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC	<;;<<<<:<<<<<<<;<<<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:7:108:440:208	99	chr2	975	99	35M	=	1142	202	TTCAGGTAAAGGGGAGGAAAAAGATGTTCTACGCA	<<<;<<<<<<<<<</<<<<;<<<;<<;<;<64/:+	MF:i:18	Aq:i:43	NM:i:1	UQ:i:14	H0:i:0	H1:i:1
+B7_595:3:229:543:583	99	chr2	976	99	35M	=	1139	198	TCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAA	<<<<<<<<<<8<8<9<<<<8<<588<<<<*<2:2*	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:142:353:398	83	chr2	977	99	35M	=	807	-205	CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA	===================================	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:102:543:160	83	chr2	977	99	35M	=	825	-187	CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA	9==9=====;=====================<===	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:191:40:536	163	chr2	977	66	35M	=	1167	225	CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA	<<<<<<<<8<<;<<8<<;<;;<<8<<<<<</<74/	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:272:328:400	163	chr2	977	99	35M	=	1151	209	CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA	<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<7<;:7	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:69:1593:819	83	chr2	977	99	40M	=	786	-231	CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA	);::7<<<<:;<<<<<<<<<<<<<<<9<<9<3<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_597:3:133:707:886	99	chr2	978	99	35M	=	1146	203	AGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAAC	<<<<7;<<<<<<<<<;<<<<<<<<<<<<<5<;66<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_591:4:92:411:955	99	chr2	979	99	36M	=	1149	206	GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_61:8:60:358:494	99	chr2	979	44	35M	=	1179	235	GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<:<:<<;;4;	MF:i:18	Aq:i:14	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_597:7:41:34:211	163	chr2	980	99	35M	=	1164	219	GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3:;5;	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:40:1291:1045	99	chr2	980	99	35M	=	1167	222	GTAAAGGGGTGGAAAAAGATGTTCTACGCAACAAG	<<<<<<<<<5<<5<<<<7<<<<<<<<<5<9<&%73	MF:i:18	Aq:i:39	NM:i:2	UQ:i:9	H0:i:1	H1:i:0
+EAS218_1:8:90:706:1276	83	chr2	980	99	35M	=	814	-201	GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG	<;<<<<<<<;<<<<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_32:4:5:396:292	163	chr2	981	99	35M	=	1155	209	TAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGA	<<<<<<<<<<<<<<;;<<<<:<<<<;;<;;3/&+8	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:2:176:653:957	83	chr2	982	82	35M	=	819	-198	AAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA	===::=============<==<====<========	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS54_71:6:264:705:89	99	chr2	983	99	34M	=	1155	207	AAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA	<<<<<<<<<<;8<<<<<<<<<<<<<<<&<<,;;(	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:2:66:757:918	163	chr2	985	99	35M	=	1143	193	GGGGTGGAAAAAGATGTTCTACGCAAACAGAAACC	===================================	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:7:114:506:971	163	chr2	986	99	35M	=	1150	199	GGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA	===================================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:220:809:850	99	chr2	986	60	35M	=	1187	236	GGGGGGAAAAAGATGTGCTACACAAAAAGATTCCA	<<;7;<<0::8<-6:<0624-*<&-93-,8+(&08	MF:i:130	Aq:i:60	NM:i:4	UQ:i:64	H0:i:0	H1:i:0
+B7_589:7:76:306:561	83	chr2	987	89	35M	=	794	-228	GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA	9<7<<9<<<<<<7<<71<71*7<<<<<<<<<<1<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS192_3:6:235:505:553	83	chr2	987	99	35M	=	808	-214	GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA	;8518<<<<<;<;<<<;<<;<.<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:19:695:59	147	chr2	988	99	36M	=	826	-198	GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAAT	;+;8<<<<<<<<<<<5<<+<:<<;<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:5:136:260:254	147	chr2	988	99	35M	=	813	-210	GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA	;:;;<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_57:5:266:133:789	147	chr2	988	99	35M	=	810	-213	GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA	9;;<<<<<<<<<<<<5<<;<5<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_591:4:159:508:571	147	chr2	989	84	36M	=	834	-191	TGGAAAAAGATGTTCTACGCAAACAGAAACCAAATG	9<6<<<<<<<<<<<;<<;<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:166:84:766	163	chr2	990	99	35M	=	1167	212	GGAAAAAGATGTTCTACGCAAACAGAAACCAAATG	<<<<<<<<;<<<<<<<<;<<<<<<;<<<7<;::93	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_61:6:283:963:234	99	chr2	992	99	35M	=	1157	200	AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG	<<<<<<<<<<<<<<<;<<<<<<<<<<<;<<;<<;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:4:184:659:377	99	chr2	992	99	35M	=	1173	216	AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:305:707:258	147	chr2	992	58	36M	=	831	-197	AAAAAGATGTTCTACGCAAGCAGAAACCAAATGAGA	3<<7<,;<<<<0<66<6+<%<<<.<<<<<<<<<9<<	MF:i:18	Aq:i:17	NM:i:1	UQ:i:4	H0:i:0	H1:i:1
+EAS219_1:7:20:1444:328	99	chr2	993	99	35M	=	1149	191	AAAAGATGTTCTACGCAAACAGAAACCAAATGAGA	<<<<;<<<<<<<<;<<<<<<<<;<<<<<;<;;8:7	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:157:447:758	147	chr2	994	99	36M	=	833	-197	AAAGATGTTCTACGCAAACAGAAACCAAATGAGAGA	<<<;<<5<</<<6<5<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:37:763:1437	163	chr2	994	99	35M	=	1191	232	AAAGATGTTCTACGCAAACAGAAACCAAATGAGAG	;;;;;6;;;;;;;;;:;6;5;5;;;;;76;767/7	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:94:1273:1462	163	chr2	995	99	35M	=	1166	206	AAGATGTTCTACGCAAACAGAAACCAAATGAGAGA	<<<<<<<<<<<<:<<<<<<<<:<<<<:6:7;744;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:7:74:213:877	147	chr2	996	99	35M	=	816	-215	AGATGTTCTACGCAAACAGAAACCAAATGAGAGAA	<<<<<<<&<<-<-<<<7<<<<<77<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:2:168:61:867	163	chr2	997	99	35M	=	1188	226	GATGTTCTACGCAAACAGAAACCAAATGAGAGAAG	====7====================7======6==	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:307:252:632	163	chr2	998	99	35M	=	1142	179	ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<;;	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:37:604:389	99	chr2	998	99	35M	=	1188	225	ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG	<<<<<<<<<3<<<<<4<<<<<9<2;949<;35:95	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:147:687:428	99	chr2	998	99	35M	=	1159	196	ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:3:114:736:433	83	chr2	998	63	35M	=	832	-201	ATGTTCTACGCAAACAGAAACCAAGTGAGAGAAGG	<9<9+9;<6<9<<;9<<<<<;<<<99<<<<<<<<<	MF:i:18	Aq:i:18	NM:i:1	UQ:i:24	H0:i:0	H1:i:1
+B7_597:8:35:118:589	163	chr2	999	99	35M	=	1188	224	TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA	<<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<<9	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:2:127:288:655	83	chr2	999	99	35M	=	803	-231	TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA	<<:<3<<:<.<<<;<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:260:827:289	83	chr2	999	99	35M	=	836	-198	TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA	6;99+<<<<<<<<<<<<<<6<<<<<7<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:82:843:1838	147	chr2	999	99	35M	=	804	-230	TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA	888829;;;;;;;;;;;;;;:;;;;;;;;;;;;;;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:8:64:350:174	163	chr2	1000	99	35M	=	1166	201	GTTCTACGCAAACAGAAACCAAATGAGAGAAGGAG	<<<<<<<<<<<<<<<<<<<<<:<<<<<6<<<<<:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:2:8:327:522	83	chr2	1001	99	35M	=	826	-210	TTCTACGCAAACAGAAACCAAATGAGAGAAGGAGT	;;4;<-<-<<<7<<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:7:126:361:250	147	chr2	1002	99	35M	=	810	-227	TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA	72:;7</<<<:<-7<<:<<<<<<<:<6<+:<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:189:571:366	163	chr2	1002	99	35M	=	1194	227	TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA	<<<<<<<<<<<<<<<<<<<<<<<<<7<:<<99;;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:202:275:776	163	chr2	1002	99	36M	=	1196	230	TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAG	<<<<<<<<<<<<<<<<<<<<<;<<9<;;<<<;<;<;	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:194:998:663	163	chr2	1002	99	35M	=	1165	198	TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA	<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<8<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:30:599:589	99	chr2	1003	99	36M	=	1188	221	CTACGCAAACAGAAACCAAATGAGAGAAGGAGCAGC	<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;<&<<;	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS112_34:4:92:412:435	99	chr2	1003	89	35M	=	1184	216	CTACGCAAACAGAAACCAANTGAGAGAAGGAGTAG	<<<<<<<4<<<<<<<<<66!<<<<<<6<<77<<97	MF:i:18	Aq:i:43	NM:i:1	UQ:i:0	H0:i:0	H1:i:1
+B7_610:2:75:887:149	83	chr2	1004	99	35M	=	823	-216	TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC	:<:<0<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:2:1422:1820	163	chr2	1004	99	35M	=	1164	195	TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC	;7;;;;;;;;:;;;;;;;;;;;;;;;;;;;77777	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:90:561:850	83	chr2	1004	85	35M	=	827	-212	TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC	78376<;;9<;<<;:9<<<6;<;<;;8;;<;/;;;	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:4:164:719:947	147	chr2	1005	99	35M	=	813	-227	ACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCT	===,=========6====)================	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:5:154:952:558	99	chr2	1007	99	35M	=	1173	201	GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<:<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:58:923:1915	83	chr2	1007	99	40M	=	846	-201	GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA	:+;;;8<<<<<<,<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:253:175:31	99	chr2	1008	72	35M	=	1187	214	CAAACAGAAACCAAATGAGAGAAGGAGTAGCTATA	<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<:<;;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:2:29:729:70	83	chr2	1009	51	35M	=	850	-194	AAACAGAAACCAAATGAGAGAAGGAGTAGCTATAC	<<<:<<<<<<7<<<<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:174:157:573	163	chr2	1012	99	35M	=	1191	214	CAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:7:197:399:319	163	chr2	1012	99	35M	=	1189	212	TAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA	+<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;;<<;	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_65:7:68:825:405	83	chr2	1015	30	35M	=	835	-215	AAACCAAATGAGAGAAGGAGTAGCTATACTTATAT	<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:13:701:55	99	chr2	1015	99	36M	=	1187	208	AAACCAAATGAGAGAAGGAGTAGCTATACTTATATC	<<<<<<<<<9<<<9<<<<<<6<<<<<<<6<<6<<6+	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:128:555:941	153	chr2	1016	10	36M	*	0	0	AACCAAAAGAGAGAAGGAGTAGTTATACACATATCA	55--555560355$55555555.57757$7555577	MF:i:32	Aq:i:10	NM:i:4	UQ:i:58	H0:i:0	H1:i:0
+EAS219_FC30151:1:53:140:421	163	chr2	1016	99	35M	=	1185	204	AACCAAATGAGAGAAGGAGTAGCTATACTTATATC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:1:64:526:339	83	chr2	1019	96	35M	=	819	-235	CAAATGAGAGAAGGAGTATCTATACTTATATCAGA	3<<<7<<;<<<<<<<<<<<;<<<<;<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS192_3:3:194:378:230	163	chr2	1022	99	35M	=	1198	211	ATGAGAGAAGGAGTAGCTATACTTATATCAGATAA	<<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:45:239:851	163	chr2	1023	61	35M	=	1211	223	TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA	<<88;<208<9<;6<<<6269;94<&401-662&2	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:39:956:676	163	chr2	1023	99	35M	=	1191	203	TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA	;;;;;;;;;;;;9;;;;;;;;;;;;;;;9957777	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:15:1763:1143	99	chr2	1023	99	35M	=	1193	205	TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:309:109:987	163	chr2	1024	99	35M	=	1194	205	GAGAGAAGGAGTAGCTATACTTATATCAGATAAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<;<;;;	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_593:3:102:856:670	147	chr2	1025	99	36M	=	836	-225	AGAGAAGGAGTAGCTATACTTATATCAGATAAAGCA	;;<<<<:<<<:<<4<<<<<<<<;<<;<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:4
+B7_610:6:107:252:533	163	chr2	1025	60	35M	=	1173	183	AGAGAAGGAGTAGCTATACTTATATCAGATAAAGC	<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:3	H1:i:3
+EAS56_65:4:126:966:514	83	chr2	1027	99	35M	=	865	-197	AGAAGAAGTAGCTATACTTATATCAGATAAAGCAC	<4<<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:4	H0:i:1	H1:i:1
+EAS114_26:1:171:527:247	163	chr2	1027	67	35M	=	1194	202	AGAAGGAGTAGCTAGACTTATATCAGATAAAGCAC	=4==4===8==99=&=8+9=19+.2.6'=99+999	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:0	H1:i:3
+EAS1_105:1:234:185:359	163	chr2	1029	46	35M	=	1183	189	AAGGAGTAGCTATACTTATATCAGATAAAGCACAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;9--:	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:11
+EAS51_66:3:155:375:623	83	chr2	1029	99	35M	=	849	-215	AAGGAGTAGCTATACTTATATCAGATAAAGCACAC	;;;;<<:<<<<;<<;<<<<<<;<<;<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS139_19:5:4:939:2021	163	chr2	1031	99	40M	=	1197	206	GGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAAT	<<<<<<<<<<<<<<<<<<<<<97<<<;<<;<7;<<:48::	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:2
+EAS220_1:2:50:513:882	163	chr2	1031	99	35M	=	1192	196	GGAGTAGCTATACTTATATCAGATAAAGCACACTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;;	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:2	H1:i:14
+EAS1_103:5:188:20:592	163	chr2	1032	95	35M	=	1202	205	GAGTAGCTATACTTATATCAGATAAAGCACACTTT	<<<<<<<<<<<<<<<<<<<<;;<<<<:<<<;<;;<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:3	H1:i:16
+EAS114_45:3:35:896:1588	163	chr2	1032	91	35M	=	1205	208	GAGTAGCTATACTTATATCAGATAAAGCACACTTT	;;;;;;;;;;;;;;;;;;;;8;;;;;8;;;88989	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:3	H1:i:18
+EAS1_108:6:73:735:329	147	chr2	1035	99	35M	=	868	-202	TAGCTATACTTATATCAGATAAAGCACACTTTAAA	;;;9;<<7<<<<<<<<<<<<<<<<<<<2<<<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:7:133:514:754	83	chr2	1036	63	36M	=	855	-217	AGCTATACTTATATCAGATAAAGCACACTTTAAATC	;;4;<;<;<<<<<<<<;<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS218_1:4:62:561:531	163	chr2	1036	99	35M	=	1203	202	AGCTATACTTATATCAGATAAAGCACACTTTAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_593:6:119:428:415	83	chr2	1037	99	36M	=	876	-197	GCTATACTTATATCAGATAAAGCACACTTTAAATCA	84<<<<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_30:2:226:885:729	147	chr2	1037	98	35M	=	867	-205	GCTGAACTTACATCAGATAAAGCACACTTTAAATC	/*220%.(;<%<3.<<<4<<<<86;<8<<8<<<<<	MF:i:18	Aq:i:30	NM:i:3	UQ:i:36	H0:i:0	H1:i:1
+EAS1_108:1:189:863:213	163	chr2	1039	99	35M	=	1202	198	TATACTTATATCAGATAAAGCACACTTTAAATCAA	<<<<<<<<<<<<<<<<<<<<;<<<;<<<<;7<9;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_597:4:146:961:63	83	chr2	1041	86	35M	=	861	-215	TACTTATATCAGATAAAGCACACTTTAAATCAACA	7;;<<<<<;<<<7<<<<<<<<;;<<;<;<<;<<<7	MF:i:18	Aq:i:37	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:68:996:104	99	chr2	1041	70	35M	=	1214	208	TACTTATATCAGATAAAGCACACTTTAAATCAACA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:47:1791:444	163	chr2	1041	74	35M	=	1213	207	TACTTATATCAGATAAAGCACACTTTAAATCAACA	;3;;;;;;;;;;;;;;;;;;;;;;;;;;;877977	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:4:1:156:196	147	chr2	1042	77	40M	=	867	-215	ACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTA	:::::<<<<<<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:70:1349:1788	163	chr2	1043	99	35M	=	1203	195	ATTATATCAGATAAAGCACACTTTAAATCAACAAC	&<8<<<85:580;<:0-><;>588>9<>7:<0<9;	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_589:2:30:644:942	99	chr2	1045	83	35M	=	1229	219	TATATCAGATAAAGCACACTTTAAATCAACAACAG	<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<9;<9<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+B7_591:2:123:924:645	83	chr2	1045	84	36M	=	861	-220	TATATCAGATAAAGCACACTTTAAATCAACAACAGT	;<<<<*<<<<<<</7<2<8<<<<<<<4<<<<<<<<<	MF:i:18	Aq:i:11	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+B7_589:5:147:405:738	83	chr2	1048	99	35M	=	870	-213	ATCAGATAAAGCACACTTTAAATCAACAACAGTAA	<9/<:<<<<<<<<7</<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_61:3:155:758:710	83	chr2	1048	98	35M	=	859	-224	ATCAGATAAAGCACACTTTAAATCAACAACAGTAA	=46=4=5===:========:=7=7======11===	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_73:7:254:572:431	83	chr2	1048	97	35M	=	891	-192	ATCAGATAAAGCACACTTTAAATCAACAACAGTAA	<63<;<;<<<:7<:<7;<:<<<<:<<<<7<<<<:<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_57:7:33:954:724	163	chr2	1049	97	35M	=	1210	196	TCAGATAAAGCACACTTTAAATCAACAACAGTAAA	;<<<<<<<<<<<<<8<<<<:<;;<<;;<;<<;;;;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_63:6:102:816:260	99	chr2	1049	99	35M	=	1225	211	TCAGATAAAGCACACTTTAAATCAACAACAGTAAA	<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;;;;	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS192_3:5:197:914:256	99	chr2	1049	97	35M	=	1204	190	TCAGATAAAGCACACTTTAAATCAACAACAGTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8;:::	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_65:4:150:94:843	147	chr2	1050	0	35M	=	868	-217	CAGATACATCCCACTTTAAATCAACCACAGTAAAA	4<9<41*747*7<:9<:7:::<72;+<;::<7<<<	MF:i:18	Aq:i:0	NM:i:4	UQ:i:47	H0:i:0	H1:i:0
+EAS1_108:5:321:712:224	163	chr2	1051	58	35M	=	1220	204	AGATAAAGCACACTTTAAATCAACAACAGAAAAAT	<<<<<<<<2<<<<<<<<<<<<<<<:<<<<(<<:<,	MF:i:18	Aq:i:28	NM:i:1	UQ:i:7	H0:i:1	H1:i:2
+EAS114_32:3:236:475:254	83	chr2	1051	99	35M	=	880	-206	AGATAAAGCACACTTTAAATCAACAACAGTAAAAT	<:<<<<<;9<7<;<<<<<<<<<<9<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:72:1288:1211	99	chr2	1052	84	35M	=	1235	218	GATAAAGCACACTTTAAATCAACAACAGTAAAATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_65:2:264:157:150	99	chr2	1054	30	35M	=	1238	219	TAAAGCACACTTTAAATCAACAACAGTAAAATAAA	<<<<<<9<9<<<<.9;<<9&<97<;9933309605	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS1_95:7:310:800:761	163	chr2	1055	99	35M	=	1249	229	AAAGCACACTTTAAATCAACAACAGTAAAATAAAA	===========================+=======	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:88:465:1877	99	chr2	1055	99	35M	=	1212	192	AAAGCACACTTTAAATCAACAACAGTAAAATAAAA	<<<<<<<<<<;<<<<<<<<<<<<<<<<7<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:66:891:294	163	chr2	1057	99	35M	=	1233	211	AGCACACTTTAAATCAACAACAGTAAAATAAAACA	<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:3:100:735:530	163	chr2	1058	99	35M	=	1257	234	GCACACTTTAAATCAACAACAGTAAAATAAAACAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:68:440:424	99	chr2	1060	99	35M	=	1237	212	ACACTTTAAATCAACAACAGTAAAATAAAACAAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS220_1:8:66:1046:167	99	chr2	1060	99	35M	=	1241	216	ACACTTTAAATCAACAACAGTAAAATAAAACAAAG	<<<<<:<<<<<<<<<<<<<9<;77<9<7<<;<9;-	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_81:6:11:801:386	83	chr2	1061	97	35M	=	868	-228	CACTATAAATCAACAACAGTAAAATAAAACAAAGG	5<2:$6<<<38<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:3	H0:i:1	H1:i:1
+EAS114_28:2:141:7:963	163	chr2	1061	85	36M	=	1240	215	CACTTTAAATCAACAACAGTAAAATAAAACAAAGGA	<<<<<<<<<<<<;<:<<<<<<1<<&<;<;<<;,<;5	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:2:55:296:1457	147	chr2	1061	99	35M	=	884	-212	CACTTTAAATCAACAACAGTAAAATAAAACAAAGG	-<%63<<<<<1<<<<<5<<<<<<<<<<<<<<<7<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS139_19:1:58:726:1746	83	chr2	1061	99	40M	=	900	-201	CAATTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTC	&:&::;<<<76<<:<<6<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS221_1:8:15:881:1932	147	chr2	1061	92	35M	=	886	-210	CACTTTAAATCAACAACAGTAAAATAAAACAAAGG	)<4<<<<<<<4<<4<<4<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_95:5:284:212:932	99	chr2	1063	10	35M	=	1257	229	CTTTAAATCAACAACAATAAAAAAAAACAAAGGAG	<<9<<<<<<<<<<<<<&&<<<<5<<<<8<<<1:<:	MF:i:18	Aq:i:0	NM:i:2	UQ:i:25	H0:i:0	H1:i:0
+EAS139_19:4:18:1335:1514	99	chr2	1063	99	40M	=	1235	212	CTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCAT	<<<;<<<<<<<<<<<<<<<;<:<<;<<<<<<;<;<;;;9;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:273:424:207	83	chr2	1066	99	35M	=	891	-210	TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:62:1076:540	147	chr2	1066	99	35M	=	882	-219	TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC	6<<;:+=====5=:6===================2	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:113:856:319	83	chr2	1067	99	33M	=	884	-216	AAATCAACAACAGTAAAATAAAACAAAGGAGGT	<<<77<<:<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:8:19:929:765	147	chr2	1069	98	35M	=	919	-185	ATCAACAACAGTAAAATAAAACAAAGGAGGTCATC	<3+<<;<<;<<<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:88:54:900	163	chr2	1069	68	35M	=	1257	223	ATCAACAACAGAAAAATAAAACAAAGGAGGTCATC	.....&.....,.......................	MF:i:18	Aq:i:19	NM:i:1	UQ:i:11	H0:i:0	H1:i:1
+EAS56_63:7:109:22:383	163	chr2	1071	99	35M	=	1244	208	CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<;<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:8:4:571:820	83	chr2	1071	99	35M	=	891	-215	CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT	&<<7<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:255:441:47	99	chr2	1072	99	35M	=	1237	200	AACAACAGTAAAATAAAACAAAGGAGGTCATCATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<;:<;<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:3:66:718:481	147	chr2	1072	99	40M	=	891	-221	AACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATG	::5::1<;;<<<<<<1<<<<<<<<<<<<7<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:155:807:19	147	chr2	1074	99	35M	=	867	-242	CAACAGTAAAATAAAACAAAGGAGGTCATCATACA	:==4=5:====:============:==========	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:43:1229:1855	163	chr2	1074	99	35M	=	1244	205	CAACAGTAAAATAAAACAAAGGAGGTCATCATACA	<<<<<<<<<<<<<<<<<<<<<<<<<4<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:125:875:553	99	chr2	1075	99	36M	=	1233	194	AACAGTAAAATAAAACAAAGGAGGTCATCATACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<;	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:118:775:467	163	chr2	1075	99	35M	=	1245	205	AACAGTAAAATAAAACAAAGGAGGTCATCATACAA	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:301:161:195	99	chr2	1076	75	35M	=	1239	198	ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT	<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:54:695:952	99	chr2	1076	99	35M	=	1264	223	ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:77:589:741	163	chr2	1078	99	35M	=	1263	220	AGTAAAATAAAACAAAGGAGGTCATCATACAATGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:200:263:280	163	chr2	1078	99	35M	=	1236	193	AGTAAAATAAAACAAAGGAGGTCATCATACAATGA	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;8<;1	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:64:199:1288	99	chr2	1079	77	35M	=	1240	196	GTAAAATAAAACAAAGGAGGTCATCATACAATGAT	<<<<<<<<<<<<<<;<<<<<<<<<<<<<<;<<<;<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:27:228:31	99	chr2	1082	99	35M	=	1264	217	AAATAAAACAAAGGAGGTCATCATACAATGATAAA	<<<<<<<<<<<<<<<<<;9<:;<<<<<<75<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:214:644:390	83	chr2	1082	72	35M	=	919	-198	AAATAAAACAAAGGAGGTCATGATACAATGATAAA	<<<;<<<<<<<<<<<<<<<<<&<<<<<<<<<<<<<	MF:i:18	Aq:i:27	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS114_45:2:79:554:354	99	chr2	1082	63	35M	=	1242	195	AAATAAAACAAAGGAGGTCATCATACAATGATAAA	17;<;;+<<;;;;93;;:;3;;;;1;;;;<77744	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:303:542:924	163	chr2	1083	76	35M	=	1242	194	AATAAAACAAAGGAGGTCATCATACAATGATAAAA	<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:8:26:242:35	99	chr2	1084	99	35M	=	1251	202	ATAAAACAAAGGAGGTCATCATACAATGATAAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:5:163:832:715	83	chr2	1085	99	36M	=	918	-203	TAAAACAAAGGAGGTCATCATACAATGATAAAAAGA	;<<<<9<<<<<<<<;;<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:1:98:641:1040	83	chr2	1085	99	35M	=	907	-213	TAAAACAAAGGAGGTCATCATACAATGATAAAAAG	4<<<<7<<<<<<<<<:<<;<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:32:562:1695	99	chr2	1085	76	35M	=	1258	208	TAAAACAAAGGAGGTCATCATACAATGATAAAAAG	<<<<<<<<<<<<<<8<<<<<:<<<<<<<:<8<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:6:758:988	163	chr2	1087	99	35M	=	1253	201	AAACAAAGGAGGTCATCATACAATGATAAAAAGAT	3+;0;0;;;0;;;;;;5;;;9;;;;90;;;57560	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:5:273:545:1001	83	chr2	1088	99	35M	=	913	-210	AACAAAGGAGGTCATCATACAATGATAAAAAGATC	<7(<<72;<2;27<;:<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:2:74:656:272	163	chr2	1088	99	35M	=	1245	192	AACAAAGGAGGTCATCATACAATGATAAAAAGATC	<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:198:564:731	83	chr2	1089	99	35M	=	898	-226	ACAAAGGAGGTCATCATACAATGATAAAAAGATCA	<6<;<<<<<<:7<<;<<<8<<+<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:6:23:885:274	99	chr2	1089	99	35M	=	1289	235	ACAAAGGAGGTCATCATACAATGATAAAAAGATCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<;;<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:22:632:176	83	chr2	1091	99	36M	=	894	-233	AAAGGAGGTCATCATACAATGATAAAAAGATCAATT	<9<<<<<<<-;<;<<7;6;<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:184:980:396	83	chr2	1092	99	35M	=	923	-204	AAGGAGGTCATCATACAATGATAAAAAGATCAATT	<<;;<77;;<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:110:984:98	99	chr2	1092	99	36M	=	1270	214	AAGGAGGTCATCATACAATGATAAAAAGATCAATTC	98<<<<<<2<<<<<<;;<;;<<<5;5;<<;;<<<<+	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:1:202:341:984	147	chr2	1094	99	35M	=	926	-203	GGAGGTCATCATACAATGATAAAAAGATCAATTCA	<<<(<8&<92<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:219:40:833	163	chr2	1094	99	35M	=	1278	219	GGAGGTCATCATACAATGATAAAAAGATCAATTCA	<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:23:1126:1886	99	chr2	1094	99	35M	=	1268	209	GGAGGTCATCATACAATGATAAAAAGATCAATTCA	7<<<7<<<<<<<<7<<<<<<<<<<<<<;8<;<<5<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:3:85:964:950	83	chr2	1095	99	35M	=	910	-220	GAGGTCATCATACAATGATAAAAAGATCAATTCAG	<<8::<<;;<<<;<<6<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:139:578:951	83	chr2	1095	98	35M	=	919	-211	GAGGTCATCATACAATGATAAAAAGATCAATTCAG	;<0;:&<:9<<<7<<<<<<<<<<<<<<;<<<<<<<	MF:i:18	Aq:i:26	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:107:738:484	147	chr2	1097	75	35M	=	926	-206	GGTCATCATACAATGATAAAAAGATCAATTCAGCA	.8/<<<7<8<<<<<<<<<<<<<<<<9<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_39:4:93:77:1338	83	chr2	1098	10	35M	=	940	-193	GTCATCATACAATGAAAAAAAGATCAATTCAGCAA	<<7<7<<<<<1<7<<&97;;<1<;1<<7<;7<<;<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_610:8:68:570:705	147	chr2	1100	99	35M	=	910	-225	CATCATACAATGATAAAAAGATCAATTCAGCAAGA	4<;4<;;:<<<<<<<<;<<<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS51_62:1:38:250:647	83	chr2	1100	71	35M	=	933	-202	AATAATAAAATGATAAAAAGATCAATTCAGCAAGA	+<&+<1<,<<7<<7<<<<<<<1,<<<<7<<2<<<<	MF:i:18	Aq:i:0	NM:i:3	UQ:i:34	H0:i:0	H1:i:3
+EAS1_93:8:13:325:483	83	chr2	1101	99	35M	=	919	-217	ATCATACAATGATAAAAAGATCAATTCAGCAAGAA	;:;<;=:========;==========;========	MF:i:18	Aq:i:27	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:128:584:952	163	chr2	1101	99	35M	=	1277	211	ATCATACAATGATAAAAAGATCAATTCAGCAAGAA	<<<<<<<<<<<<<<+<;<<<<<<;<<<;<<<+<66	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:4:184:237:476	83	chr2	1101	99	35M	=	925	-211	ATCATACAATGATAAAAAGATCAATTCAGCAAGAA	<;2<;<4<<;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:4
+EAS51_64:6:300:622:86	163	chr2	1102	99	35M	=	1264	197	TCATACAATGATAAAAAGATCAATTCAGCAAGAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:57:1114:2032	147	chr2	1102	99	35M	=	931	-206	TATTACAATGATAAAAAGATCAATTCAGCAAGAAG	;+!5<4<<<<<<<<<<<<<;<&<;7<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:2	UQ:i:10	H0:i:1	H1:i:6
+B7_593:3:310:193:629	163	chr2	1103	99	36M	=	1267	200	CATACAATGATAAAAAGATCAATTCAGCAAGAAGAT	<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:6:529:366	99	chr2	1103	99	35M	=	1291	223	CATACAATGATAAAAAGATCAATTCAGCAAGAAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:10:686:1024	83	chr2	1103	99	35M	=	947	-191	CATACAATGATAAAAAGATCAATTCAGCAAGAAGA	&<<<3<<<<<<<<<<<<<<7<<<<<<<<<<7<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS114_45:7:14:978:1296	163	chr2	1104	90	35M	=	1249	180	ATACAATGATAAAAAGATCAATTCAGCAAGAAGAT	;6;;;;;;;;;;;:;;;;;;;6;;;;;;;;77777	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS56_57:2:237:855:581	99	chr2	1105	87	35M	=	1271	201	TACAATGATAAAAAGATCAATTCAGCAAGAAGATA	<;4<7<<<;47<<74<:*<<2:<<7.799:2<<9:	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:4
+EAS139_19:7:85:262:751	163	chr2	1105	99	40M	=	1305	240	TACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:::92	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:10:106:737	83	chr2	1106	99	35M	=	947	-194	ACAATGATAAAAAGATCAATTCAGCAAGAAGATAT	<-<<;<<<<<<<<<<<;<<<<;<<;<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:6
+B7_610:6:143:620:158	163	chr2	1107	99	35M	=	1283	211	CAATGATAAAAAGATCAATTCAGCAAGAAGATATA	<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS54_67:6:198:503:669	147	chr2	1107	99	35M	=	912	-230	CAATGATAAAAAGATCAATTCAGCAAGAAGATATA	5<<:<<;<<<<<<<;;<<9<<<<<<<<;<<<<;<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS192_3:6:116:464:261	147	chr2	1107	99	35M	=	934	-208	CAATGATAAAAAGATCAATTCAGCAAGAAGATATA	;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_73:5:263:557:988	99	chr2	1108	84	35M	=	1289	216	AATGATAAAAAGATCAATTCAGCAAGAAGATATAA	<<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<;<<<	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:8
+EAS139_19:1:53:463:1132	83	chr2	1109	99	40M	=	915	-234	ATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCC	;::;:<<<<<<<<:<<;<<<<8<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:46:1528:799	99	chr2	1109	96	35M	=	1306	232	ATGATAAAAAGATCAATTCAGCAAGAAGATATAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:7
+EAS54_81:7:324:472:791	99	chr2	1110	89	35M	=	1274	199	TGATAAAAAGATCAATTCAGCAAGAAGATATAACC	<<<<<<<<:<<<<<<<<<<<<<<:<<<<<<<<<:3	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+EAS54_61:8:4:173:814	163	chr2	1111	99	35M	=	1289	213	GATAAAAAGATCAATTCAGCAAGAAGATATAACCA	=====================<==========;==	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:4
+B7_593:3:303:131:673	83	chr2	1112	99	36M	=	947	-201	ATAAAAAGATCAATTCAGCAAGAAGATATAACCATC	<;<<<<<<<<:<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:235:899:847	147	chr2	1112	99	35M	=	950	-197	ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT	<7<<<<<<<<:<<<<:<</<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS1_105:8:179:119:876	83	chr2	1112	60	35M	=	917	-230	ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT	<<<<<<<7<<<<<<;;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_59:2:162:272:415	147	chr2	1112	83	35M	=	923	-224	ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT	=7=======;5==<<6==1==<=============	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS114_45:6:44:77:1255	83	chr2	1113	99	35M	=	955	-193	TAAAAAGATCAATTCAGCAAGAAGATATAACCATC	79998;;;9:;<696<;.<;;<<;<;<;<;;;<8;	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:2:162:257:203	163	chr2	1114	99	35M	=	1301	222	AAAAAGATCAATTCAGCAAGAAGATATAACCATCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:3:55:464:146	99	chr2	1114	99	35M	=	1295	216	AAAAAGATCAATTCAGCAAGAAGATATAACCATCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:6:308:667:658	147	chr2	1116	34	35M	=	918	-233	AAAGATCACTTCAGCAATAAGATATAACCATCCTA	<9;;;45;&<;&.<5683;84+<;<;+8<;<<8;<	MF:i:18	Aq:i:10	NM:i:2	UQ:i:23	H0:i:0	H1:i:0
+EAS56_57:4:98:862:154	163	chr2	1116	99	35M	=	1290	209	AAAGATCAATTCAGCAAGAAGATATAACCATCCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<:99<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_61:5:263:314:696	83	chr2	1117	99	35M	=	953	-199	AAGATCAATTCAGCAAGAAGATATAACCATCCTAC	<<;<;:<<<<7<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:83:1456:1854	163	chr2	1117	99	35M	=	1275	193	AAGATCAATTCAGCAAGAAGATATAACCATCCTAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:4:231:815:626	83	chr2	1119	99	35M	=	940	-214	GATCAATACAGCAAGAAGATATAACCATCCTACTA	'<4%<<<22<<,<<;<<4;<<<<<<<<<<<<<<7<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:17	H0:i:0	H1:i:1
+EAS114_32:4:246:647:765	83	chr2	1119	99	35M	=	937	-217	GATCAATTCAGCAAGAAGATATAACCATCCTACTA	9<+,<<&,39<,<;<<<<<<<&<<<<;0<<3;<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:256:354:173	83	chr2	1121	99	36M	=	957	-200	TCAATTCAGCAAGAAGATATAACCATCCTACTAAAT	-9<<:9<<;6<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:53:61:31	83	chr2	1122	99	35M	=	949	-208	CAATTCAGCAAGAAGATATAACCATCCTACTAAAT	5;;<95<<5<<<<<<<<<<:5;<<<<<<<<<<<<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:308:509:948	99	chr2	1123	99	36M	=	1298	211	AATTCAGCAAGAAGATATAACCATCCTACTAAATAC	<9<<<<<<<;<7<<;<<<<<<<;<<<<7<<;2;<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:2:247:900:123	147	chr2	1123	99	35M	=	920	-238	AATTCAGCAAGAAGATATAACCATCCTACTAAATA	;;;;.<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:3:307:113:346	83	chr2	1123	99	35M	=	938	-220	AATTCAGCAAGAAGATATAACCATCCTACTAAATA	<<<<9<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:1:168:69:249	83	chr2	1125	99	35M	=	936	-224	TTCAGCAAGAAGATATAACCATCCTACTAAATACA	;0;<;;<<<<<<<<<<<<<;<<<8<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:54:1886:719	147	chr2	1125	99	35M	=	941	-219	TTCAGCAAGAAGATATAACCATCCTACTAAATACA	883777;;:;;;;;;;;;;;;;;;;;;;;;;;;;;	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:94:273:165	147	chr2	1128	99	35M	=	945	-218	AGAAAGAAGATATAACCATCCTACTAAATACATAT	;3&;;:<<:<-<-<<8:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS1_95:7:155:530:532	163	chr2	1128	99	35M	=	1319	226	AGCAAGAAGATATAACCATCCTACTAAATACATAT	===================================	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:61:1885:163	163	chr2	1128	99	40M	=	1281	193	AGCAAGAAGATATAACCATCCTACTAAATACATATGCACC	<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<9::::4	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:193:661:771	83	chr2	1129	99	35M	=	952	-212	GCAAGAAGATATAACCATCCTACTAAATACATATG	:&<<<<<<<<<<<<<;<<<;<<;<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:6:75:1503:1399	83	chr2	1130	99	40M	=	969	-201	CAAGAAGATATAACCATCCTACTAAATACATATGCACCTA	&;;8;<<<;<<<<,6<<70<<7<<<<<<9<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:2:42:28:552	163	chr2	1131	99	35M	=	1294	198	AAGAAGATATAACCATCCTACTAAATACATATGCA	<<<<<<<<<<<<<<<<<<<<<<<<;<;<3<:;9;8	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:61:631:567	147	chr2	1131	99	35M	=	957	-209	AAGAAGATATAACCATCCTACTAAATACATATGCA	<<7<<<<<<<<</<<;<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:3:257:288:731	147	chr2	1131	99	35M	=	939	-227	AAGAAGATATAACCATCCTACTAAATACATATGCA	<<:<<7<<<<<;<5<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:2:214:950:32	83	chr2	1132	99	35M	=	947	-220	AGAAGATATAACCATCCTACTAAATACATATGCAC	=&==4======:;==6<==:===============	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:1:12:88:200	83	chr2	1133	99	35M	=	968	-200	GAAGATATAACCATCCTACTAAATACATATGCACC	9<<;<<<;<;6;<;:<<<7<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:256:444:399	163	chr2	1133	99	35M	=	1289	191	GAAGATATAACCATCCTACTAAATACATATGCACC	<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<-;<<8	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:174:753:617	99	chr2	1136	75	35M	=	1299	198	GATATAACCATCCTACTAAATACATATGCACCTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:115:226:443	99	chr2	1137	99	35M	=	1314	212	ATATAACCATCCTACTAAATACATATGCACCTAAC	<<<<<<<<<<<<<<<<;<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:26:1867:162	163	chr2	1137	70	35M	=	1299	197	ATATAACCATCCTACTAAATACATATGCACCTAAC	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78698	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:3:308:66:538	99	chr2	1138	99	35M	=	1321	218	TATAACCATCCTACTAAATACATATGCACCTAACA	<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:3:229:543:583	147	chr2	1139	99	35M	=	976	-198	ATAACCATCCTACTAAATACATATGCACCTAACAC	</<;+5<855;<6<<<<;<<<<<<9<<<<<<<<<<	MF:i:18	Aq:i:65	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:17:595:863	163	chr2	1139	89	35M	=	1289	185	ATAACCATCCTACTAAATACACATGCACCTAACTC	:<4:<<1:<<<9<+<+1<%<7&&9-71<17)7</4	MF:i:18	Aq:i:33	NM:i:2	UQ:i:19	H0:i:0	H1:i:1
+EAS51_62:7:248:17:435	147	chr2	1139	99	35M	=	969	-205	ATAACCATCCTACTAAATACATATGCACCTAACAC	<1<<88++<:<<:;<;<<<:<<<;<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:6:35:186:412	99	chr2	1139	99	35M	=	1306	202	ATAACCATCCTACTAAATACATATGCACCTAACAC	<<<<<<<<4<<<<<:<<<<<<:<<<<<<<<<;;<:	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:2:307:252:632	83	chr2	1142	99	35M	=	998	-179	ACCATCCTGCTAAATACATATGCACCTAACACAAG	<77<;,5<,9<<<<<<;<<<<<7<;<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:11	H0:i:0	H1:i:1
+EAS1_108:7:108:440:208	147	chr2	1142	99	35M	=	975	-202	CCCATCCTACTAAATACATATGCACCTAACACAAG	+35:486<<4<<<<<<<<<<<-<<<<<7<<)<<<-	MF:i:18	Aq:i:43	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+EAS1_95:7:74:866:49	83	chr2	1143	99	35M	=	969	-209	CCAACCTACTAAATACATATGCACCTAACACAAGA	:8<&<<<<7<<<<:<<<<<<8<5<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS54_61:2:66:757:918	83	chr2	1143	99	35M	=	985	-193	CCATCCTACTAAATACATATGCACCTAACACAAGA	<9<45;<<7<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:220:733:736	147	chr2	1143	99	35M	=	959	-219	CCATCCTACTAAATACATATGCACCTAACACAAGA	:;<77;<<9<<<<<9;<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:175:289:351	99	chr2	1144	99	35M	=	1319	210	CATCCTACTAAATACATATGCACCTAACACAAGAC	<<<<<<<<<<;<<<<<<<<;<<<<<<<<<<<9<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:2:56:155:49	147	chr2	1145	99	35M	=	970	-210	ATCCTACTAAATACATATGCACCTAACACAAGACT	;:5;;<5<<<<<<<<<<<<<<<<<<<<<<<<<<<=	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:299:336:613	99	chr2	1145	99	35M	=	1293	183	ATCCTACTAAATACATATGCACCTAACACAAGACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:4:30:432:228	83	chr2	1145	99	35M	=	967	-213	ATCCTACTAAATACATATGCACCTAACACAAGACT	<76<<<:<<<<<<<;<:<<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:5:93:312:331	83	chr2	1145	99	35M	=	953	-227	ATCCTACTAAATACATATGCACCTAACACAAGACT	<;;:;<6<<<<;<:<<<<<<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:3:133:707:886	147	chr2	1146	99	35M	=	978	-203	ACCTAATAAATACATATGCACCTAACACAAGACTA	%5-2;&6<<<<<;<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:2	UQ:i:9	H0:i:1	H1:i:0
+EAS51_62:3:50:312:219	163	chr2	1146	99	35M	=	1288	177	TCCTACTAAATACATATGCACCTAACACAAGACTA	<<<<<<<<<<<;<<<<<;<;<<<;<<<<<<;;;;;	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:82:670:302	147	chr2	1146	99	35M	=	973	-208	TCCTACTAAATACATATGCACCTAACACAAGACTA	%448<7<<<<<<7<<<<<&<<7<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:47:591:698	99	chr2	1146	99	35M	=	1313	202	TCCTACTAAATACATATGCACCTAACACAAGACTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:8:122:430:882	99	chr2	1147	99	35M	=	1338	226	CCTACTAAATACATATGCACCTAACACAAGACTAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:4:46:1566:668	83	chr2	1148	99	35M	=	959	-224	CTACTAAATACATATGCACCTAACACAAGACTACC	5<<:<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:4:92:411:955	147	chr2	1149	99	36M	=	979	-206	TACTAAATACATATGCACCTAACACAAGACTACCCA	2<+<<<<9<<<<<<<;+<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:96:419:327	99	chr2	1149	99	35M	=	1331	217	TACTAAATACATATGCACCTAACACAAGACTACCC	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;;9<9	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:20:1444:328	147	chr2	1149	99	35M	=	993	-191	TACTAAATACATATGCACCTAACACAAGACTACCC	9<3<<==;=<===;=<=====<<===========<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:198:59:675	163	chr2	1150	99	35M	=	1315	200	ACTAAATACATATGCACCTAACACAAGACTATCCT	<.<<<<<<;<<<<<<<<<<<**<;<;2<;6;&*2&	MF:i:18	Aq:i:45	NM:i:2	UQ:i:10	H0:i:1	H1:i:0
+EAS54_61:7:114:506:971	83	chr2	1150	99	35M	=	986	-199	ACTAAATACATATGCACCTAACACAAGACTACCCA	;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:2:94:356:809	163	chr2	1151	99	35M	=	1334	218	CTAAATACATATGCACCTAACACAAGACTACCCAG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:155:541:234	163	chr2	1151	99	35M	=	1319	203	CTAAATACATATGCACCTAACACAAGACTACCCAG	<<7<<<<<<<<<<<<<<<4<<<<<<<<<<<;;;08	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:272:328:400	83	chr2	1151	99	35M	=	977	-209	CTAAATACATATGCACCTAACACAAGACTACCCAG	4;<<<<<7<;<<<-<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:283:186:707	163	chr2	1154	99	36M	=	1321	203	AATACATATGCACCTAACACAAGACTACCCAGATTC	<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<;<<<<8	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:4:86:660:932	99	chr2	1154	99	35M	=	1338	219	AATACATATGCACCTAACACAAGACTACCCAGATT	================================9:=	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:6:264:705:89	147	chr2	1155	99	35M	=	983	-207	AAACATATGCACCTAACACAAGACTACCCAGATTC	<(<2<&<)<<<7<8<<<<<<<<<<.<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS114_32:4:5:396:292	83	chr2	1155	99	35M	=	981	-209	ATACATATGCACCTAACACAAGACTACCCAGATTC	<:<6<7<:<:;;;<<<;<7<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:178:342:866	163	chr2	1155	72	35M	=	1311	191	ATACATATGCACCTAACACAAGACTACCCAGATTC	;<<<<<;<<<8<<;<;<3<8/<<<<6<<</<8;<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:155:809:543	163	chr2	1156	99	35M	=	1352	231	TACATATGCACCTAACACAAGACTACCCAGATTCA	<<<<<<<<<<<<<<<<7<;<<<<<<<<<<<1<;<;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:1:119:880:781	99	chr2	1157	99	35M	=	1312	190	ACATATGCACCTAACACAAGACTACCCAGATTCAT	<<<<<<<<<<<<<<<<<<<<<<<<+<<<<7<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:6:283:963:234	147	chr2	1157	99	35M	=	992	-200	ACATATGCACCTAACACAAGACTACCCAGATTCAT	<5<;<;97;;:;<<7<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:28:745:352	99	chr2	1159	99	35M	=	1329	205	ATATGCACCTAACACAAGACTACCCAGATTCATAA	<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:147:687:428	147	chr2	1159	99	35M	=	998	-196	ATATGCACCTAACACAAGACTACCCAGATTCATAA	;1<''48;4)<<:<<<<;<<6;<<<<<<<<<<<<<	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_53:3:101:809:776	99	chr2	1160	99	35M	=	1326	201	TATGCACCTAACACAAGACTACCCAGATTCATAAA	<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:35:538:1882	163	chr2	1160	98	35M	=	1337	212	TATGCACCTAACACAAGACTACCCAGATTCATAAA	;);43.50;3;93;;4;3;;;9-7.;*;;966*75	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:7:41:34:211	83	chr2	1164	99	35M	=	980	-219	CACCTAACACAAGACTACCCAGATTCATAAAACAA	7</::<<7<<<<<<;<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:1:2:1422:1820	83	chr2	1164	99	35M	=	1004	-195	CACCTAACACAAGACTACCCAGATTCATAAAACAA	*4617;;4;1;;79;/7&,4;9;;;7<;;<<<;<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:194:998:663	83	chr2	1165	99	35M	=	1002	-198	ACCTAACACAAGACTACCCAGATTCATAAAACAAA	;</<<<7<<<<;<<8<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:8:10:975:766	83	chr2	1166	99	35M	=	959	-242	AATAACACAAGACTACCCAGATTCATAAAACAAAT	++4<<+<+<<<<8<<22;<<<<<2<<<<<<<<<<<	MF:i:18	Aq:i:64	NM:i:2	UQ:i:24	H0:i:1	H1:i:0
+EAS114_39:6:94:1273:1462	83	chr2	1166	99	35M	=	995	-206	CCTAACACAAGACTACCCAGATTCATAAAACAAAT	8.<<<;<:<<<<;<<;;;<<<;<;<;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:8:64:350:174	83	chr2	1166	99	35M	=	1000	-201	CCTAACACAAGACTACCCAGATTCATAAAACAAAT	709<<;<;<<<<<<<;7<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:166:84:766	83	chr2	1167	99	35M	=	990	-212	ATAACACAAGACTACCCAGATTCATAAAACAAATA	%8<=+<-<<<</<<<<8<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS1_108:2:85:580:481	163	chr2	1167	99	35M	=	1359	227	CTAACACAAGACTACCCAGATTCATAAAACAAATA	<<<<<<<<<<<<<:<<<<<<<<<<<<;<<<<6:<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:4:191:40:536	83	chr2	1167	66	35M	=	977	-225	ATAAAAAAAGACTACCCAGATTCATAAAACAAATA	+1<<,<&<<:<.;<7/7<<<<;.<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:3	UQ:i:27	H0:i:1	H1:i:0
+EAS218_1:2:40:1291:1045	147	chr2	1167	99	35M	=	980	-222	CTAACACAAGACTACCCAGATTCATAAAACAAATA	*<<<9<<<<<<:0<9<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:39	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:221:881:916	99	chr2	1168	96	35M	=	1327	194	TAACACAAGACTACCCAGATTCATAAAACAAATAC	<<;<<8<<;<<<<<<<;<<<<28<:<8<:;<;;;<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:35:392:2042	163	chr2	1168	99	35M	=	1332	199	TAACACAAGACTACCCAGATTCATAAAACNAATAC	======;==========<<=======7=;!<7;;;	MF:i:18	Aq:i:72	NM:i:1	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:192:714:341	163	chr2	1170	99	35M	=	1346	211	ACACAAGACTACCCAGATTCATAAAACAAATACTA	<<9<<<<<<<<<<<8<<<<<;<<;8<<<88;;;;9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:189:876:833	163	chr2	1173	99	36M	=	1349	212	CAAGACTACCCAGATTCATAAAACAAATACTACTAG	<<<<<<<<<<<8<8<<<<<;<;;<<;<<<<<;<<<6	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:299:743:762	163	chr2	1173	99	36M	=	1345	208	CAAGACTACCCAGATTCATAAAACAAATACTACTAG	<<<;<<<<<<<<<:;<<<.<:<<<<<<<<<<;;;;;	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:107:252:533	83	chr2	1173	60	35M	=	1025	-183	CAAGACTACCCAGATTCATAAAACAAATACTACTA	3<<<<+<<96<<<<<<;<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:2	H1:i:1
+EAS1_97:5:154:952:558	147	chr2	1173	99	35M	=	1007	-201	AAAGACTACCCAGATTCATAAAACAAATACTACTA	%<<9;;<<;;;<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS56_63:4:184:659:377	147	chr2	1173	99	35M	=	992	-216	CAAAACTACCCAGATTCATAAAACAAATACTACTA	1;<+<;<6;66<<;<<<<;;<<<8<<<<8<<;<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+B7_595:6:137:811:130	163	chr2	1175	99	35M	=	1351	211	AGACTACCCAGATTCATAAAACAAATACTACTAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:4:124:367:72	163	chr2	1175	99	35M	=	1377	237	AGACTACCCAGATTCATAAAACAAATACTACTAGA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:8:60:358:494	147	chr2	1179	44	35M	=	979	-235	TACCCAGATTCATAAAACAAATACTACTAGACCTA	7<77;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:14	NM:i:0	UQ:i:0	H0:i:6	H1:i:36
+EAS114_30:7:319:11:255	163	chr2	1179	92	35M	=	1337	193	TACCCAGATTCATAAAACAAATACTACTAGACCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<:	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:10
+B7_610:7:26:749:174	99	chr2	1183	78	35M	=	1357	209	CAGATTCATAAAACAAATACTACTAGACCTAAGAG	<<<<<<<<<<<<<<<<<<<<<<;<9<8<<<9<;94	MF:i:18	Aq:i:11	NM:i:0	UQ:i:0	H0:i:6	H1:i:31
+EAS1_103:7:112:578:782	99	chr2	1183	89	35M	=	1366	218	CAGATTCATAAAACAAATACTACTAGACCTAAGAG	<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<	MF:i:18	Aq:i:20	NM:i:0	UQ:i:0	H0:i:5	H1:i:25
+EAS1_105:1:234:185:359	83	chr2	1183	46	35M	=	1029	-189	CAGATTCATAAAACAAATACTACTAGACCTAAGAG	<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:9
+EAS112_34:4:92:412:435	147	chr2	1184	89	35M	=	1003	-216	AGATTCATAAAACAAATACTACTAGACCTAAGAGG	<;<52:=,====:=========<============	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:6:24:105:1046	99	chr2	1184	99	35M	=	1377	228	AGATTCATAAAACAAATACTACTAGACCTAAGAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:4	H1:i:2
+EAS1_97:2:128:629:484	163	chr2	1185	96	35M	=	1359	209	GATTCATAAAACAAATACTACTAGACCTAAGAGGG	<<49<<<<<9<<<<99<<<<<<<<<<<<+<-)7))	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:4	H1:i:45
+EAS219_FC30151:1:53:140:421	83	chr2	1185	99	35M	=	1016	-204	GATTCATAAAACAAATACTACTAGACCTAAGAGGG	<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:99:557:427	163	chr2	1186	99	35M	=	1342	191	ATTCATAAAACAAATACTACTAGACCTAAGAGGGA	<<<<<<<<<<<<<<<<<<<<<<:<<<<+;<7:8:;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:3:253:175:31	147	chr2	1187	72	35M	=	1008	-214	TTCATAAAACAAATACTACTAGACCTAAGAGGGAT	;+;<;<<<<<<<<9<<9<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:4:13:701:55	147	chr2	1187	99	36M	=	1015	-208	TTCATAAAACAAATACTACTAGACCTAAGAGGGATG	0:+<7<;9<;<<<<<<<3<<<<<;;<<<:<<3<<<<	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:220:809:850	147	chr2	1187	60	35M	=	986	-236	TTCATAAAACAAATACTACTAGACCTAAGAGGGAT	9+5<;*<<<2:0<<8:<*00<<<:<*<<<<<<<<&	MF:i:18	Aq:i:60	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:5:30:599:589	147	chr2	1188	99	36M	=	1003	-221	TCATAAAACAAATACTACTAGACCTAAGAGGGATGA	90<;<<<<<<<<+<<<;;<;<;<<<<<<<<6<<8<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:8:35:118:589	83	chr2	1188	99	35M	=	999	-224	TCATAAAACAAATACTACTAGACCTAAGAGGGATG	67<<<<<;<<<<<<<:7<<<<:<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:37:604:389	147	chr2	1188	99	35M	=	998	-225	TCATAAAACAAATACTACTAGACCTAAGAGGGATG	00;:;========9========<9========<==	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_61:2:168:61:867	83	chr2	1188	99	35M	=	997	-226	TCATAAAACAAATACTACTAGACCTAAGAGGGATG	;7<<<<<<<<<<<<<7<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:7:197:399:319	83	chr2	1189	99	35M	=	1012	-212	CAAAAAACAAATACTACTAGACCTAAGAGGGATGA	&<+==<<5<<<8<89;;<<<<<<8<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS114_32:5:267:170:250	163	chr2	1189	99	35M	=	1377	223	CATAAAACAAATACTACTAGACCTAAGAGGGATGA	<<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<<<<;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:4:174:157:573	83	chr2	1191	99	35M	=	1012	-214	TAAAACAAATACTACTAGACCTAAGAGGGATGAGA	8<<<<4<<<<<<<<;<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:39:956:676	83	chr2	1191	99	35M	=	1023	-203	TAAAACAAATACTACTAGACCTAAGAGGGATGAGA	899985;;<;:9;;:9<;:9:5;<;;;<;<;<<<<	MF:i:18	Aq:i:44	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:37:763:1437	83	chr2	1191	99	35M	=	994	-232	TAAAACAAATACTACTAGACCTAAGAGGGATGAGA	79979;<;<;;;<;;;;;;6:;<:;<:8;<<<<;<	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:50:513:882	83	chr2	1192	99	35M	=	1031	-196	AAAACAAATACTACTAGACCTAAGAGGGATGAGAA	<<<<:<<<<<:<<:<<<<::<<<<<<<<<<<<<<<	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:2:15:1763:1143	147	chr2	1193	99	35M	=	1023	-205	AAACAAATACTACTAGACCTAAGAGGGATGAGAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:46	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:4:189:571:366	83	chr2	1194	99	35M	=	1002	-227	AACAAATACTACTAGACCTAAGAGGGATGAGAAAT	<<;<<<<<:<<<;<<<;;;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:3:166:532:438	99	chr2	1194	99	35M	=	1386	227	AACAAATACTACTAGACCTAAGAGGGATGAGAAAT	<<<<<<<<<<<<<<<;<<;<<;<<<<;<;:;;<;<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:309:109:987	83	chr2	1194	99	35M	=	1024	-205	AACAAATACTACTAGACCTAAGAGGGATGAGAAAT	<<<<<<:<<;<<<<<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:1:171:527:247	83	chr2	1194	67	35M	=	1027	-202	AACAAATGCTACTAGACCTAAGAGGGATGAGAAAT	<547*9)&&7+;+<<7<<<;<<<;3<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+B7_589:8:139:727:808	163	chr2	1195	99	35M	=	1363	203	ACAAATACTACTAGACCTAAGAGGGATGAGAAATT	<<<<<<<<<<<<<:<;<<<<<<<<9;<;9<6;<<9	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:202:275:776	83	chr2	1196	99	36M	=	1002	-230	CAAATACTACTAGACCTAAGAGGGATGAGAAATTAC	;<<<<;;<<<<<<<;<<<<<<<;<<<<<<<<<<;<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:6:12:484:836	163	chr2	1197	99	35M	=	1372	210	AAATACTACTAGACCTAAGAGGGATGAGAAATTAC	<<<<<<<<<<<<<<<<<7<:<<<<<<9<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:21:553:57	99	chr2	1197	99	35M	=	1358	196	AAATACTACTAGACCTAAGAGGGATGAGAAATTAC	<<<<<<<<<<<;;<<<;<<;<<;<<<;;9<;<;<9	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:4:939:2021	83	chr2	1197	99	40M	=	1031	-206	AAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAAT	;;;;:8;<5:<<<7/<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:194:378:230	83	chr2	1198	99	35M	=	1022	-211	AATACTACTAGACCTAAGAGGGATGAGAAATTACC	<<;<8<<:<<<<:<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:49	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:68:242:834	163	chr2	1200	99	36M	=	1386	222	TACTACTAGACCTAAGAGGGATGAGAAATTACCTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:2:22:471:500	163	chr2	1200	99	35M	=	1365	200	TACTACTAGACCTAAGAGGGATGAGAAATTACCTA	=======<=<====:<2===9==;=;9;;=;;;;5	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:139:989:144	163	chr2	1201	99	35M	=	1387	221	ACTACTAGACCTAAGAGGGATGAGAAATTACCTAA	<<<<<<<<<<<<6<<<<<<<<<;<<<<<<<;;<;;	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:5:188:20:592	83	chr2	1202	95	35M	=	1032	-205	CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT	2<<7;<<<<,;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:189:863:213	83	chr2	1202	99	35M	=	1039	-198	CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT	7:<7<<<<44;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_1:4:62:561:531	83	chr2	1203	99	35M	=	1036	-202	TACTAGACCTAAGAGGGATGAGAAATTACCTAATT	<<7<<<<:<8<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:8:70:1349:1788	83	chr2	1203	99	35M	=	1043	-195	TACTAGACCTAAGAGGGATGAGAAATTACCTAATT	<7;<<8<74;;<1<<71<;7<;;<;<7<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:5:197:914:256	147	chr2	1204	97	35M	=	1049	-190	ACTAGACCTAAGAGGGATGAGAAATTACCTAATTG	<5;<8<5/;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:35:896:1588	83	chr2	1205	91	35M	=	1032	-208	CTAGACCTAAGAGGGATGAGAAATTACCTAATTGG	77999:.:<<;<;;;<<;<;<<<<<;<;;<<<<;;	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:43:47:279	163	chr2	1206	99	35M	=	1405	234	TAGACCTAAGAGGGATGAGAAGTTACCTAATTGGT	<<<<<<<<<<<<<;:<-<<<<<<<<<<<<:;;+7;	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_95:2:211:954:174	99	chr2	1207	99	35M	=	1393	221	AGACCTAAGAGGGATGAGAAATTACCTAATTGGTA	===============================777=	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:2:5:1219:137	99	chr2	1209	99	35M	=	1384	210	ACCTAAGAGGGATGAGAAATTACATAATTGGTACA	<<<<<<<<<<<<<<<<<<<<<<<(<<<<<<:9<;=	MF:i:18	Aq:i:45	NM:i:1	UQ:i:7	H0:i:0	H1:i:1
+EAS56_57:7:33:954:724	83	chr2	1210	97	35M	=	1049	-196	CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA	;<;<;<<-7;<<;<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:24	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:176:402:458	163	chr2	1210	99	36M	=	1376	202	CCTAAGAGGGATGAGAAATTACCTAATTGGTACAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;;<;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:4:81:687:1379	163	chr2	1210	99	35M	=	1366	191	CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:1:45:239:851	83	chr2	1211	61	35M	=	1023	-223	CTAAGAGGGATGAGAAATTACCTAATTGGTACAAT	*2*0<<<<<<<<<<<<<<<<9<<3<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_65:5:312:985:871	163	chr2	1212	99	35M	=	1369	192	TAAGAGGGATGAGAAATTACCTAATTGGTACAATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<9<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:38:557:1441	163	chr2	1212	99	35M	=	1381	204	TAAGAGGGATGAGAAATTACCTAATTGGTACAATG	<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:3:88:465:1877	147	chr2	1212	99	35M	=	1055	-192	TAAGAGGGATGAGAAATTACCTAATTGGTACAATG	<<<<<<<:<<<<<<<<:<<<<<<<<<<<<7;<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:7:149:123:265	163	chr2	1213	99	35M	=	1395	217	AAGAGGGATGAGAAATTACCTAATTGGTACAATGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:6:47:1791:444	83	chr2	1213	74	35M	=	1041	-207	AAGAGGGATGAGAAATTACCTAATTGGTACAATGT	978879;:;;<:;;<<;:<9<<<<;6;;;;<<<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:6
+EAS51_62:3:68:996:104	147	chr2	1214	70	35M	=	1041	-208	AGAGGGATGAGAAATTACCTAATTGGTACAATGTA	<1<8<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:21	NM:i:0	UQ:i:0	H0:i:1	H1:i:4
+B7_593:2:68:140:542	99	chr2	1217	95	36M	=	1398	217	GGGATGAGAAATTACCTAATTGGTACAATGTACAAT	<<<8;<<;<<<<<;<<;<<<<<8;<-<8<82;;;-8	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:6
+EAS188_7:7:67:719:786	163	chr2	1218	43	35M	=	1383	200	GGATGAGAAATTACCTAATTGGTACACTGTACAAT	;;<<<<<<&<<:13&<1<<<:<<<)/&/))<'6-<	MF:i:18	Aq:i:13	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS1_108:5:321:712:224	83	chr2	1220	58	35M	=	1051	-204	ATGAGAAATTACCTAATTGGTACAATGTACAATAT	=;===7;===7=========;=:;=========;=	MF:i:18	Aq:i:28	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_26:4:100:238:596	163	chr2	1220	56	35M	=	1403	218	ATGAGAAATTACCTAATTGGTACAATGTACAATAT	======9=====;=======5===;====/=;===	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:13
+EAS51_62:7:312:236:655	163	chr2	1222	99	35M	=	1412	225	GAGAAATTACCTAATTGGTACAATGTACAATATTC	<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:5
+EAS56_63:6:102:816:260	147	chr2	1225	99	35M	=	1049	-211	AAATTACCTAATTGGTACAATGTACAATATTCTGA	<<<<<<::<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:23	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:34:144:868	163	chr2	1226	76	35M	=	1412	221	AATTACCTAATTGGTACAATGTACAATATTCTGAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:215:516:299	99	chr2	1226	99	35M	=	1406	215	AATTACCTAATTGGTACAATGTACAATATTCTGAT	<<<<<<;<<<<;;;;<;;<<<<;<<9<;<<1;7/;	MF:i:18	Aq:i:64	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:81:12:1231	163	chr2	1228	99	35M	=	1391	198	TTACCTAATTGGTACAATGTACAATATTCTGATGA	<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<4<<6	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:2:30:644:942	147	chr2	1229	83	35M	=	1045	-219	TACCTAATTGGTACAATGTACAATATTCTGATGAT	85%+;<<9;<9<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:22	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:41:519:609	163	chr2	1229	99	35M	=	1401	207	TACCTAATTGGTACAATGGACAATATTCTGATGAT	1<<<<<<<<<<<<<<<4<-:<+6<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+B7_591:7:116:814:89	99	chr2	1231	99	36M	=	1408	213	CCTAATTGGTACAATGTACAATATTCTGATGATGGT	<<<<<<<<<<<<<<<<<<<<<<:<<<<;<<;<<66<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:169:714:644	163	chr2	1231	99	35M	=	1437	241	CCTAATTGGTACAATGTACAATATTCTGATGATGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:73:420:812	99	chr2	1232	66	35M	=	1414	217	CTAATTGGTACAATGTACAATATTCTGATGATGGT	<<<<<1<<<<::1<7<:<96<9<:<<:4<70:11<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:17:1179:393	99	chr2	1232	99	35M	=	1412	215	CTAATTGGTACAATGTACAATATTCTGATGATGGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<:4<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:118:829:36	99	chr2	1233	99	35M	=	1417	219	TAATTGGTACAATGTACAATATTCTGATGATGGTT	<<<<<<<<<:<2<<<<<<:<<<<<<<<<<<<71;<	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:2:125:875:553	147	chr2	1233	99	36M	=	1075	-194	TAATTGGTACAATGTACAATATTCTGATGATGGTTA	-;<;:;<<;6<<<<<<6<;<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_32:4:7:282:424	99	chr2	1233	83	35M	=	1397	199	TAATTGGTACAATGTACAATATTCTGATGATGGTT	<<<3<<<9<<<<3<<<<<9<<<9,<;;9;&*;3,.	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:107:447:488	163	chr2	1233	99	35M	=	1412	214	TAATTGGTACAATGTACAATATTCTGATGATGGTT	<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:7:66:891:294	83	chr2	1233	99	35M	=	1057	-211	TAATTGGTACAATGTACAATATTCTGATGATGGTT	:<<5;;<<<4<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS56_57:8:72:44:435	99	chr2	1235	76	35M	=	1392	192	ATTGGTACAATGTACAATATTCTGATGATGGTTAA	<<<<<<<<<<<2;<;<<;<<<;<<8<82<;22<8&	MF:i:18	Aq:i:0	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS139_19:4:18:1335:1514	147	chr2	1235	99	40M	=	1063	-212	ATTGGTACAATGTACAATATTCTGATGATGGTTACACTAA	::/::<<;<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:7:72:1288:1211	147	chr2	1235	84	35M	=	1052	-218	ATTGGTACAATGTACAATATTCTGATGATGGTTAC	<);<:<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:200:263:280	83	chr2	1236	99	35M	=	1078	-193	TTGGTACAATGTACAATATTCTGATGATGGTTACA	)<<<8<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:5:68:440:424	147	chr2	1237	99	35M	=	1060	-212	TGGTACAATGTACAATATTCTGATGATGGTTACAC	<<2<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:6:255:441:47	147	chr2	1237	99	35M	=	1072	-200	TGGTACAATGTACAATATTCTGATGATGGTTACAC	;;7<;:<<<<<<<<<<;<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:174:557:872	163	chr2	1237	99	35M	=	1423	221	TGGTACAATGTACAATATTCTGATGATGGTTACAC	<<<<<<<<<<<<<:<<<<<<<7<<;<<6:<<2117	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS51_64:3:255:45:399	163	chr2	1238	99	35M	=	1404	201	GGTACAATGTACAATATTCTGATGATGGTTACACT	<<3<8<<8<0<<;<<<0<<<</+8<611<<;71;7	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:2:264:157:150	147	chr2	1238	30	35M	=	1054	-219	GGAAAAATGGACAAGATTCTGATGAGGGTTACACT	.3%:+<<*;*<2<<1<1*,*<<7<<+<<<&<<<<<	MF:i:130	Aq:i:30	NM:i:3	UQ:i:35	H0:i:0	H1:i:0
+EAS139_19:5:95:944:247	99	chr2	1238	99	40M	=	1424	226	GGTACAATGTACAATATTCTGATGATGGTTACACTAAAAG	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:;:::	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_105:2:301:161:195	147	chr2	1239	75	35M	=	1076	-198	GTACAATGTACAATATTCTGATGATGGTTACACTA	''6%6<6<<<4<<<<<<<<)<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:2:141:7:963	83	chr2	1240	85	36M	=	1061	-215	TACAATGTACAATATTCTGATGATGGTTACACTAAA	95+<<9<<5<;;<<;<<;'<<<<<;<<<7<9<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_39:6:76:282:1668	99	chr2	1240	99	35M	=	1401	196	TACAATGTACAATATTCTGATGATGGTTACACTAA	<<<<<<<<<<<<<<<<<<;<<;<<<<<<;<;<<<8	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:64:199:1288	147	chr2	1240	77	35M	=	1079	-196	TACAATGTACAATATTCTGATGATGGTTACACTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:49:911:980	163	chr2	1241	99	35M	=	1434	228	ACAATGTACAATATTCTGATGATGGTTACACTAAA	<<<<<<<<<<;<<<<<<<8<<<<;<;<<88-<;33	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:66:1046:167	147	chr2	1241	99	35M	=	1060	-216	ACAATGTACAATATTCTGATGATGGTTACACTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:5:303:542:924	83	chr2	1242	76	35M	=	1083	-194	CAATGTACAATATTCTGATGATGGTTACACTAAAA	+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS114_45:2:79:554:354	147	chr2	1242	63	35M	=	1082	-195	CAATGTACAATATTCTGATGATGGTTACACTAAAA	98988;7;;;;:;;;;;;;;;;:;;;:;;;;;9;;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:248:122:558	163	chr2	1243	99	35M	=	1436	228	AATGTACAATATTCTGATGATGGTTACACTAAAAG	<<<<:<<<<<<<<<<<<<;<<<<:<6:4<<::6:6	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:7:109:22:383	83	chr2	1244	99	35M	=	1071	-208	ATGTACAATATTCTGATGATGGTTACACTAAAAGC	<;9;<8<<<<<<;<<<<<<<<<<<<;<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:43:1229:1855	83	chr2	1244	99	35M	=	1074	-205	ATGTACAATATTCTGATGATGGTTACACTAAAAGC	8<<<<;8<<<;;5<<28<<<<<<<<<<<<7;;<<;	MF:i:18	Aq:i:48	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:2:74:656:272	83	chr2	1245	99	35M	=	1088	-192	TGTACAATATTCTGATGATGGTTACACTAAAAGCC	;;;</<<<<<5;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS56_65:7:118:775:467	83	chr2	1245	99	35M	=	1075	-205	TGTACAATATTCTGATGATGGTTACACTAAAAGCC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+B7_593:7:15:244:876	99	chr2	1246	43	36M	=	1440	230	GTACAATATTCTGATGATGGTTACACTAAAAGCCCA	<<<<<<;<<<<<<<<;<<;;;<<<<<:<<<9;<<<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:63:28:1549	163	chr2	1247	77	35M	=	1439	227	TACAATATTCTGATGATGGTTACACTAAAAGCCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;<<<<7	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:310:800:761	83	chr2	1249	99	35M	=	1055	-229	CAATATTCTGATGATGGTTACACTAAAAGCCCATA	1<<:<:<:<<<<:<<<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:14:978:1296	83	chr2	1249	90	35M	=	1104	-180	CAATATTCTGATGATGGTTACACTAAAAGCCCATA	77177;9;2:;;:;;(;;9;<;;;;:;;;:7;<<;	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:8:26:242:35	147	chr2	1251	99	35M	=	1084	-202	ATATTTTGATGATGGTTACACTAAAAGCCCATACT	<<<77!!7<;<<<;;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:2	UQ:i:0	H0:i:1	H1:i:8
+EAS114_45:7:6:758:988	83	chr2	1253	99	35M	=	1087	-201	ATTCTGATGATGGTTACACTAAAAGCCCATACTTT	3-7*73;;399:9;9;7<-(<;;<;;:;9::;;7;	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:315:412:921	99	chr2	1254	99	35M	=	1424	205	TTCTGATGATGGTTACACTACAAGCCCATACTGTA	<;<;<<<<<<<;<<<<<<<<8<<<;<<:<<;;+<8	MF:i:18	Aq:i:45	NM:i:2	UQ:i:33	H0:i:0	H1:i:1
+EAS114_30:3:215:840:760	163	chr2	1256	99	35M	=	1416	195	CTGATGATGGTTACACTAAAAGCCCATACTTTCCT	<<<<<<<<<<<<<<<;<<<88<+<<:<;3585,+:	MF:i:18	Aq:i:66	NM:i:1	UQ:i:11	H0:i:1	H1:i:0
+EAS1_95:5:284:212:932	147	chr2	1257	10	35M	=	1063	-229	TGATGATGGTTACGCTAAAAGTCCATGCTTTACTG	82%<8:<-:<<:**:<-<<8<)/2/<:/<<<<<<<	MF:i:18	Aq:i:0	NM:i:3	UQ:i:42	H0:i:0	H1:i:0
+EAS1_97:4:290:121:79	163	chr2	1257	99	35M	=	1420	198	TGATGATGGTTACACTAAAAGCCCATACTTTACTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<7;<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:1:88:54:900	83	chr2	1257	68	35M	=	1069	-223	TGATGATGGTTACACTAAAAGCCCATACTTCACTG	============;=================;9===	MF:i:18	Aq:i:19	NM:i:1	UQ:i:26	H0:i:0	H1:i:1
+EAS188_7:3:100:735:530	83	chr2	1257	99	35M	=	1058	-234	TGATGATGGTTACACTAAAAGCCCATACTTTACTG	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:32:562:1695	147	chr2	1258	76	35M	=	1085	-208	GATGATGGTTACACTAAAAGCCCATACTTTACTGC	:5:::<88/<:<<<<<<<<<7<9<<&<959<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:173:627:465	163	chr2	1260	99	36M	=	1444	220	TGATGGTTACACTAAAAGCCCATACTTTACTGCTAC	<<<<<<<<<<<<<<<<<<<<<<<;<<<<<2;;4;;7	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS1_95:1:77:589:741	83	chr2	1263	99	35M	=	1078	-220	TGGTTACACTAAAAGCCCATACTTTACTGCTACTC	8=;;==606;=========================	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:8:27:228:31	147	chr2	1264	99	35M	=	1082	-217	GGTTACACTAAAAGCCCATACTTTACTGCTACTCA	99;;;<<<<<<:<<;<;<<;<<<<;<<;<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:54:695:952	147	chr2	1264	99	35M	=	1076	-223	GGTTACACTAAAAGCCCATACTTTACTGCTACTCA	277%<9<4)<<<<<<<<<;<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:6:300:622:86	83	chr2	1264	99	35M	=	1102	-197	GGTTACACTAAAAGCCCATACTTTACTGCTACTCA	<:<<<:<6;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:71:62:254	163	chr2	1264	99	35M	=	1438	209	GGTTACACTAAAAGCCCATACTTTCCTGCTACTCA	<<<<<<7<<<<7<<<<<3<<<<<<&<<.<<::<:%	MF:i:18	Aq:i:43	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS114_28:1:168:609:646	99	chr2	1264	99	36M	=	1436	208	GGTTACACTAAAAGCCCATACTTTACTGCTACTCAA	<<<<<<<<<<<;<<<<<:<8<<<<;<<<<<4<<<9<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:84:92:1246	163	chr2	1265	99	35M	=	1437	207	GTTACACTAAAAGCCCATACTTTACTGCTACTCAA	<<<<<<<<<<<<<<<<5<:<<5<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:3:310:193:629	83	chr2	1267	99	36M	=	1103	-200	TACACTAAAAGCCCATACTTTACTGCTACTCAATAT	9<9<6;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:111:379:700	73	chr2	1268	0	35M	=	1268	0	ACACTAAAAGCCCATACTTTACTGCTACTCAATAT	7<<:<<<<02<<6&<</<<</+9/98*<966/3/<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:111:379:700	133	chr2	1268	0	*	=	1268	0	CGCACTGGCAATATTTGTGTGTTTACTTTTTTGCA	:1+&;;6;:;918;);;):,19.9:).):::.&3(	MF:i:192
+EAS114_30:6:137:741:866	163	chr2	1268	99	35M	=	1429	196	ACACTAAAAGCCCATACTTTACTGCTACTCAATAT	<<<<8<<;;;<<<<;<<<;;;<;4<<8;<<;%<8;	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:7:23:1126:1886	147	chr2	1268	99	35M	=	1094	-209	ACACTAAAAGCCCATACTTTACTGCTACTCAATAT	5*.:.5<<::<<<<<<<<:5<<<<<<<<<<:2<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:21:423:169	99	chr2	1270	99	35M	=	1468	233	ACTAAAAGCCCATACTTTACTGCTACTCAATATAT	<<<<<;<<<<<<;<<<<<;;<<<<<<<<9+:5<;;	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:110:984:98	147	chr2	1270	99	36M	=	1092	-214	ACTAAAACCCCATACTTTACTGCTACTCAATATATC	:81<<<<+;;8<+<8<<<<<;<<<8;<<<<<<<<8;	MF:i:18	Aq:i:70	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS219_FC30151:5:54:1351:910	99	chr2	1270	99	35M	=	1448	213	ACTAAAAGCCCATACTTTACTGCTACTCAATATAT	<<<<<<8<<<<<<<<<<<<<<<<<<<<<<18<<:<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:2:237:855:581	147	chr2	1271	87	35M	=	1105	-201	CTAAACGCCCATACTTTACTGCTACTCAATATATC	/+<<<&)2;66;/;;+<;;3133<3<3;9;<999<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS56_59:8:80:542:549	163	chr2	1271	99	35M	=	1443	207	CTAAAAGCCCATACTTTACTGCTACTCAATATATC	<<<<<<<<;<<<<<<<<:<<<<-<;;<;7<;3;9;	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:7:1347:375	163	chr2	1271	99	35M	=	1436	200	CTAAAAGCCCATACTTTACTGCTACTCAATATATC	;;;;;;;;;;;;;;;;;;;;9;;;8;;;;;97777	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:191:540:493	99	chr2	1273	99	35M	=	1432	194	AAAAGCCCATACTTTACTGCTACTCAATATATCCA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_81:7:324:472:791	147	chr2	1274	89	35M	=	1110	-199	AAAGCCAATACTTTACTGCTACTCAATATATCCAT	<<.)5*&;;11<<<,5<33:-<<6<<<<:<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS220_1:8:83:1456:1854	83	chr2	1275	99	35M	=	1117	-193	AAGCCCATACTTTACTGCTACTCAATATATCCATG	<<67<:<8<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:5:290:247:509	163	chr2	1276	99	35M	=	1450	209	AGCCCATACTTTACTGCTACTCAATATATCCATGT	<<<<<<<<<<<<<<<4<<<<<<92<;;;<;96;19	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:90:629:652	99	chr2	1276	99	35M	=	1456	215	AGCCCATACTTTACTGCTACTCAATATATCCATGT	<<<<<<<<<<<<<<<<<<<<<<<:<;<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:39:1671:1928	163	chr2	1276	99	35M	=	1453	212	AGCCCATACTTTACTGCTACTCAATATATCCATGT	<<<<<<<;<<<<;<<<<<4<<<;3<<<;<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:128:584:952	83	chr2	1277	99	35M	=	1101	-211	GCCCATACTTTACTGCTACTCAATATATCCATGTA	7<;9;0:<<<:<<:<<<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:61	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:28:979:519	163	chr2	1278	99	35M	=	1439	196	CCCATACTTTACTGCTACTCAATATATCCATGTAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:7:219:40:833	83	chr2	1278	99	35M	=	1094	-219	CCCATACTTTACTGCTACTCAATATATCCATGTAA	<<*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:1:289:207:323	163	chr2	1279	99	35M	=	1462	218	CCATACTTTACTGCTACTCAATATATCCATGTAAC	<<<:<<<<<:<<<<<<<<<<;<<899<<13)939;	MF:i:18	Aq:i:41	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:45:758:616	163	chr2	1280	99	35M	=	1473	228	CATACTTTACTGCTACTCAATATATCCATGTAACA	<<<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<;;<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:42:804:114	163	chr2	1281	99	35M	=	1452	206	ATACTTTACTGCTACTCAATATATCCATGTAACAA	<<<<<<<<<<<<<<<<<<<<<<<<<<:<:<;;<;;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:61:1885:163	83	chr2	1281	99	40M	=	1128	-193	ATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG	;:;;;;<<8<<:<<:<;<<<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:79	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:4:282:962:46	99	chr2	1282	99	35M	=	1437	190	TACTTTACTGCTACTCAATATATCCATGTAACAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:6:143:620:158	83	chr2	1283	99	35M	=	1107	-211	ACTTTACTGCTACTCAATATATCCATGTAACAAAT	<4;<;<;<;6<<7<;<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:3:50:312:219	83	chr2	1288	99	35M	=	1146	-177	ACTGCTACTCAATATATCCATGTAACAAATCTGCG	<,;83:<::6<<<<<<<;:<;<<<<;<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_93:5:256:444:399	83	chr2	1289	99	35M	=	1133	-191	CTGCTACTCAATATATCCATGTAACAAATCTGCGC	;+549<:<.<<<<<<<;<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:1:17:595:863	83	chr2	1289	89	35M	=	1139	-185	AAGCTACTCAATATATCCATGTAACAAATCTGCGC	))55))+2&<<,:5<,0657<<<<:<:<:<<<<<<	MF:i:18	Aq:i:33	NM:i:2	UQ:i:16	H0:i:1	H1:i:0
+EAS1_105:6:23:885:274	147	chr2	1289	99	35M	=	1089	-235	CTACTACTCAATATATCCATGTAACAAATCTGCGC	2+*27==;;==<<.;:<=<=<==============	MF:i:18	Aq:i:51	NM:i:1	UQ:i:9	H0:i:1	H1:i:0
+EAS54_61:8:4:173:814	83	chr2	1289	99	35M	=	1111	-213	CTGCTACTCAATATATCCATGTAACAAATCTGCGC	<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:263:557:988	147	chr2	1289	84	35M	=	1108	-216	CTGCTACTCAATATATCCATGTAACAAATCTGCGC	1-41:<15+<<<<<<599<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:18	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:2:326:153:231	163	chr2	1290	43	35M	=	1477	222	TGCTACTCAATATATCCATGTAACAAATCTGCGCT	<<<<<<<<<9<<<<<<<<<,<<<<<<8<<8.;.;4	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:4:98:862:154	83	chr2	1290	99	35M	=	1116	-209	TGCTACTCAATATATCCATGTAACAAATCTGCGCT	856:;7<:<<9<<<9<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:2:6:529:366	147	chr2	1291	99	35M	=	1103	-223	GCTACTCAATATATCCATGTAACAAATCTGCGCTT	9;8;8<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:299:336:613	147	chr2	1293	99	35M	=	1145	-183	TACTCAATATATCCATGTAACAAATCTGCGCTTGT	1;4(+<<5<4<1<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:3
+B7_597:2:42:28:552	83	chr2	1294	99	35M	=	1131	-198	ACTCAATATATCCATGTAACAAATCTGCGCTTGTA	</8:<<:<<<;;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS114_39:3:55:464:146	147	chr2	1295	99	35M	=	1114	-216	CTCAATATATCCATGTAACAAATCTGCGCTTGTAC	;(;;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:2
+EAS54_67:6:109:953:668	99	chr2	1297	99	35M	=	1485	223	CAATATATCCATGTAACAAATCTGCGCTTGTACTT	;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<8<;<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:1
+EAS139_19:1:82:946:392	163	chr2	1297	99	40M	=	1493	236	CAATATATCCATGTAACAAATCTGCGCTTGTACTTCAAAA	<<<<<<<<<<<<<<<<<<<<<<<<<8<<<8<<8<<:4488	MF:i:18	Aq:i:74	NM:i:1	UQ:i:19	H0:i:1	H1:i:0
+EAS114_28:3:308:509:948	147	chr2	1298	99	36M	=	1123	-211	AATATATCCATGTAACAAATCTGCGCTTGTACTTCT	;;+;;;.8<<;;;<<<<<<<<<<<<<8<<<<<;<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:174:753:617	147	chr2	1299	75	35M	=	1136	-198	ATATATCCATGTAACAAATCTGCGCTTGTACTTCT	<;<;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:3:26:1867:162	83	chr2	1299	70	35M	=	1137	-197	ATATATCCATGTAACAAATCTGCGCTTGTACTTCT	97999:;<<9;;<:<<;;;<;;<<<<<<<;;<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:2:162:257:203	83	chr2	1301	99	35M	=	1114	-222	ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA	<;<;:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:62:841:1994	121	chr2	1301	70	35M	=	1301	0	ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA	87878;;6:;;:<<<<:<:;;;<;<<<;<;;<;<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:5:62:841:1994	181	chr2	1301	0	*	=	1301	0	TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	MF:i:192
+EAS139_19:7:44:1807:833	99	chr2	1301	99	40M	=	1449	188	ATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTA	<<<<<<<<<<<<<<<<<<<;<;<<<;<<9<<<<<89;;;:	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:7:280:607:113	163	chr2	1303	99	35M	=	1468	200	ATCCATGTAACAAATCTGCGCTTGTACTTCTAAAT	===================;===;=====<=7=9:	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:260:147:818	163	chr2	1303	82	35M	=	1497	229	ATCCATGTAACAAATCTGCGCTTTTACTTCTAAAT	<<<<<<3<<<<<;<<<<)<1<<<&<7<<<;<4/9<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS54_71:7:194:867:616	99	chr2	1303	99	34M	=	1481	213	ATCCATGTAACAAATCTGCGCTTGTACTTCTATT	<8<<<<<<<<<<<8<<4<<<<<<8<<3<<5<&(+	MF:i:18	Aq:i:67	NM:i:2	UQ:i:23	H0:i:1	H1:i:0
+EAS139_19:7:85:262:751	83	chr2	1305	99	40M	=	1105	-240	CCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAC	22;99;<<8<<<<<<<;<;<<<<<;<<;<<<<<<<<<<<+	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_81:6:35:186:412	147	chr2	1306	99	35M	=	1139	-202	CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA	<<4:6<;<&<:4<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:8:46:1528:799	147	chr2	1306	96	35M	=	1109	-232	CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:5:124:978:501	163	chr2	1307	99	36M	=	1499	228	ATGTAACAAATCTGCGCTTGTACTTCTAAATCTATA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:88:866:774	163	chr2	1307	99	35M	=	1478	206	ATGTAACAAATCTGCTCTTGTACTTCTAAATCTAT	<<<;<<<<<;<<<<<<<<<<<<<<<<<68<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS221_1:6:4:1131:104	163	chr2	1307	99	35M	=	1487	215	ATGTAACAAATCTGCGCTTGTACTTCTAAATCTAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<::	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:6:178:342:866	83	chr2	1311	72	35M	=	1155	-191	AACAAATCTGCGCTTGTACTTCTAAATCTATAAAA	<<9<<<&;;<<<<77<;<<<5;:<<<:<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:1:119:880:781	147	chr2	1312	99	35M	=	1157	-190	ACAAATCTGCGCTTGTACTTCTAAATCTATAACAA	;8<<;<<<<:<84<<<<:<<<<<<<<<<<<<5<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+B7_591:2:46:220:58	99	chr2	1313	99	36M	=	1483	206	CAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA	<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<:<;	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:2:47:591:698	147	chr2	1313	99	35M	=	1146	-202	CAAATCTGCGCTTGTACTTCTAAATCTATAACAAA	7;;;;:<<:<:<<<<<7<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_105:1:115:226:443	147	chr2	1314	99	35M	=	1137	-212	AAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA	<<;;<;<<<<<<<<<<<<:<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:198:59:675	83	chr2	1315	99	35M	=	1150	-200	AATCTGCGCTTGTACTTCTAAATCTATAACAAAAT	<<<<<4<4<:<<<;7<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS221_3:2:76:1729:813	163	chr2	1317	99	35M	=	1506	224	TCTGCGCTTGTACTTCTAAATCTATAAAAAAATTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:8:147:360:141	99	chr2	1319	47	35M	=	1501	218	TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA	<<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<7	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_95:7:155:530:532	83	chr2	1319	99	35M	=	1128	-226	TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA	:<<<><<8<<<<<><<<<<><<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS51_62:4:308:614:911	99	chr2	1319	90	35M	=	1493	209	TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA	<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<8<	MF:i:18	Aq:i:43	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS54_65:3:155:541:234	83	chr2	1319	99	35M	=	1151	-203	TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA	78;<7<<<<<<<<<<<<<<;<<<<<<<<<<;<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:175:289:351	147	chr2	1319	99	35M	=	1144	-210	TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA	9;;:+<<<<<;<<:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:283:186:707	83	chr2	1321	99	36M	=	1154	-203	CGCTTGTACTTCTAAATCTATAACAAAATTAAAATT	889;<7;<7<<7<<<<<7<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_105:3:308:66:538	147	chr2	1321	99	35M	=	1138	-218	CGCTTGTACTTCTAAATCTATAACAAAATTAAAAT	996999;<9;<:<<<<<:<<7<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_108:5:11:555:330	163	chr2	1321	99	35M	=	1492	206	CGCTTGTACTTCTAAATCTATAAAAAAATTAAAAT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<4<;<	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:7:84:411:336	73	chr2	1322	75	35M	*	0	0	GCTTGTACTTCTAAATCTATAAAAAAATTAAAATT	<<<;<<<;<<<<<<<<<<<<:<<;<<<<<<;8<;<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:5:52:1278:1478	163	chr2	1322	47	35M	=	1513	226	GCTTGTACTTCTAAATCTATAACAAAATTAAAATT	<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<9<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_53:3:101:809:776	147	chr2	1326	99	35M	=	1160	-201	GTACTTCTAAATCTATAAAAAAATTAAAATTTAAC	<<<-<;7;<<<<:;<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS192_3:3:221:881:916	147	chr2	1327	96	35M	=	1168	-194	TAATTCTAAATCTAGAACAAAATTAAAATTTAACA	44%-4(5<;9/,:<68:1<:8<:<<84;<<<<<;<	MF:i:18	Aq:i:24	NM:i:3	UQ:i:41	H0:i:0	H1:i:0
+EAS1_105:1:28:745:352	147	chr2	1329	99	35M	=	1159	-205	CTTCTAAATCTATAACAAAATTAAAATTTAACAAA	4;;*;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS114_45:2:23:1754:796	99	chr2	1329	99	35M	=	1488	194	CTTCTAAATCTATAAAAAAATTAAAATTTAACAAA	;<<;<;<;<;<;<<;;;;;<<<<;;<<<<<97999	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:96:419:327	147	chr2	1331	99	35M	=	1149	-217	TCTAAATCTATAACAAAATTAAAATTTAACAAAAG	;1<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS1_97:4:274:287:423	163	chr2	1332	75	35M	=	1515	218	CTAAATCTATAAAAAAATTAAAATTTAACAAAAGT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:7:35:392:2042	83	chr2	1332	99	35M	=	1168	-199	ATAAATCTATAAAAAAATTAAAATTTAACAAAAGT	+<<<<</<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS54_65:2:94:356:809	83	chr2	1334	99	35M	=	1151	-218	AAATCTATAACAAAATTAAAATTTAACAAAAGTAA	<<<<3<<<<;;<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:1	UQ:i:26	H0:i:0	H1:i:1
+EAS114_30:7:319:11:255	83	chr2	1337	92	35M	=	1179	-193	TCTATAAAAAAATTAAAATTTAACAAAAGTAAATA	;8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<	MF:i:18	Aq:i:17	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:7:35:538:1882	83	chr2	1337	98	35M	=	1160	-212	TCTATAACAAAATTAAAATTTAACAAAAGTAAATA	73797;;3<;;<6;;<<<;8:;:;<;:<:;<<;;;	MF:i:18	Aq:i:43	NM:i:1	UQ:i:18	H0:i:0	H1:i:1
+EAS51_66:1:64:182:741	153	chr2	1338	10	35M	*	0	0	AAAAAAACAAATTAAACTCTAACAAAAGTAAATAA	(+;1&(9*%0<*(*&<*5,/+<,&<&<<6<<<<<<	MF:i:32	Aq:i:10	NM:i:6	UQ:i:63	H0:i:0	H1:i:0
+EAS54_61:4:86:660:932	147	chr2	1338	99	35M	=	1154	-219	ATATAAAAAAATTAAAATTTAACAAAAGTAAATAA	&<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:71	NM:i:1	UQ:i:5	H0:i:1	H1:i:0
+EAS56_53:8:122:430:882	147	chr2	1338	99	35M	=	1147	-226	CTATAAAAAAATTAAAATTTAACAAAAGTAAATAA	0<<:<<<<<<<:3<<<<<<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:99:557:427	83	chr2	1342	99	35M	=	1186	-191	AACAAAATTAAAATTTAACAAAAGTAAATAAAACA	<<-<<<<9<<<<<:<<<<9<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:1	UQ:i:12	H0:i:1	H1:i:0
+B7_593:5:299:743:762	83	chr2	1345	99	36M	=	1173	-208	AAAATTAAAATTTAACAAAAGTAAATAAAACACATA	;<<<1<<<<<+<;<;7<<;<<<<<<<<<;<<;;<<7	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:303:428:326	99	chr2	1345	74	35M	=	1515	205	AAAATTAAAATTTAACAAAAGTAAATAAAACACAT	<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:4:192:714:341	83	chr2	1346	99	35M	=	1170	-211	AAATTAAAATTTAACAAAAGTAAATAAAACACATA	<<<3;<<<<9:<<</<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:1:189:876:833	83	chr2	1349	99	36M	=	1173	-212	TTAAAATTTAACAAAAGTAAATAAAACACATAGCTA	7;<<<<:;;<</<<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:7:37:79:581	163	chr2	1349	68	35M	=	1533	219	TTAAAATTTAAAAAAAGTAAATAAAACACATAGCT	<>4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1>	MF:i:18	Aq:i:27	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS139_19:2:82:154:1333	99	chr2	1349	77	40M	=	1511	202	TTAAAATTTAACAAAAGTAAATAAAACACACAGCTAAAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;:;:	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:1	H1:i:0
+EAS188_7:1:290:286:763	99	chr2	1349	75	35M	=	1515	201	TTAAAATTTAACAAAAGTAAATAAAACACATAGCT	<<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<8<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:3:248:1491	73	chr2	1349	99	35M	*	0	0	TTAAAATTTAACAAAAGTAAATAAAACACATAGCT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8:<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:3:6:1064:1805	99	chr2	1350	99	35M	=	1502	187	TAAAATTTAACAAAAGTAAATAAAACACATAGCTA	<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_595:6:137:811:130	83	chr2	1351	99	35M	=	1175	-211	AAAATTTAACAAAAGTAAATAAAACACATAGCTAA	<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:155:809:543	83	chr2	1352	99	35M	=	1156	-231	AAATTTAACAAAAGTAAATAAAACACATAGCTAAA	<<<+0<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_63:3:41:468:459	99	chr2	1352	75	35M	=	1513	196	AAATTTAACAAAAGTAAATAAAACACATAGCTAAA	<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<;;7	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:4:31:622:216	73	chr2	1354	99	35M	*	0	0	ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<96<7	MF:i:18	Aq:i:70	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:8:105:854:975	163	chr2	1354	71	35M	=	1523	202	ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC	<<<<<<<<<<<<<<<<<<<<<<<<<<<7:<;;;;5	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:26:749:174	147	chr2	1357	78	35M	=	1183	-209	TAACAAAAGTAAATAAAACACATAGCTAAAACTAA	(<<)<<<<6<<<<<<<<<<&:<3<<<6<<<)<:<<	MF:i:18	Aq:i:11	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:6:21:553:57	147	chr2	1358	99	35M	=	1197	-196	AACAAAAGTAAATAAAACACATAGCTAAAACTAAA	<<+<<<<<<<<<;<<<<8<<<<<<8<<<<<;<<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:2:128:629:484	83	chr2	1359	96	35M	=	1185	-209	AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA	:(::<</*;<<99<<<-<;<<<<4<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:1	UQ:i:7	H0:i:1	H1:i:0
+EAS1_108:2:85:580:481	83	chr2	1359	99	35M	=	1167	-227	AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA	=)====77========8=3====3===========	MF:i:18	Aq:i:71	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+B7_589:8:139:727:808	83	chr2	1363	99	35M	=	1195	-203	AAGTAAATAAAACACATAGCTAAAACTAAAAAAGC	<<;<<<<<<<<<;<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:2:22:471:500	83	chr2	1365	99	35M	=	1200	-200	GTAAATAAAACACATAGCTAAAACTAAAAAAGCAA	=9===0====;=77<==8;====;===========	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_103:7:112:578:782	147	chr2	1366	89	35M	=	1183	-218	AAAATAAAACACATAGCTAAAACTAAAAAAGCAAA	+<<<%<<<<6<;<<<<6:<<<<:<<<<<<<<<<<<	MF:i:18	Aq:i:20	NM:i:1	UQ:i:10	H0:i:1	H1:i:0
+EAS221_3:4:81:687:1379	83	chr2	1366	99	35M	=	1210	-191	TAAATAAAACACATAGCTAAAACTAAAAAAGCAAA	<<<<<<<<<<<:<<<<:<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_65:3:320:20:250	99	chr2	1367	77	35M	=	1532	200	AAATAAAACACATAGCTAAAACTAAAAAAGCAAAA	<<<<<<<<<<<<<<<<<;<<<<<<<<<;+:<;<<3	MF:i:18	Aq:i:6	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:5:312:985:871	83	chr2	1369	99	35M	=	1212	-192	ATAAAACACATAGCTAAAACTAAAAAAGCAAAAAC	<8<<<<.<.<<<<:<<<<<.<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:6:12:484:836	83	chr2	1372	99	35M	=	1197	-210	AAACACATAGCTAAAACTAAAAAAGCAAAAACAAA	<<<<</<4<<&7<<<<;<<<<<<<<<<<<<1<<<<	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:176:402:458	83	chr2	1376	99	36M	=	1210	-202	AAATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA	</<+<4&;<<<<7<<<<<<<<;<<<<<<<<<<<<<<	MF:i:18	Aq:i:70	NM:i:1	UQ:i:14	H0:i:1	H1:i:0
+EAS139_11:7:50:1229:1313	163	chr2	1376	77	35M	=	1528	187	ACATAGCTAAAACTAAAAAAGCAAAAACAAAAACT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_65:4:124:367:72	83	chr2	1377	99	35M	=	1175	-237	CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA	,<<<8,<<<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:5:267:170:250	83	chr2	1377	99	35M	=	1189	-223	CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA	-<;<5-:<<<<;<<<<<<<;;<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS220_1:6:24:105:1046	147	chr2	1377	99	35M	=	1184	-228	CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA	+<<<</<<<<<.<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:4:38:557:1441	83	chr2	1381	99	35M	=	1212	-204	GATAAAAATAAAAAAGCAAAAACAAAAACTATGCT	<&<<<<<,<<<<<<<<8<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:45	NM:i:2	UQ:i:16	H0:i:0	H1:i:1
+EAS188_7:7:67:719:786	83	chr2	1383	43	35M	=	1218	-200	TAAAAAAAAAAAAGCAAAAACAAAAACTATGCTAA	$<<;<-1<<<8<<*&<;<;,<<3<<<<33<<<33<	MF:i:18	Aq:i:13	NM:i:2	UQ:i:28	H0:i:1	H1:i:0
+EAS114_39:2:5:1219:137	147	chr2	1384	99	35M	=	1209	-210	AAAACTAAAAAAGCAAAAACAAAAACTATGCTAAG	<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:7:68:242:834	83	chr2	1386	99	36M	=	1200	-222	AAATAAAAAAGCAAAAACAAAAACTATGCTAAGTAT	<<68<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:1	UQ:i:21	H0:i:1	H1:i:0
+EAS51_66:3:166:532:438	147	chr2	1386	99	35M	=	1194	-227	AACTAAAAAAGCAAAAACAAAAACTATGCTAAGTA	<<&7<<<<<<<+<<<<<:<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:4:139:989:144	83	chr2	1387	99	35M	=	1201	-221	ACTAAAAAAGCAAAAACAAAAACTATGCTAAGTAT	<&<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:3:81:12:1231	83	chr2	1391	99	35M	=	1228	-198	AAAAAGCAAAAACAAAAACTATGCTAAGTATTGGT	<<<<<<<7<<<<<<<5<'<6/<<<5<<<<<<2<<<	MF:i:18	Aq:i:71	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_57:8:72:44:435	147	chr2	1392	76	35M	=	1235	-192	AAAAGCAAAAACAAAAACTATGCTAAGTATTGGTA	<<<<;7;<<<<;<<<<<<<<<<;<<<;<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_95:2:211:954:174	147	chr2	1393	99	35M	=	1207	-221	AAAGAAAAAACAAAAACTATGCTAAGTATTGGTAA	====*=====6========================	MF:i:18	Aq:i:75	NM:i:1	UQ:i:9	H0:i:1	H1:i:0
+B7_595:7:149:123:265	83	chr2	1395	99	35M	=	1213	-217	AGCAAAAACAAAAACTATGCTAAGTATTGGTAAAG	<;&<<<<<:<<<<<<<<<<;<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_32:4:7:282:424	147	chr2	1397	83	35M	=	1233	-199	CAAAAACAAAAACTATGCTAAGTATTGTTAAAGAT	1<<<<<9<<<<<31<77;;;;7<3<<2+;<3<<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:10	H0:i:0	H1:i:1
+B7_593:2:68:140:542	147	chr2	1398	95	36M	=	1217	-217	AAAAACAAAAACTATGCTAAGTATTGGTAAAGATGT	;;<<;7<<<<<<:<<<:<<<:<<<<<<<<<<<<<<<	MF:i:18	Aq:i:19	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_39:6:76:282:1668	147	chr2	1401	99	35M	=	1240	-196	AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG	<<<<<:<<<8<8<<<<<::<<<<7<<<<<<2<<<8	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:4:41:519:609	83	chr2	1401	99	35M	=	1229	-207	AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG	<4;<;<<<<<<<<;4:<<;<<<<<<<<<<<;<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_26:4:100:238:596	83	chr2	1403	56	35M	=	1220	-218	CAAAAACTATTCTAAGTATTGGTAAAGATGTGGGG	4<<<<;<3<3&<3<1<5<31<<3<<<<<<2<<;<,	MF:i:18	Aq:i:17	NM:i:1	UQ:i:5	H0:i:0	H1:i:1
+EAS51_64:3:255:45:399	83	chr2	1404	99	35M	=	1238	-201	AAAAACTATGCTAAGTATTGGTAAAGATGTGGGGA	<5<5<4$;;7/<<<177&7;<<<<<<;<<4<<<<<	MF:i:18	Aq:i:57	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:6:43:47:279	83	chr2	1405	99	35M	=	1206	-234	AAAACTATGCTAAGTATTGGTAAAGATGTGGGGAA	<:<<79<<<19<<<1<<9<<+<<<<<3<3<<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_78:7:215:516:299	147	chr2	1406	99	35M	=	1226	-215	AAGCTATGCTAAGTATTGGTAAAGATGTGGGGAAA	;;))7<8:855<<4<;:<<87<<<7<<;<<<*3<<	MF:i:18	Aq:i:64	NM:i:1	UQ:i:8	H0:i:1	H1:i:0
+B7_591:7:116:814:89	147	chr2	1408	99	36M	=	1231	-213	ACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAA	:38<;<;<<<<;<<<<<<<<<<<<<;<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_610:7:34:144:868	83	chr2	1412	76	35M	=	1226	-221	AGCTAAGGAATGGGAAAGGTGTGGGGAAAAAAGTA	&9+&7<&&0&<6<.0<<7<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:76	NM:i:4	UQ:i:50	H0:i:0	H1:i:0
+EAS51_62:7:312:236:655	83	chr2	1412	99	35M	=	1222	-225	TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA	<<8;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:6:17:1179:393	147	chr2	1412	99	35M	=	1232	-215	TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS188_7:6:107:447:488	83	chr2	1412	99	35M	=	1233	-214	TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA	<<3<<<<<<6<<<<<<<<<<<<<<<<7<<<<<<<<	MF:i:18	Aq:i:53	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:6:73:420:812	147	chr2	1414	66	35M	=	1232	-217	CTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAA	5'<<<,<&,<<,<<<<<7<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:3:215:840:760	83	chr2	1416	99	35M	=	1256	-195	AAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACT	<<<8<::<;;<<<:<7<7<;;;<<<<<<<<<<;<<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_589:8:118:829:36	147	chr2	1417	99	35M	=	1233	-219	AGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTC	<8<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:4:290:121:79	83	chr2	1420	99	35M	=	1257	-198	ATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCA	<1<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:8:174:557:872	83	chr2	1423	99	35M	=	1237	-221	GGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAAT	.77<:<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:2:315:412:921	147	chr2	1424	99	35M	=	1254	-205	GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATA	4-<79;<<<4:;:<<<<<<<<4<<<38<<;<<<<<	MF:i:18	Aq:i:45	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:5:95:944:247	147	chr2	1424	99	40M	=	1238	-226	GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCT	:7::;<<<<<;;<<<<<<<<<<<<<<;<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_30:6:137:741:866	83	chr2	1429	99	35M	=	1268	-196	GATGAGGGGAAAAAAGTAAACTCTCAAATATTGCT	<;0:%<:9<<<:<<<<;<<:<<;0;<<<<<::<<6	MF:i:18	Aq:i:70	NM:i:1	UQ:i:4	H0:i:1	H1:i:0
+EAS188_7:6:191:540:493	147	chr2	1432	99	35M	=	1273	-194	GTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGT	<<9<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:1:49:911:980	83	chr2	1434	99	35M	=	1241	-228	GGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGG	44:7<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:62	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:1:248:122:558	83	chr2	1436	99	35M	=	1243	-228	GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA	<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:52	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:1:168:609:646	147	chr2	1436	99	36M	=	1264	-208	GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG	;;<<<<=======;;:;======;==<=========	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:4:7:1347:375	83	chr2	1436	99	35M	=	1271	-200	GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA	47999<<<;;;;;;:5;:;<;;<;;;;;<;;;;;<	MF:i:18	Aq:i:66	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:4:282:962:46	147	chr2	1437	99	35M	=	1282	-190	GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG	69<<<<<:<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_73:5:169:714:644	83	chr2	1437	99	35M	=	1231	-241	GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG	;<<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_11:1:84:92:1246	83	chr2	1437	99	35M	=	1265	-207	GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG	<<<<<<<<<<<<<<<8<<<<<<5<<<<<<<<<<<<	MF:i:18	Aq:i:78	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_34:7:71:62:254	83	chr2	1438	99	35M	=	1264	-209	AAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGT	<<<<<<;8<<<<;<:<<<<<<<;<<;<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_97:7:28:979:519	83	chr2	1439	99	35M	=	1278	-196	AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA	<<<<<6<<<<<<<<<<<<<<<8<<<<<<<<6<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_1:1:63:28:1549	83	chr2	1439	77	35M	=	1247	-227	AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA	<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_593:7:15:244:876	147	chr2	1440	43	36M	=	1246	-230	AAAAGTAAACTCTCAAATATTGCTAGTGTGAGTATA	;<<<7<<<<<.2<-<<<<<<<<<:<<<<<<<<<2<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:27	H0:i:0	H1:i:1
+EAS56_59:8:80:542:549	83	chr2	1443	99	35M	=	1271	-207	AGTAAACTCTCAAATATTGCTAGTGGGAGTATAAA	=9====7=;=======;;==;========<=====	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_28:3:173:627:465	83	chr2	1444	99	36M	=	1260	-220	GTAAACTCTCAAATATTGCTAGTGGGAGTATAAATT	:<<<<;<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:51	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS219_FC30151:5:54:1351:910	147	chr2	1448	99	35M	=	1270	-213	ACTCTCAAATATTGCTAGTGGGAGTATAAATTGTT	<7<7;;<<<<<;<<;;<<;<<<<<<<<<<<<<<;<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS139_19:7:44:1807:833	147	chr2	1449	99	40M	=	1301	-188	CTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCAC	:6:9:<<<6<88<;<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:5:290:247:509	83	chr2	1450	99	35M	=	1276	-209	TCTCAAATATTGCTAGTGGGAGTATAAATTGTTTT	49';<<<<<8;<;;<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS112_32:7:42:804:114	83	chr2	1452	99	35M	=	1281	-206	TCAAATATTGCTAGTGGGAGTATAAATTGTTTTCC	;9<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS218_4:3:39:1671:1928	83	chr2	1453	99	35M	=	1276	-212	CAAATATTGCTAGTGGGAGTATAAATTGTTTTCCA	<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_59:5:90:629:652	147	chr2	1456	99	35M	=	1276	-215	ATATTGCTAGTGGGAGTATAAATTGTTTTCCACTT	<:<7::<:<<<<<8<<<<<<<<<<<<<<<<<<<7<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_66:1:289:207:323	83	chr2	1462	99	35M	=	1279	-218	CTAGTGGGAGTATAAATTGATTTCCACTTTGGAAA	&</<7<<:<7::<<<<+3<-7<<:<7<<<<<<<<<	MF:i:18	Aq:i:41	NM:i:1	UQ:i:12	H0:i:0	H1:i:1
+EAS1_95:7:280:607:113	83	chr2	1468	99	35M	=	1303	-200	GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT	18<-<<<<<<<<<<<<<8<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:72	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_99:3:21:423:169	147	chr2	1468	99	35M	=	1270	-233	GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT	;376;0<<<<99<<<<<<-;<4<<<<<<<<<;<<<	MF:i:18	Aq:i:68	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS56_61:3:45:758:616	83	chr2	1473	99	35M	=	1280	-228	ATAAATTGTTTTCCACTTTGGAAAACAATTTGGTA	<<;<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:54	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_64:2:326:153:231	83	chr2	1477	43	35M	=	1290	-222	ATTGTTTTCAACTTTGGAAAACAATTTGGTAATTT	::6=68=<*$;*=========6=============	MF:i:18	Aq:i:0	NM:i:1	UQ:i:3	H0:i:0	H1:i:1
+EAS192_3:3:88:866:774	83	chr2	1478	99	35M	=	1307	-206	TTGTTTTCCACTTTGGAAAACAATTTGGTAATTTC	<<<;<<<<:<<<<<:<8<<<<<<<<<<8<<<<<<<	MF:i:18	Aq:i:47	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_71:7:194:867:616	147	chr2	1481	99	35M	=	1303	-213	TTTTCCACTTTGGAAAACAATTTGGTAATTTCGTT	38:;;:<:<<<<;<<<<<<<<<<;<<<<<<<<<<<	MF:i:18	Aq:i:67	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_591:2:46:220:58	147	chr2	1483	99	36M	=	1313	-206	TTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTT	98<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:75	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS54_67:6:109:953:668	147	chr2	1485	99	35M	=	1297	-223	CCACTTTGGAAAACAATTTGGTAATTTCGTTTTTT	<:)9<<<<<<<<8:<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:30	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_1:6:4:1131:104	83	chr2	1487	99	35M	=	1307	-215	ACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTT	61;;;<<<<<<<<<;:<<<:<<;<<<<;<<<<<<<	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS114_45:2:23:1754:796	147	chr2	1488	99	35M	=	1329	-194	CTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTT	88897;;;;:;:;;;;;;;;;;;;;;;;;;;;;;;	MF:i:18	Aq:i:69	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS1_108:5:11:555:330	83	chr2	1492	99	35M	=	1321	-206	GGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTT	6;6;9766+<<<<9:2=<===6=============	MF:i:18	Aq:i:56	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:4:308:614:911	147	chr2	1493	90	35M	=	1319	-209	AAAAACAATTTGGTAATTTAGTTTTTTTTTTTTTC	%<<<;:<::<6,<<<<<<:<:<<<<<<<<<<<<<<	MF:i:18	Aq:i:43	NM:i:2	UQ:i:31	H0:i:0	H1:i:1
+EAS139_19:1:82:946:392	83	chr2	1493	99	40M	=	1297	-236	GAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTC	:;:;:,::<:;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:74	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS51_62:2:260:147:818	83	chr2	1497	82	35M	=	1303	-229	AAAATTTGGTAATTTAGTTTTTTTTTTTTTCTTTT	6.=..++==6=76==&===========99======	MF:i:18	Aq:i:41	NM:i:2	UQ:i:18	H0:i:0	H1:i:1
+B7_591:5:124:978:501	83	chr2	1499	99	36M	=	1307	-228	AATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTC	<9<;<<::<;<<;<4<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:77	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+B7_597:8:147:360:141	147	chr2	1501	47	13M1D22M	=	1319	-218	TTTGGTAATTTAGTTTTTTTTTTTTCTTTTCTCTT	<86<<<<73<7<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:130	Aq:i:47	NM:i:1	UQ:i:27	H0:i:0	H1:i:0
+EAS114_39:3:6:1064:1805	147	chr2	1502	99	35M	=	1350	-187	TTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTT	;88<;<;;<<;;<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:76	NM:i:0	UQ:i:0	H0:i:1	H1:i:0
+EAS221_3:2:76:1729:813	83	chr2	1506	99	35M	=	1317	-224	TAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTT	<+6<<<&1<<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:36	NM:i:0	UQ:i:0	H0:i:2	H1:i:0
+EAS54_65:6:326:71:741	153	chr2	1509	0	35M	*	0	0	TCTCGTTTTTTTTTCTTTCTTTTCTCTTTTTTTTT	!!<66<<<<<<<<<&<<7&<<<<:<*<<<<<<<<1	MF:i:32	Aq:i:0	NM:i:2	UQ:i:22	H0:i:1	H1:i:12
+EAS112_34:6:145:144:263	73	chr2	1509	0	35M	*	0	0	TTTCGTTTTTTTTTTTTTTTTTTCCCCTTTCTTTT	<<<<<<<<<<<<<<<<+4+4&+&(&&*2&8&&&)&	MF:i:32	Aq:i:0	NM:i:4	UQ:i:29	H0:i:0	H1:i:0
+EAS1_105:1:329:407:872	73	chr2	1510	0	35M	*	0	0	TTCGTTTTTTTTTTTTTTTTTTCCCTTTTTTTTTT	<<<<<<<<<<<<<<<<<<6;<<&4::<++<(&;<<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:46	H0:i:0	H1:i:0
+EAS139_19:2:82:154:1333	147	chr2	1511	77	40M	=	1349	-202	TTTTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTT	:5'::<<<;<<<<<<</3<<<&4&7<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:85	H1:i:85
+EAS56_63:3:41:468:459	147	chr2	1513	0	35M	=	1352	-196	TTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTT	+;<<<<<<<<<<<;&<<;;88&<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:85	H1:i:85
+EAS114_28:6:11:151:750	153	chr2	1513	5	36M	*	0	0	GTTTTTATTTTTTTCCTCTCTCTTTTTTTTTTTTTT	:'1:%4;4<<<+;6;&9+6;/<<<<<<<<<<<<<<<	MF:i:32	Aq:i:5	NM:i:3	UQ:i:41	H0:i:0	H1:i:3
+EAS139_11:5:52:1278:1478	83	chr2	1513	47	35M	=	1322	-226	GTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTT	.8::<<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:9	H1:i:85
+B7_591:2:309:798:997	153	chr2	1514	0	36M	*	0	0	TTTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT	466;<<744077+&7097&%&4<9<<<9<<<::<<<	MF:i:32	Aq:i:0	NM:i:1	UQ:i:5	H0:i:12	H1:i:85
+EAS1_93:6:218:144:794	121	chr2	1514	0	35M	=	1514	0	TTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT	;92/;5:<6)+<5)67</9<&<&<<<:<<<57<<<	MF:i:64	Aq:i:0	NM:i:0	UQ:i:0	H0:i:22	H1:i:85
+EAS1_93:6:218:144:794	181	chr2	1514	0	*	=	1514	0	GGGTGCATTGCTATGTTGCGGTCGCTTTGCCTCCT	++(3:&)5<9035<3):-<53<+&&-+)<<&)&<6	MF:i:192
+EAS1_97:6:222:305:337	153	chr2	1514	0	35M	*	0	0	TTTTTTTTTTTTTTTTTTCCCTTTTTTTTTTTTTT	;;;;;<<';<<<<*;<<<78;7<7<;<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:32	H0:i:0	H1:i:37
+EAS1_105:3:7:35:528	89	chr2	1514	0	35M	*	0	0	TTTTTTTTTTGTTCTTTACTCTTTTTTTTTTTTTT	<<<<<<<<<<5<<<(<<%<<-8<<<<<<<<<8<<<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:24	H0:i:0	H1:i:0
+EAS54_65:2:182:924:833	137	chr2	1514	0	35M	*	0	0	TTTTTTTTTTTTTATTTGCGCTTTTTTTTTTTTTT	<<<<<<<<<<<<<)7<<)3/:07<<9<9<<==<7<	MF:i:32	Aq:i:0	NM:i:3	UQ:i:30	H0:i:0	H1:i:0
+EAS54_81:8:78:735:536	153	chr2	1514	0	35M	*	0	0	TTTTTTTTTTTTTCATTTCTCTTTTTTTTTTTTTT	;9<<<<<<<.7<9'%1<<)2::<<<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:1	UQ:i:4	H0:i:0	H1:i:15
+EAS56_59:5:232:336:46	137	chr2	1514	0	35M	*	0	0	ATTTTTTTTTTTTCTTTTCTCTTGTTTCTTTTTTT	+<<<<<<<<<<<<6<<<<;<6<<&&<,3<<<<3,,	MF:i:32	Aq:i:0	NM:i:3	UQ:i:50	H0:i:0	H1:i:0
+EAS188_4:5:308:552:77	89	chr2	1514	0	35M	*	0	0	TTTTCTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT	1;-<%<;8<<<<<&<5-<58:5:<<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:1	UQ:i:4	H0:i:30	H1:i:85
+B7_597:5:125:957:753	137	chr2	1515	0	35M	*	0	0	TTTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTT	<8<<<;<8;8//++(,(+++&++(/+008880;;/	MF:i:32	Aq:i:0	NM:i:2	UQ:i:14	H0:i:0	H1:i:1
+EAS1_97:4:274:287:423	83	chr2	1515	0	35M	=	1332	-218	TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT	7<<<<9<<9<<<.<<<<90-<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:12	H1:i:85
+EAS54_71:8:234:21:950	89	chr2	1515	0	33M	*	0	0	TTTTTTTTTTTTCTCCTCTCTTTTTTTTTTTTT	<<<<<<<<<&<;2;&-<,<+;<<<7<<<;<;<;	MF:i:32	Aq:i:0	NM:i:2	UQ:i:17	H0:i:0	H1:i:7
+EAS56_61:6:256:67:461	117	chr2	1515	0	*	=	1515	0	TCATGTTTGTGTCTTTCTATGCATTTTTTTTTTTT	!!7181!63:6-:!-163(-1%-18<<4<<<<<<<	MF:i:192
+EAS56_61:6:256:67:461	185	chr2	1515	0	35M	=	1515	0	TTGTTTTTTCTTCTTTTCTCTTTTTTTTTTTTTTT	*.%53.:)1+9;3397;1795507+335;.&51)5	MF:i:64	Aq:i:0	NM:i:2	UQ:i:14	H0:i:2	H1:i:85
+EAS56_65:8:317:83:500	153	chr2	1515	0	35M	*	0	0	TTTTTTTTTTTTCTTTTCTCCTTTTTTTTTTGTTT	;;;;;<<<<<<<3<<<)-;31<<)97<;9<<:<<<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:41	H0:i:0	H1:i:0
+EAS114_30:2:303:428:326	147	chr2	1515	0	35M	=	1345	-205	TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT	4<;<<;<;<4<<8;;;;.8+;<<;<8<;<;<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:11	H1:i:85
+EAS188_7:1:290:286:763	147	chr2	1515	75	35M	=	1349	-201	TTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTT	<<<<;<<<<<<<&<<<<&77<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:29	H1:i:85
+B7_591:7:89:67:709	89	chr2	1516	0	36M	*	0	0	TTTTTTTTTTTGTCTTCTCTTTTTTTTTTTTTTTTT	:7:::9:7:<<7<'<<477<<<<<<<<<:<<<<<:<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:28	H0:i:0	H1:i:17
+EAS56_65:3:47:64:359	89	chr2	1516	0	35M	*	0	0	TTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTTT	<<<6<<<<<<<4<4</9<4@<<;<<<<<<<<<<<<	MF:i:32	Aq:i:0	NM:i:2	UQ:i:33	H0:i:0	H1:i:6
+EAS56_65:4:296:78:421	121	chr2	1518	0	35M	=	1518	0	TCTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTT	!!<<<:<<<<..<::<<<<<<<<<<<<<<<<<<<<	MF:i:64	Aq:i:0	NM:i:1	UQ:i:4	H0:i:85	H1:i:85
+EAS56_65:4:296:78:421	181	chr2	1518	0	*	=	1518	0	TGTTGGTGTTCGTTTTTTCTCCTGTTTCTTTTTCT	<<*<4<<<;:<0<<<<<<<<+;<9<<1<<;<<<+:	MF:i:192
+EAS1_95:4:238:124:196	89	chr2	1519	0	35M	*	0	0	TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT	<0<9.<5.5<<<<9<1<<5<<85<5<<<9<:<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:85	H1:i:85
+EAS54_65:7:56:57:985	117	chr2	1519	0	*	=	1519	0	TTCTGTCTTCTCTCCTGTCTTCTTTTCTCTTCTTT	<9'<.<7<<2<<;77<7<<<<7<7<<<<7<<<2<<	MF:i:192
+EAS54_65:7:56:57:985	185	chr2	1519	0	35M	=	1519	0	TTTTTTCTCTTTTCTCTTTTTTTTTTTTTTTTTTT	666666*6&1666+64666666666&266666666	MF:i:64	Aq:i:0	NM:i:1	UQ:i:9	H0:i:85	H1:i:85
+EAS56_61:3:5:45:441	89	chr2	1519	0	35M	*	0	0	TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT	;;58:<:<(:<<11<&<1<<;<<<<><<<<<<<<<	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:82	H1:i:85
+B7_589:6:33:356:636	73	chr2	1520	0	35M	*	0	0	TTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTT	<<<<<<<8;<<<<<<<<<<<<<7<<<<<<<;;3&3	MF:i:32	Aq:i:0	NM:i:0	UQ:i:0	H0:i:14	H1:i:85
+EAS114_45:6:86:859:1779	137	chr2	1520	0	35M	*	0	0	TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT	;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699	MF:i:32	Aq:i:0	NM:i:1	UQ:i:26	H0:i:0	H1:i:15
+EAS54_71:8:105:854:975	83	chr2	1523	71	33M	=	1354	-202	TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTG	<<<<;<:<<;<&<;<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:0	UQ:i:0	H0:i:85	H1:i:85
+EAS51_62:4:187:907:145	153	chr2	1524	28	35M	*	0	0	TTTCTTCTCTCTCTTTTTTTTTTTTTTTATTGCAT	<<<+;;,6<<<<6<<<<<<<<<<<<<<<<<<<<<<	MF:i:32	Aq:i:28	NM:i:3	UQ:i:59	H0:i:0	H1:i:0
+EAS54_71:4:284:269:882	73	chr2	1524	0	34M	*	0	0	TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA	<;<<<<<8<7<8;<<<;<7<<<<<;272;73&&)	MF:i:32	Aq:i:0	NM:i:1	UQ:i:17	H0:i:0	H1:i:85
+EAS56_63:4:141:9:811	137	chr2	1524	10	35M	*	0	0	TTTCTTTTCTCCTTTTTTTTTTTTTTTTTCTACAT	<<<;<<<<<<<;<;<:<<<;<<<<<<<<..));;.	MF:i:32	Aq:i:0	NM:i:3	UQ:i:47	H0:i:2	H1:i:27
+EAS114_30:6:277:397:932	73	chr2	1524	0	35M	*	0	0	TTTCTTTTCACTTTTTTTTTTTTTTTTTTTTACTT	<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8(,0%(	MF:i:32	Aq:i:0	NM:i:3	UQ:i:42	H0:i:2	H1:i:85
+EAS139_11:7:50:1229:1313	83	chr2	1528	77	35M	=	1376	-187	TTTTTTCTTTTTTTTTTTTTTTTTTTTGCATGCCA	<<<<,<&<7<<<<<<<<<<<<<<<<<<<<<<<<<<	MF:i:18	Aq:i:0	NM:i:1	UQ:i:11	H0:i:3	H1:i:7
+EAS54_65:3:320:20:250	147	chr2	1532	77	35M	=	1367	-200	TTTTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAA	+'''/<<<<7:;+<;::<<<;;<<<<<<<<<<<<<	MF:i:18	Aq:i:6	NM:i:2	UQ:i:24	H0:i:1	H1:i:2
+EAS114_26:7:37:79:581	83	chr2	1533	68	35M	=	1349	-219	TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA	3,,,===6===<===<;=====-============	MF:i:18	Aq:i:27	NM:i:2	UQ:i:23	H0:i:0	H1:i:1
diff --git a/test/data/illu_20_chunk.bam b/test/data/illu_20_chunk.bam
new file mode 100644
index 0000000..0d58f27
Binary files /dev/null and b/test/data/illu_20_chunk.bam differ
diff --git a/test/data/ion_20_chunk.bam b/test/data/ion_20_chunk.bam
new file mode 100644
index 0000000..237cbb9
Binary files /dev/null and b/test/data/ion_20_chunk.bam differ
diff --git a/test/data/long_header.bam b/test/data/long_header.bam
new file mode 100644
index 0000000..850e2d1
Binary files /dev/null and b/test/data/long_header.bam differ
diff --git a/test/data/mg1655_chunk.bam b/test/data/mg1655_chunk.bam
new file mode 100644
index 0000000..e5b33df
Binary files /dev/null and b/test/data/mg1655_chunk.bam differ
diff --git a/test/data/no_block_size.bam b/test/data/no_block_size.bam
new file mode 100644
index 0000000..a6fb055
Binary files /dev/null and b/test/data/no_block_size.bam differ
diff --git a/test/data/tags.bam b/test/data/tags.bam
new file mode 100644
index 0000000..3f12a89
Binary files /dev/null and b/test/data/tags.bam differ
diff --git a/test/data/tags.bam.bai b/test/data/tags.bam.bai
new file mode 100644
index 0000000..9822d12
Binary files /dev/null and b/test/data/tags.bam.bai differ
diff --git a/test/data/wrong_bc_subfield_length.bam b/test/data/wrong_bc_subfield_length.bam
new file mode 100644
index 0000000..361126e
Binary files /dev/null and b/test/data/wrong_bc_subfield_length.bam differ
diff --git a/test/data/wrong_extra_gzip_length.bam b/test/data/wrong_extra_gzip_length.bam
new file mode 100644
index 0000000..47c6289
Binary files /dev/null and b/test/data/wrong_extra_gzip_length.bam differ
diff --git a/test/unittests.d b/test/unittests.d
new file mode 100644
index 0000000..4435008
--- /dev/null
+++ b/test/unittests.d
@@ -0,0 +1,482 @@
+/*
+    This file is part of BioD.
+    Copyright (C) 2012-2013    Artem Tarasov <lomereiter at gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+    
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+*/
+
+import bio.bam.reader;
+import bio.bam.writer;
+import bio.sam.reader;
+import bio.sam.header;
+import bio.bam.md.core;
+import bio.bam.md.reconstruct;
+import bio.bam.pileup;
+import bio.bam.baseinfo;
+import bio.bam.validation.samheader;
+import bio.bam.validation.alignment;
+import bio.bam.utils.samheadermerger;
+import bio.sam.utils.recordparser;
+import bio.core.bgzf.block;
+import bio.core.bgzf.inputstream;
+import bio.core.bgzf.outputstream;
+import bio.core.utils.roundbuf;
+import bio.core.utils.range;
+import bio.core.utils.tmpfile;
+import bio.core.utils.stream;
+import bio.core.sequence;
+import bio.core.base;
+import bio.core.tinymap;
+import bio.core.utils.roundbuf;
+
+import std.path;
+import std.range;
+import std.stdio;
+import std.stream;
+import std.algorithm;
+import std.array;
+import std.conv;
+import std.exception;
+import std.math;
+import std.typetuple;
+import std.regex;
+
+CigarOperation[] cigarFromString(string cigar) {
+    return match(cigar, regex(`(\d+)([A-Z=])`, "g")).map!(m => CigarOperation(m[1].to!uint, m[2].to!char)).array;
+}
+
+unittest {
+
+    writeln("Testing extracting SAM header...");
+    auto fn = buildPath(dirName(__FILE__), "data", "ex1_header.bam");
+    auto bf = new BamReader(fn);
+    assert(bf.header.format_version == "1.3");
+    assert(bf.header.sorting_order == SortingOrder.coordinate);
+    assert(bf.header.sequences.length == 2);
+    assert(bf.header.getSequenceIndex("chr1") == 0);
+    assert(bf.header.sequences["chr2"].length == 1584);
+
+    fn = buildPath(dirName(__FILE__), "data", "bins.bam");
+    bf = new BamReader(fn);
+    assert(bf.header.sorting_order == SortingOrder.unknown);
+    assert(bf.header.sequences.length == 3);
+    assert(bf.header.read_groups.length == 0);
+    assert(bf.header.getSequenceIndex("large") == 2);
+    assert(bf.header.sequences["small"].length == 65536);
+
+    {
+    writeln("Testing alignment parsing...");
+    fn = buildPath(dirName(__FILE__), "data", "ex1_header.bam");
+    bf = new BamReader(fn);
+    auto reads = bf.reads;
+    auto read = reads.front;
+    assert(equal(read.sequence, "CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA"));
+    assert(equal(map!"cast(char)(a + 33)"(read.base_qualities),
+                "<<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<;"));
+    assert(bf.reference(read.ref_id).name == "chr1");
+    assert(read.name == "EAS56_57:6:190:289:82");
+    assert(read.flag == 69);
+    assert(read.position == 99);
+    assert(read.mapping_quality == 0);
+    reads.popFront();
+    reads.popFront();
+    assert(reads.front.cigarString() == "35M");
+    assert(reads.front.to!string() == "EAS51_64:3:190:727:308	99	chr1	103	99	35M	=	263	195	GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG	<<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844	MF:i:18	Aq:i:73	NM:i:0	UQ:i:0	H0:i:1	H1:i:0");
+    assert(bf.header.getSequenceIndex("chr1") == read.ref_id);
+    }
+
+    assert(bf.reads.front.name == "EAS56_57:6:190:289:82");
+
+    writeln("Testing tag parsing...");
+    fn = buildPath(dirName(__FILE__), "data", "tags.bam");
+    bf = new BamReader(fn);
+    foreach (alignment; bf.reads) {
+        auto name = alignment.name;
+        assert(name[0..4] == "tag_");
+        char[] tag;
+        name = name[4..$];
+        while (name[0] != ':') {
+            tag ~= name[0];
+            name = name[1..$];
+        }
+        name = name[1..$];
+        auto value = alignment[tag.idup].toSam();
+        if (name != value) {
+            writeln("tag: ", tag, "\tname: ", name, "\tvalue: ", value);
+            writeln("value bam_typeid: ", alignment[tag.idup].bam_typeid);
+        }
+
+        assert(name == value);
+    }
+
+    writeln("Testing exception handling...");
+    fn = buildPath(dirName(__FILE__), "data", "duplicated_block_size.bam");
+    assertThrown!BgzfException(new BamReader(fn));
+    fn = buildPath(dirName(__FILE__), "data", "no_block_size.bam");
+    assertThrown!BgzfException(new BamReader(fn));
+    fn = buildPath(dirName(__FILE__), "data", "wrong_extra_gzip_length.bam");
+    assertThrown!BgzfException(new BamReader(fn));
+    fn = buildPath(dirName(__FILE__), "data", "wrong_bc_subfield_length.bam");
+    assertThrown!BgzfException(reduce!"a+b.sequence_length"(0, (new BamReader(fn)).reads!withoutOffsets));
+    fn = buildPath(dirName(__FILE__), "data", "corrupted_zlib_archive.bam");
+    import bio.core.utils.zlib;
+    assertThrown!ZlibException(walkLength((new BamReader(fn)).reads));
+
+    writeln("Testing random access...");
+    fn = buildPath(dirName(__FILE__), "data", "bins.bam");
+    bf = new BamReader(fn);
+
+    void compareWithNaiveApproach(int beg, int end) {
+
+        auto refseq = array(bf["large"][beg .. end]);
+
+        auto naive = array(filter!((BamRead a) { 
+                         return a.ref_id != -1 &&
+                                bf.reference(a.ref_id).name == "large" &&
+                                a.position < end &&
+                                a.position + a.basesCovered() > beg; })
+                            (bf.reads!withoutOffsets));
+        if (!equal(naive, refseq)) {
+            writeln(beg);
+            writeln(end);
+            writeln(array(map!"a.name"(refseq)));
+            writeln(array(map!"a.name"(naive)));
+        }
+        assert(equal(refseq, naive));
+    }
+
+    compareWithNaiveApproach(1400, 1500);
+    compareWithNaiveApproach(  10,  123);
+    compareWithNaiveApproach( 135, 1236);
+    compareWithNaiveApproach(1350, 3612);
+    compareWithNaiveApproach( 643, 1732);
+    compareWithNaiveApproach( 267, 1463);
+    compareWithNaiveApproach(   0,   30);
+    compareWithNaiveApproach(1363, 1612);
+    compareWithNaiveApproach( 361, 1231);
+    compareWithNaiveApproach( 322,  612);
+    compareWithNaiveApproach( 912,  938);
+    compareWithNaiveApproach(   0, 3000);
+    compareWithNaiveApproach(   0,  100);
+    compareWithNaiveApproach(   0, 1000);
+    compareWithNaiveApproach(   0, 1900);
+    compareWithNaiveApproach(   1,  279);
+    for (auto i = 50_000; i < 1_000_000; i += 50_000) {
+        compareWithNaiveApproach(i, i + 100);
+    }
+
+    {
+        auto fst_offset_tiny = bf["tiny"].startVirtualOffset();
+        auto fst_offset_small = bf["small"].startVirtualOffset();
+        auto fst_offset_large = bf["large"].startVirtualOffset();
+
+        auto fst_read_tiny = bf.getReadAt(fst_offset_tiny);
+        auto fst_read_small = bf.getReadAt(fst_offset_small);
+        auto fst_read_large = bf.getReadAt(fst_offset_large);
+
+        assert(fst_read_tiny.name == "tiny:r1:0..1:len1:bin4681:hexbin0x1249");
+        assert(fst_read_small.name == "small:r1:0..1:len1:bin4681:hexbin0x1249");
+        assert(fst_read_large.name == "large:r1:0..1:len1:bin4681:hexbin0x1249");
+    }
+
+    writeln("Testing Value code...");
+    Value v = 5;
+    assert(v.is_integer);
+    assert(v.toSam() == "i:5");
+    assert(v == 5);
+    assert(v == "5");
+    assert(v != [1,2,3]);
+    v = "abc";
+    assert(v.is_string);
+    assert(v.toSam() == "Z:abc");
+    assert(v == "abc");
+    v = [1, 2, 3];
+    assert(v.is_numeric_array);
+    assert(v.toSam() == "B:i,1,2,3");
+    assert(v == [1,2,3]);
+    assert(v == "[1, 2, 3]");
+    v = [1.5, 2.3, 17.0];
+    assert(v.is_numeric_array);
+    assert(v.toSam() == "B:f,1.5,2.3,17");
+    assert(approxEqual(to!(float[])(v), [1.5, 2.3, 17]));
+    v = 5.6;
+    assert(v.is_float);
+    assert(v.toSam() == "f:5.6");
+    assert(approxEqual(to!float(v), 5.6));
+    v = -17;
+    assert(v.is_signed);
+    assert(v.toSam() == "i:-17");
+    assert(v == -17);
+    assert(v == "-17");
+    v = 297u;
+    assert(v.is_unsigned);
+    assert(v.toSam() == "i:297");
+    assert(v == 297);
+    assert(v == "297");
+
+    short[] array_of_shorts = [4, 5, 6];
+    v = array_of_shorts;
+    assert(v.is_numeric_array);
+    assert(v.toSam() == "B:s,4,5,6");
+    assert(to!(short[])(v) == array_of_shorts);
+    assert(v == [4,5,6]);
+    assert(v == "[4, 5, 6]");
+
+    v = null;
+    assert(v.is_nothing);
+
+    v = "0eabcf123";
+    v.setHexadecimalFlag();
+    assert(v.is_hexadecimal_string);    
+    assert(v == "0eabcf123");
+
+    writeln("Testing parseAlignmentLine/toSam functions...");
+    fn = buildPath(dirName(__FILE__), "data", "ex1_header.bam");
+    bf = new BamReader(fn);
+    foreach (read; bf.reads) {
+        auto line = read.to!string();
+        auto read2 = parseAlignmentLine(line, bf.header);
+        read2.associateWithReader(bf);
+        if (read != read2) {
+            writeln(read);
+            writeln(read2);
+            writeln(read.raw_data);
+            writeln(read2.raw_data);
+        }
+        assert(read == read2);
+    }
+
+    fn = buildPath(dirName(__FILE__), "data", "tags.bam");
+    bf = new BamReader(fn);
+    foreach (read; bf.reads) {
+        auto line = read.to!string();
+        auto read2 = parseAlignmentLine(line, bf.header);
+        if (read != read2 && isValid(read)) {
+            writeln(read.name);
+        }
+        assert(read == read2 || !isValid(read));
+    }
+
+    writeln("Testing BAM writing...");
+    fn = buildPath(dirName(__FILE__), "data", "ex1_header.bam");
+    bf = new BamReader(fn);
+    {
+    string tmp = tmpFile("12035913820619231129310.bam");
+    auto stream = new bio.core.utils.stream.File(tmp, "wb+");
+
+    auto writer = new BamWriter(stream);
+
+    writer.writeSamHeader(bf.header);
+    writer.writeReferenceSequenceInfo(bf.reference_sequences);
+
+    foreach (read; bf.reads)
+        writer.writeRecord(read);
+    
+    writer.flush();
+
+    stream.seekSet(0);
+    assert(walkLength((new BamReader(stream)).reads) == 3270);
+    stream.close();
+    }
+
+    writeln("Testing SAM reading...");
+    {
+    auto sf = new SamReader(buildPath(dirName(__FILE__), "data", "ex1_header.sam"));
+    assert(sf.reads.front.ref_id == 0);
+    assert(equal(sf.reads, bf.reads!withoutOffsets));
+    }
+
+    writeln("Testing pileup (high-level aspects)...");
+    {
+        // All of pileup functions should automatically filter out unmapped reads.
+
+        // When reads in a range are aligned to different references,
+        // pileup objects should process only the first one.
+        bf = new BamReader(fn); // chr1, chr2
+        {
+            auto pileup = makePileup(bf.reads);
+            foreach (column; pileup) {
+                foreach (read; column.reads) {
+                    assert(bf.reference_sequences[read.ref_id].name == "chr1");
+                    assert(read.ref_id == column.ref_id);
+                    assert(!read.is_unmapped);
+                }
+            }
+        }
+        // However, if pileupColumns is used, columns corresponding to chr1
+        // should come first, and after them -- those for chr2
+        {
+            auto columns = pileupColumns(bf.reads);
+            int current_ref_id = -1;
+
+                                      // [99 .. 1569]   [1 .. 1567]
+            int[2] expected_columns = [1470,            1567]; 
+            foreach (column; columns) {
+                int ref_id = column.ref_id;
+                --expected_columns[ref_id];
+                if (ref_id != current_ref_id) {
+                    assert(ref_id > current_ref_id);
+                    switch (ref_id) {
+                        case 0:
+                            assert(column.reads.front.name == "EAS56_57:6:190:289:82");
+                            assert(column.position == 99);
+                            break;
+                        case 1:
+                            assert(column.reads.front.name == "B7_591:8:4:841:340");
+                            assert(column.position == 0);
+                            break;
+                        default:
+                            break;
+                    }
+
+                    current_ref_id = ref_id;
+                }
+                if (!column.reads.empty) {
+                    foreach (read; column.reads) {
+                        assert(read.ref_id == ref_id);
+                        assert(!read.is_unmapped);
+                    }
+                }
+            }
+            assert(expected_columns == [0, 0]);
+        }
+    }
+
+    writeln("Testing basesWith functionality...");
+    {
+        fn = buildPath(dirName(__FILE__), "data", "mg1655_chunk.bam");
+        bf = new BamReader(fn);
+        auto rg = bf.header.read_groups.values.front;
+        auto flow_order = rg.flow_order;
+        auto key_sequence = rg.key_sequence;
+        auto reads = array(bf.reads);
+
+        auto read = reads[1];
+        assert(!read.is_reverse_strand);
+
+        alias TypeTuple!("FZ", "MD", 
+                         Option.cigarExtra, 
+                         Option.mdCurrentOp, 
+                         Option.mdPreviousOp,
+                         Option.mdNextOp) Options;
+
+        auto bases = basesWith!Options(read, 
+                                       arg!"flowOrder"(flow_order),
+                                       arg!"keySequence"(key_sequence));
+     
+        typeof(bases.front) bfront;
+        bases.constructFront(&bfront);
+
+        assert(bfront.md_operation.is_match);
+        assert(bfront.md_operation.match == 309);
+        assert(bfront.md_operation_offset == 0);
+        assert(bfront.previous_md_operation.isNull);
+        assert(bfront.next_md_operation.is_deletion);
+        assert(equal(bfront.next_md_operation.deletion, "G"));
+        assert(equal(bfront.cigar_after, read.cigar[1 .. $]));
+        assert(equal(drop(map!"a.reference_base"(bases), 191),
+                     "-CCCGATTGGTCGTTGCTTTACGCTGATTGGCGAGTCCGGGGAACGTACCTTTGCTATCAGTCCAGGCCACATGAACCAGCTGCGGGCTGAAAGCATTCCGGAAGATGTGATTGCCGGACCTCGGCACTGGTTCTCACCTCATATCTGGTGCGTTGCAAGCCGGGTGAACCCATGCCGGAAGCACCATGAAAGCCATTGAGTACGCGAAGAAATATA"));
+        assert(equal(bases, read.sequence));
+        assert(equal(take(map!"a.flow_call.intensity_value"(bases), 92),
+                     [219, 219, 194, 194, 92, 107, 83, 198, 198, 78, 
+                     // A   A    C    C    T   G   A    T    T    A
+                      292, 292, 292,  81, 79,  78, 95, 99, 315, 315, 315,
+                     // C   C    C    A    T   C   A    G    T    T    T
+                       89,  79, 290, 290, 290, 100, 209, 209, 87, 80,
+                     // G   C    G    G    G   T    G    G    C   A
+                      191, 191, 101, 179, 179, 210, 210, 99, 184, 184,
+                     // C   C   A     T    T    G   G    T    A   A
+                       90, 91, 193, 193, 66, 100, 112, 79, 108, 106, 212, 212,
+                     // C   A   C    C    A   T    G    C   A    C    A    A
+                       90, 96, 111, 94, 64, 94, 187, 187, 84, 110, 98, 102, 100,
+                     // C   T   A    C   T   C   G    G    T   G    C   T    C
+                       93, 89, 205, 205, 107, 98, 96, 91, 203, 203, 68, 180, 180,
+                     // G   C   G    G    A    C   G   A   C    C    G   T    T
+                       118, 246, 246, 91, 102, 94, 116, 90, 99, 101, 298, 298, 298
+                     // C    G    G    T   G    C   T    G   C   T    G    G    G
+                     ]));
+
+        // bases must be the same
+        foreach (r; reads) {
+            if (r.is_unmapped) continue;
+            if (r.cigar.length == 0) continue;
+            if (r.is_reverse_strand) {
+                bases = basesWith!Options(r, arg!"flowOrder"(flow_order), 
+                                             arg!"keySequence"(key_sequence));
+                // if reverse strand, bases are also reverse complemented
+                assert(equal(bases, map!"a.complement"(retro(r.sequence))));
+            } else {
+                bases = basesWith!Options(r, arg!"flowOrder"(flow_order), 
+                                             arg!"keySequence"(key_sequence));
+                assert(equal(bases, r.sequence));
+            }
+        }
+    }
+
+    writeln("Testing extended CIGAR conversion...");
+
+    auto cigars = ["2M1D7M1D6M1D13M1D5M1D12M2D7M1D10M1D17M1D12M3D23M",
+                   "12M2D9M1D14M1D16M2D7M1D4M1D12M1D9M1D15M1D6M1D14M1S",
+                   "8S13M2I20M2D6M1D11M1D16M2D10M2D4M1D15M1D4M1D4M",
+                   "5M1D3M1D14M1D9M2D15M1D18M1D10M2D22M1I6M1D11M4S",
+                   "1S24M1D8M1D11M2D7M2D8M2D14M1D6M1D28M",
+                   "1S20M1D7M2D8M1D9M1D11M2D12M1D10M1D10M1D5M1D6M1D3M",
+                   "19M1D12M1D8M1D6M1I3M1D28M1D11M1D4M1D9M2D9M1I2M",
+                   "11S9M2D23M1D10M1I4M1D17M2D11M2D11M1D3M1D10M",
+                   "76M8D14M"].map!cigarFromString.array;
+
+    auto md_ops = ["2^G7^G6^T13^C5^G12^AC1T5^G10^T17^A12^TAA0T22",
+                   "6T1A3^TA9^T14^G10A0G4^AT0A6^T4^A12^C9^T15^T6^C14",
+                   "19C1T11^TC1T4^C11^T16^TG0A0C8^CT4^G15^T4^T4",
+                   "5^T3^G8G0T4^T9^AT1A13^T18^A10^AT0G10T1A14^A11",
+                   "24^T8^A11^AT0A6^TA0T7^AG0C13^C6^T9G0C0A16",
+                   "20^G4G2^GC0T7^G9^T11^AT5A6^G10^T10^A5^A6^C3",
+                   "13C0A4^A9A2^T8^C9^C10A0T16^T11^C4^C9^CA0G10",
+                   "9^TT8C0T13^T5A8^C2T14^CA11^TA0T10^T3^A9T0",
+                   "60T14A0^TATGTGTG14"].map!mdOperations.array;
+
+    auto expected = ["2=1D7=1D6=1D13=1D5=1D12=2D1=1X5=1D10=1D17=1D12=3D1X22=",
+                     "6=1X1=1X3=2D9=1D14=1D10=2X4=2D1X6=1D4=1D12=1D9=1D15=1D6=1D14=1S",
+                     "8S13=2I6=1X1=1X11=2D1=1X4=1D11=1D16=2D2X8=2D4=1D15=1D4=1D4=",
+                     "5=1D3=1D8=2X4=1D9=2D1=1X13=1D18=1D10=2D1X10=1X1=1X8=1I6=1D11=4S",
+                     "1S24=1D8=1D11=2D1X6=2D1X7=2D1X13=1D6=1D9=3X16=",
+                     "1S20=1D4=1X2=2D1X7=1D9=1D11=2D5=1X6=1D10=1D10=1D5=1D6=1D3=",
+                     "13=2X4=1D9=1X2=1D8=1D6=1I3=1D10=2X16=1D11=1D4=1D9=2D1X8=1I2=",
+                     "11S9=2D8=2X13=1D5=1X4=1I4=1D2=1X14=2D11=2D1X10=1D3=1D9=1X",
+                     "60=1X14=1X8D14="].map!cigarFromString.array;
+
+    foreach (cigar, md, expected_cigar; zip(cigars, md_ops, expected))
+        assert(makeExtendedCigar(cigar, md).equal(expected_cigar));
+
+    /* https://github.com/lomereiter/sambamba/issues/137 */
+    {
+      fn = buildPath(dirName(__FILE__), "data", "b.sam");
+      auto sam = new SamReader(fn);
+      auto writer = new BamWriter("/dev/null", 0);
+      writer.writeSamHeader(sam.header);
+      writer.writeReferenceSequenceInfo(sam.reference_sequences);
+      foreach (r; sam.reads)
+        writer.writeRecord(r);
+      writer.finish();
+    }
+}
+
+void main() {
+}

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



More information about the debian-med-commit mailing list