[med-svn] [ngs-sdk] 01/05: Imported Upstream version 1.2.4

Andreas Tille tille at debian.org
Mon Jun 6 10:55:54 UTC 2016


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

tille pushed a commit to branch master
in repository ngs-sdk.

commit 97eabb44a9bb4ed84d62afc5ba9d77d3ad6ac91e
Author: Andreas Tille <tille at debian.org>
Date:   Mon Jun 6 12:41:32 2016 +0200

    Imported Upstream version 1.2.4
---
 .gitignore                                         |    9 +
 Makefile => CHANGES                                |   56 +-
 CHANGES.md                                         |   16 +
 Makefile                                           |    1 -
 configure                                          |    2 +-
 ngs-bam/setup/install.perl                         |    5 +-
 ngs-bam/setup/package.prl                          |    2 +-
 ngs-java/Makefile.java                             |   17 +-
 ngs-java/build.xml                                 |   30 +-
 ngs-java/examples/Makefile                         |   17 +-
 ngs-java/examples/examples/DumpReferenceFASTA.java |  132 +++
 ngs-java/examples/expected.txt                     |  531 +++++++++
 ngs-java/gov/nih/nlm/ncbi/ngs/DownloadManager.java |  143 +++
 ngs-java/gov/nih/nlm/ncbi/ngs/LMProperties.java    |  202 ++++
 .../gov/nih/nlm/ncbi/ngs/LibDependencies.java      |   12 +-
 ngs-java/gov/nih/nlm/ncbi/ngs/LibManager.java      | 1136 +++++++-------------
 ngs-java/gov/nih/nlm/ncbi/ngs/LibPathIterator.java |   32 +-
 .../gov/nih/nlm/ncbi/ngs/LibVersionChecker.java    |  206 ++++
 ngs-java/gov/nih/nlm/ncbi/ngs/Logger.java          |   21 +-
 ngs-java/gov/nih/nlm/ncbi/ngs/Manager.java         |   20 +-
 ngs-java/gov/nih/nlm/ncbi/ngs/NGS.java             |   12 +
 ngs-java/gov/nih/nlm/ncbi/ngs/Version.java         |   16 +-
 .../ngs/error/LibraryIncompatibleVersionError.java |   54 +-
 .../nih/nlm/ncbi/ngs/error/LibraryLoadError.java   |   80 ++
 .../nlm/ncbi/ngs/error/LibraryNotFoundError.java   |   26 +-
 .../ngs/error/cause/ConnectionProblemCause.java    |   27 +-
 .../ngs/error/cause/DownloadDisabledCause.java     |   27 +-
 .../ncbi/ngs/error/cause/InvalidLibraryCause.java  |   29 +-
 .../nlm/ncbi/ngs/error/cause/JvmErrorCause.java    |   29 +-
 .../nlm/ncbi/ngs/error/cause/LibraryLoadCause.java |   14 +-
 .../nlm/ncbi/ngs/error/cause/OutdatedJarCause.java |   16 +-
 .../ngs/error/cause/PrereleaseReqLibCause.java     |   27 +-
 .../ncbi/ngs/error/cause/UnsupportedArchCause.java |   28 +-
 ngs-java/ngs/ReadCollection.java                   |    2 +
 ngs-java/setup/package.prl                         |    2 +-
 ngs-python/build.xml                               |   19 +-
 ngs-python/examples/AlignSliceTest.py              |    3 +
 ngs-python/examples/AlignSliceTest26.py            |    3 +
 ngs-python/examples/AlignTest.py                   |    3 +
 ngs-python/examples/AlignTest26.py                 |    3 +
 .../{AlignTest.py => DumpReferenceFASTA.py}        |   76 +-
 ngs-python/examples/FragTest.py                    |    3 +
 ngs-python/examples/FragTest26.py                  |    3 +
 ngs-python/examples/PileupTest.py                  |    3 +
 ngs-python/examples/PileupTest26.py                |    3 +
 ngs-python/examples/RefTest.py                     |    3 +
 ngs-python/examples/RefTest26.py                   |    3 +
 ngs-python/ngs/Alignment.py                        |    2 +-
 ngs-python/ngs/LibManager.py                       |    2 +-
 ngs-python/ngs/Pileup.py                           |    2 +-
 ngs-python/ngs/PileupEvent.py                      |    4 +-
 ngs-python/ngs/ReadCollection.py                   |   14 +-
 ngs-python/ngs/Refcount.py                         |   27 +-
 ngs-python/ngs/Reference.py                        |    2 +-
 ngs-python/ngs/Statistics.py                       |    2 +-
 ngs-python/setup/package.prl                       |    2 +-
 ngs-sdk/dispatch/PackageItf.cpp                    |    7 +
 ngs-sdk/dispatch/version.h                         |    2 +-
 ngs-sdk/examples/DumpReferenceFASTA.cpp            |    5 +-
 ngs-sdk/examples/Makefile                          |  104 +-
 ngs-sdk/examples/expected.txt                      |  531 +++++++++
 ngs-sdk/language/c++/ReferenceSequence.cpp         |   12 +-
 ngs-sdk/language/python/Makefile                   |    1 -
 .../language/python/py_AlignmentIteratorItf.cpp    |   26 +-
 ngs-sdk/language/python/py_AlignmentItf.cpp        |  621 ++++++++++-
 ngs-sdk/language/python/py_ErrorMsg.cpp            |   27 -
 ngs-sdk/language/python/py_ErrorMsg.hpp            |  307 ------
 ngs-sdk/language/python/py_FragmentIteratorItf.cpp |   26 +-
 ngs-sdk/language/python/py_FragmentItf.cpp         |  135 ++-
 .../language/python/py_PileupEventIteratorItf.cpp  |   26 +-
 ngs-sdk/language/python/py_PileupEventItf.cpp      |  324 +++++-
 ngs-sdk/language/python/py_PileupIteratorItf.cpp   |   26 +-
 ngs-sdk/language/python/py_PileupItf.cpp           |  108 +-
 ngs-sdk/language/python/py_ReadCollectionItf.cpp   |  405 ++++++-
 .../language/python/py_ReadGroupIteratorItf.cpp    |   26 +-
 ngs-sdk/language/python/py_ReadGroupItf.cpp        |   54 +-
 ngs-sdk/language/python/py_ReadIteratorItf.cpp     |   26 +-
 ngs-sdk/language/python/py_ReadItf.cpp             |  216 +++-
 .../language/python/py_ReferenceIteratorItf.cpp    |   26 +-
 ngs-sdk/language/python/py_ReferenceItf.cpp        |  378 ++++++-
 .../language/python/py_ReferenceSequenceItf.cpp    |  135 ++-
 ngs-sdk/language/python/py_StatisticsItf.cpp       |  162 ++-
 ngs-sdk/language/python/py_StringItf.cpp           |   27 +-
 ngs-sdk/{ => ngs}/win/stdbool.h                    |    0
 ngs-sdk/setup/package.prl                          |    2 +-
 ngs-sdk/win/.gitignore                             |    1 -
 ngs-sdk/win/build.xml                              |   67 ++
 ngs-sdk/win/libadapter.files                       |   35 +
 ngs-sdk/win/libadapter.vcxproj                     |   64 --
 ngs-sdk/win/libdispatch.files                      |   54 +
 ngs-sdk/win/libdispatch.vcxproj                    |   84 --
 ngs-sdk/win/libngs-c++.files                       |   23 +
 ngs-sdk/win/libngs-c++.vcxproj                     |   53 -
 ngs-sdk/win/libtest_engine.files                   |   18 +
 ngs-sdk/win/libtest_engine.vcxproj                 |   42 -
 ngs-sdk/win/ngs-sdk.files                          |   79 ++
 ngs-sdk/win/ngs-sdk.vcxproj                        |  124 ---
 ngs-sdk/win/ngs-test.files                         |    6 +
 ngs-sdk/win/vs2010/.gitignore                      |    4 +
 .../libngs-adapt-c++-4ff9a6f5.ipch                 |  Bin 0 -> 524288 bytes
 ngs-sdk/win/{ => vs2010}/lib-project.props         |    7 +
 ngs-sdk/win/vs2010/libadapter.vcxproj              |   27 +
 .../win/{ => vs2010}/libadapter.vcxproj.filters    |    0
 ngs-sdk/win/vs2010/libdispatch.vcxproj             |   27 +
 .../win/{ => vs2010}/libdispatch.vcxproj.filters   |    0
 ngs-sdk/win/vs2010/libngs-c++.vcxproj              |   27 +
 .../win/{ => vs2010}/libngs-c++.vcxproj.filters    |    0
 ngs-sdk/win/vs2010/libtest_engine.vcxproj          |   26 +
 .../{ => vs2010}/libtest_engine.vcxproj.filters    |    0
 ngs-sdk/win/{ => vs2010}/ngs-common.props          |   21 +-
 ngs-sdk/win/{ => vs2010}/ngs-sdk.sln               |    0
 ngs-sdk/win/vs2010/ngs-sdk.vcxproj                 |   55 +
 ngs-sdk/win/{ => vs2010}/ngs-sdk.vcxproj.filters   |    0
 ngs-sdk/win/{ => vs2010}/ngs-test.vcxproj          |   52 +-
 ngs-sdk/win/{ => vs2010}/ngs-test.vcxproj.filters  |    0
 ngs-sdk/win/vs2013/.gitignore                      |    4 +
 ngs-sdk/win/{ => vs2013}/lib-project.props         |    7 +
 ngs-sdk/win/vs2013/libadapter.vcxproj              |    9 +
 .../win/{ => vs2013}/libadapter.vcxproj.filters    |  200 ++--
 ngs-sdk/win/vs2013/libdispatch.vcxproj             |    9 +
 .../win/{ => vs2013}/libdispatch.vcxproj.filters   |    0
 ngs-sdk/win/vs2013/libngs-c++.vcxproj              |    9 +
 .../win/{ => vs2013}/libngs-c++.vcxproj.filters    |    0
 ngs-sdk/win/vs2013/libtest_engine.vcxproj          |    8 +
 .../{ => vs2013}/libtest_engine.vcxproj.filters    |   98 +-
 ngs-sdk/win/{ => vs2013}/ngs-common.props          |   44 +-
 ngs-sdk/win/{ => vs2013}/ngs-sdk.sln               |  250 ++---
 ngs-sdk/win/vs2013/ngs-sdk.vcxproj                 |   37 +
 ngs-sdk/win/{ => vs2013}/ngs-sdk.vcxproj.filters   |  486 ++++-----
 ngs-sdk/win/{ => vs2013}/ngs-test.vcxproj          |   36 +-
 ngs-sdk/win/{ => vs2013}/ngs-test.vcxproj.filters  |   34 +-
 131 files changed, 6527 insertions(+), 2506 deletions(-)

diff --git a/.gitignore b/.gitignore
index 999e61d..917c802 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,12 @@
 \#*
 .\#*
 ._*
+
+*.suo
+OUTDIR
+*.ipch
+
+/.cproject
+/.project
+/.pydevproject
+.idea/
diff --git a/Makefile b/CHANGES
similarity index 52%
copy from Makefile
copy to CHANGES
index 222ca76..72dafdf 100644
--- a/Makefile
+++ b/CHANGES
@@ -22,43 +22,21 @@
 #
 # ===========================================================================
 
-# default response to "make"
-default: subdirs
 
-# the sub-directories
-SUBDIRS =    \
-	ngs-sdk \
-	ngs-java \
-	ngs-python \
-	ngs-bam
-
-SUBDIRS_CLN = \
-	$(addsuffix _cln,$(SUBDIRS))
-
-SUBDIRS_INST = \
-	$(addsuffix _inst,$(SUBDIRS))
-
-SUBDIRS_TST = \
-	$(addsuffix _test,$(SUBDIRS))
-
-subdirs: $(SUBDIRS)
-
-clean: $(SUBDIRS_CLN)
-
-test: $(SUBDIRS_TST)
-
-install: $(SUBDIRS_INST)
-
-$(SUBDIRS):
-	@ $(MAKE) -C $@
-
-$(SUBDIRS_CLN):
-	@ $(MAKE) -C $(subst _cln,,$@) clean
-
-$(SUBDIRS_INST):
-	@ $(MAKE) -s --no-print-directory -C $(subst _inst,,$@) install
-
-$(SUBDIRS_TST):
-	@ $(MAKE) -C $(subst _test,,$@) test
-
-.PHONY: $(SUBDIRS) $(SUBDIRS_CLN) $(SUBDIRS_INST)
+The NCBI NGS Software Development Kit
+Contact: sra-tools at ncbi.nlm.nih.gov
+
+NCBI External Developer Release: NGS SDK 1.2.4
+May 25, 2016
+
+  build: MSVS 2013 toolset (12.0) is now supported across all repositories
+  doc, ngs: updated javadoc to include throws and other missing tags
+  examples, ngs: added DumpReferenceFASTA.py example
+  htsjdk: added code to HTS-JDK  to avoid involving NGS unless we are sure that it is being requested
+  ngs, ngs-engine: Added filtering to NGS of secondary alignments that do not have primary alignments
+  ngs, test: ngs-python: fixed bug in String processing for Python 3.*
+  ngs-engine: ncbi-ngs engine was updated: fixed a bug that made NGS read iterator return 0 reads on WGS accessions.
+  ngs: Improved native library load in ngs-java, enhanced its error reporting and added a mode to disable auto-download of native libraries
+  ngs: Python code will check for the latest version of the libraries and update if newer ones are available
+  ngs: check for the latest version of the libraries and update if newer ones are available
+  ngs: simplified ngs-python bindings
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..e33438f
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,16 @@
+# NCBI External Developer Release:
+
+## NGS SDK 1.2.4
+**May 25, 2016**
+
+  **build**: MSVS 2013 toolset (12.0) is now supported across all repositories
+  **doc, ngs**: updated javadoc to include throws and other missing tags
+  **examples, ngs**: added DumpReferenceFASTA.py example
+  **htsjdk**: added code to HTS-JDK  to avoid involving NGS unless we are sure that it is being requested
+  **ngs, ngs-engine**: Added filtering to NGS of secondary alignments that do not have primary alignments
+  **ngs, test**: ngs-python: fixed bug in String processing for Python 3.*
+  **ngs-engine**: ncbi-ngs engine was updated: fixed a bug that made NGS read iterator return 0 reads on WGS accessions.
+  **ngs**: Improved native library load in ngs-java, enhanced its error reporting and added a mode to disable auto-download of native libraries
+  **ngs**: Python code will check for the latest version of the libraries and update if newer ones are available
+  **ngs**: check for the latest version of the libraries and update if newer ones are available
+  **ngs**: simplified ngs-python bindings
diff --git a/Makefile b/Makefile
index 222ca76..7321ef4 100644
--- a/Makefile
+++ b/Makefile
@@ -30,7 +30,6 @@ SUBDIRS =    \
 	ngs-sdk \
 	ngs-java \
 	ngs-python \
-	ngs-bam
 
 SUBDIRS_CLN = \
 	$(addsuffix _cln,$(SUBDIRS))
diff --git a/configure b/configure
index 727531b..125e578 100755
--- a/configure
+++ b/configure
@@ -41,7 +41,7 @@ if [ "$FILENAME" != configure -a ! -s configure ]
     echo configure: error: configure should be run as ./configure
 else
     cd $CURDIR
-    for D in ngs-sdk ngs-java ngs-python ngs-bam
+    for D in ngs-sdk ngs-java ngs-python
     do
       if [ -d $D ]
           then echo "CONFIGURING $D"
diff --git a/ngs-bam/setup/install.perl b/ngs-bam/setup/install.perl
index fa2bae6..4ca5c20 100644
--- a/ngs-bam/setup/install.perl
+++ b/ngs-bam/setup/install.perl
@@ -7,7 +7,10 @@ require 'install.prl';
 use Config;
 use Cwd        "abs_path";
 use File::Copy "copy";
-use File::Copy::Recursive qw(dircopy);
+
+#use File::Copy::Recursive qw(dircopy);
+#WILL FAIL IN FUNCTION TRYING TO USE dircopy - THEY ARE NOT CALLED IN ngs-bam
+
 use File::Path   "make_path";
 use FindBin    qw($Bin);
 use Getopt::Long "GetOptions";
diff --git a/ngs-bam/setup/package.prl b/ngs-bam/setup/package.prl
index 7c01c26..30b6f30 100644
--- a/ngs-bam/setup/package.prl
+++ b/ngs-bam/setup/package.prl
@@ -1,6 +1,6 @@
 ################################################################################
 sub PACKAGE      { 'ngs-bam' }
-sub VERSION      { '1.2.3' }
+sub VERSION      { '1.2.4' }
 sub PACKAGE_TYPE { 'L' }
 sub PACKAGE_NAME { 'NGS-BAM' }
 sub PACKAGE_NAMW { 'NGS_BAM' }
diff --git a/ngs-java/Makefile.java b/ngs-java/Makefile.java
index 0e0e89d..4c7e25d 100644
--- a/ngs-java/Makefile.java
+++ b/ngs-java/Makefile.java
@@ -190,14 +190,29 @@ $(CLSDIR)/ngs-java-itf: $(CLSDIR)/ngs-java-api $(ITF_SRC_PATH)
 
 # NCBI engine bindings
 NCBI_SRC =                 \
+	DownloadManager        \
 	FileCreator            \
-	Logger                 \
 	HttpManager            \
+	LibDependencies        \
 	LibManager             \
 	LibPathIterator        \
+	LibVersionChecker      \
+	LMProperties           \
+	Logger                 \
 	Manager                \
 	NGS                    \
 	Version                \
+	error/LibraryLoadError     \
+	error/LibraryNotFoundError \
+	error/LibraryIncompatibleVersionError   \
+	error/cause/ConnectionProblemCause      \
+	error/cause/DownloadDisabledCause       \
+	error/cause/InvalidLibraryCause         \
+	error/cause/JvmErrorCause               \
+	error/cause/LibraryLoadCause            \
+	error/cause/OutdatedJarCause            \
+	error/cause/PrereleaseReqLibCause       \
+	error/cause/UnsupportedArchCause        \
 
 NCBI_SRC_PATH = \
 	$(addprefix $(SRCDIR)/gov/nih/nlm/ncbi/ngs/,$(addsuffix .java,$(NCBI_SRC)))
diff --git a/ngs-java/build.xml b/ngs-java/build.xml
index e9310f3..6d5dc34 100644
--- a/ngs-java/build.xml
+++ b/ngs-java/build.xml
@@ -1,13 +1,20 @@
 <project>
 
     <!-- This file is currently for use on Windows; Linux/Mac builds are run via gmake -->
-    <property environment="env"/>
-    <property name="vdb.build"   value="Debug" />
-    <property name="vdb.platform"   value="x64" />
-    <property name="vdb.dir"   value="${env.USERPROFILE}\win\cl\${vdb.platform}\${vdb.build}\bin" />
-    <property name="build.dir" value="${env.USERPROFILE}\ncbi-outdir\ngs-java" />
+    <property name="Platform"       value="x64" />
+    <property name="Configuration"  value="Debug" />
+    <property name="Output"         value="${basedir}\..\..\OUTDIR" />
+    <property name="MSVS"           value="2013" />
     
-    <property name="classes.dir" value="${build.dir}\cls" />
+    <condition property="PlatformToolset" value="v100" else="v120">
+        <equals arg1="${MSVS}" arg2="2010"/>
+    </condition>    
+    <property name="vdb.dir"        value="${Output}\ncbi-vdb\win\${PlatformToolset}\${Platform}\${Configuration}\bin" />
+    <property name="ngs.dir"        value="${Output}\ngs-sdk\win\${PlatformToolset}\${Platform}\${Configuration}\bin" />
+
+    <property name="build.dir"      value="${Output}\ngs-java" />
+    
+    <property name="classes.dir"    value="${build.dir}\cls" />
 
     <target name="clean">
         <delete dir="${build.dir}"/>
@@ -43,6 +50,9 @@
         <jar destfile="${build.dir}\jar\ngs-examples.jar" basedir="${classes.dir}" includes="examples\**" />
     </target>
     
+    <condition property="JVMbits" value="64" else="32">
+        <equals arg1="${Platform}" arg2="x64"/>
+    </condition>    
     
     <macrodef name="run-example">
         <attribute name="class" />
@@ -53,11 +63,13 @@
                     <pathelement location="${build.dir}\jar\ngs-examples.jar" />
                     <pathelement location="${build.dir}\jar\ngs-java.jar" />
                 </classpath>
-                <sysproperty key="java.library.path" path="${vdb.dir}" />
+                <sysproperty key="java.library.path" path="${vdb.dir};${ngs.dir}" />
                 <sysproperty key="vdb.System.loadLibrary" value="1" />
                 <sysproperty key="vdb.log" value="FINEST" />
+                <jvmarg value="-d${JVMbits}" />
                 <args />
             </java>
+            <!-- TODO: use fc to diff output against expected -->
         </sequential>
     </macrodef>
     
@@ -104,4 +116,6 @@
         </run-example>
     </target>
 
-</project>
\ No newline at end of file
+    <target name="build" depends="jar"/>
+    
+</project>
diff --git a/ngs-java/examples/Makefile b/ngs-java/examples/Makefile
index a4f916e..b56b848 100644
--- a/ngs-java/examples/Makefile
+++ b/ngs-java/examples/Makefile
@@ -25,6 +25,8 @@
 
 default: std
 
+#DEBUGGING = -d
+
 TARGETS =             \
 	NGS-JavaTest.jar
 
@@ -36,18 +38,19 @@ clean:
 .PHONY: default std $(TARGETS)
 
 NGS_EXAMPLES = \
-	PileupTest \
-	AlignTest \
 	AlignSliceTest \
+	AlignTest \
+	DumpReferenceFASTA \
 	FragTest \
-	RefTest \
+	PileupTest \
 	ReadGroupTest \
+	RefTest \
 
 NGS_EXAMPLES_PATH = \
 	$(addprefix examples/,$(addsuffix .java,$(NGS_EXAMPLES)))
 
 NGS-JavaTest.jar: $(NGS_EXAMPLES_PATH)
-	javac $^ -d . 
+	javac $(DEBUGGING) $^ -d . 
 	( jar cf $@ `find examples -name "*.class"`; chmod -x,o-w $@ ) || ( rm -f $@ && false )
 
 # ===========================================================================
@@ -70,6 +73,9 @@ run_frag: NGS-JavaTest.jar
 run_align: NGS-JavaTest.jar
 	java $(JAVAFLAGS) examples.AlignTest ERR225922 10000 2 $(REDIRECT)
 
+run_dump: NGS-JavaTest.jar
+	java $(JAVAFLAGS) examples.DumpReferenceFASTA SRR520124 1 $(REDIRECT)
+
 run_align_slice: NGS-JavaTest.jar
 	java $(JAVAFLAGS) examples.AlignSliceTest SRR1121656 1 1 9999 $(REDIRECT)
 
@@ -82,7 +88,8 @@ run_ref: NGS-JavaTest.jar
 run_read_group: NGS-JavaTest.jar
 	java $(JAVAFLAGS) examples.ReadGroupTest SRR1121656 $(REDIRECT)
     
-ALL_TESTS = run_frag run_align run_align_slice run_pileup run_ref run_read_group
+ALL_TESTS = run_frag run_align run_align_slice \
+	run_pileup run_ref run_read_group run_dump
 
 run_all: $(ALL_TESTS)
 
diff --git a/ngs-java/examples/examples/DumpReferenceFASTA.java b/ngs-java/examples/examples/DumpReferenceFASTA.java
new file mode 100644
index 0000000..d892b56
--- /dev/null
+++ b/ngs-java/examples/examples/DumpReferenceFASTA.java
@@ -0,0 +1,132 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+package examples;
+
+
+import ngs.ErrorMsg;
+import ngs.ReadCollection;
+import ngs.Reference;
+import ngs.ReferenceIterator;
+
+
+public class DumpReferenceFASTA
+{
+    private static void process ( Reference ref )
+        throws ErrorMsg
+    {
+        long len = ref . getLength ();
+
+        int line = 0;
+
+        System.out.println ( ">" + ref . getCanonicalName () );
+        try
+        {
+            for ( long offset = 0; offset < len; offset += 5000 )
+            {
+                String chunk = ref . getReferenceChunk ( offset, 5000 );
+                int chunk_len = chunk . length ();
+                for ( int chunk_idx = 0; chunk_idx < chunk_len; )
+                {
+                    int endIndex = chunk_idx + 70 - line;
+                    if ( endIndex > chunk_len )
+                        endIndex = chunk_len;
+                    String chunk_line
+                        = chunk . substring ( chunk_idx, endIndex );
+                    line += chunk_line . length ();
+                    chunk_idx += chunk_line . length ();
+
+                    System.out.print ( chunk_line );
+                    if ( line >= 70 )
+                    {
+                        System.out.println ();
+                        line = 0;
+                    }
+                }
+            }
+        }
+        catch ( ErrorMsg x )
+        {
+        }
+    }
+
+
+    private static void run ( ReadCollection run, String reference )
+        throws ErrorMsg
+    {
+        Reference ref = run . getReference ( reference );
+        process ( ref );
+    }
+
+
+    private static void run ( ReadCollection run )
+        throws ErrorMsg
+    {
+        ReferenceIterator refs = run . getReferences ();
+        while ( refs . nextReference () )
+        {
+            process ( refs );
+            System.out.println();
+        }
+    }
+
+    public static void main ( String [] args )
+    {
+        boolean failure = true;
+
+        if ( args.length < 1 || args.length > 2 )
+        {
+            System.out.print
+                ( "Usage: DumpReferenceFASTA accession [ reference ]\n" );
+        }
+        else try
+        {
+            String acc = args[0];
+            // open requested accession using SRA implementation of the API
+            ReadCollection run
+                = gov.nih.nlm.ncbi.ngs.NGS.openReadCollection ( acc );
+            if ( args.length == 2 )
+                run ( run, args[1] );
+            else
+                run ( run );
+            failure = false;
+        }
+        catch ( ErrorMsg x )
+        {
+            System.err.println ( x.toString () );
+            x.printStackTrace ();
+        }
+        catch ( Exception x )
+        {
+            System.err.println ( x.toString () );
+            x.printStackTrace ();
+        }
+
+        if ( failure)
+            System.exit ( 10 );
+    }
+}
diff --git a/ngs-java/examples/expected.txt b/ngs-java/examples/expected.txt
index a96757b..92a9151 100644
--- a/ngs-java/examples/expected.txt
+++ b/ngs-java/examples/expected.txt
@@ -113,3 +113,534 @@ Statistics for group <NA12891.unmapped.ILLUMINA.bwa.CEU.high_coverage.20120522>
 	SPOT_COUNT: 37468817
 	SPOT_MAX: 1211849353
 	SPOT_MIN: 1098855607
+>1
+AGGGGCCTGCCCGACGGGCGGGCCTTTCGGGGCGCAGGACGGCTGTCCGGGGTCTCCCCGGCCGCCTGCC
+TTGGGAGAGCTGCCGGATCCCCTTTTTTCCAGTCCCCTTACGGAGGTTTCCTCATGTGCCCCGCTTCGCG
+CCGTTCCCGGCCTGCCATCGACATGACCCTGATCGAGCGCCTGGACACGCTGGCCGGCGCCGCCATCGCG
+CGGCTGCCCGATGTGGCCTATCCGCTGATCACCAAGCTGACATCCGCCCGCCTGCTGGCCCCCGCCCGCC
+TGCCGTCCGACGTCGTCACCATCGGCAGCGAGGTGCTCTATCACGACGATCAGGGCGCGCGGGACCGGCG
+CGTGACCCTGTCCTGGCCCGAAGATGCCGACATCAGCCGCCGATCCGTGTCGATCCTGACCCCGGTGGGC
+GTGGCGCTGCTGGGCCTGTCGGCGGGCGACCGGTTCCAGTGGCAGACGCGGGCCGGAGAGCGGCGCAGCC
+TCACCGTGCTGCAGGTCGGGTCGGAGCCGCGGCCCGGGACGACCCCGGCCGCGCCGCGGCCCGGGCTGTC
+CTGAGCGCCGGGACGGGAGCCTACCATGTCGCATCGGAAGATCCCCCGCTACTGTGCCGGATGCGGCGCG
+GCCATTCCCCGGGCCGCCGCCGGACGCTGTCCCTTCTGCCGGGTCGAGTTCGCCCCGGCCGGGGGCGGCG
+CCCGGCCCCCCTCGCCGGGGGGGGCCGGCGATCCCTATCGGCCGCCCTGCCGGACGCGGCGGGGCCGCGC
+CGCCTCTGCCCGCGGGGCGGCCATGATCCGGCTGCGCCCGCTGATCGCGCCCGCGCTGCTGTTGCTCGGC
+ATCGCCGGCATCACCTTCGCGCAGGCCGAGGCGGGCCGGCGCTTCGGCATCGCGCCGCTCGGCCGGAATG
+GCCGGAACGCCCTGCAGATGGCGGCCTATCTCGGCCTCGCCTGGCTTCTCAGCCGGACCTTCGGCCAGCT
+GCTGGCCCGCCTGCGGCCGCAGAGCCGCCCGCTGCCGAAGCTGCTCGGCGATCTGGTCTCGGCCCTTCTG
+TTCCTGACGGCGATCGTCTCGGGGATCCTGCTCATCCTAGGCCACGGTGCCGGCAGCGCGCTGGCGGGGT
+CGGGGGTGGTGCTGGCCCTGTTCGGCTTCGCGATCCGCAATGTGGTGGCCGATACGCTCTCGGGGATCGC
+CTTGGGCCTCGAGGCGCCGTTCCGCATCGGCGACTGGGTCGATATCGAGGGGCTGGGCCGCGGCCGGGTG
+GTCGAGATCGGCTGGCGCACCACGCGGCTTCTGACGCGCGACTCGACCTATGTGATCCTGCCCAACAGCC
+AGGTCTCGCGGCAACGCATCGTCAACTACAGCGCGCCCCGGTCCGAGTTCCGGGCGCAGATGGAGATCAA
+GCTGGGACATGCCACCCCGGCAGCCGAAGGGGCGGACCTCCTGCATAAGGCGCTGCGGGAGGCGCCGCTG
+ATCCGCCAGTCGCCCGCGCCCGACGTGCGCATCCAGGCCATCGAGCCCGATGGGGTGCGGTATGCGCTGC
+GCTACTGGCTGGGCCGGTTCGATCACGAATGGGAGTGCCGCGATGCGATCTGGCGCGAGGTGGATGCGGC
+ACTCCGCCGGGCCGGGATCCCGCTGGCGCAGCCCCCCGTCGCCCTGCTCTGCGCCCGTGAGGGAGGCGCG
+ACACCGGGGGCAGGGATGCCGGCCGGCGTCCCCGTCGCCCTGCGCTGACGCCCGGGCAGACGGGCCCGTC
+GGGGGGCGGCGGCAAGACATGCGACCGGACCTCCTTGGCTCCTGCCTCCTCGAGCGCGGCCTGCACCGCC
+TCGAGCGTCTACAGGACCCGCGCGTGCCGGTCGCCCCGGGCACCGATCCAGGTGGCCCCGCGCGAGGTCT
+CGCGCCGGACGGCTTGGCATGGGCCCGCACATCGGCTAGGTCCGTCCCACTCGTCAGGACCCGGGTGCGA
+TCCCCGGGTGGCTCCTCCGGCCGCCGATCCGCCGGACAACCCACCAGCACCAGCAGGAACATCCGCCGGC
+GCGCAGGTCCGGGCCGGCGGGGAACGGGACATTCATGATTTCATTCGCCACCTATCGCCAGCAATGGCTG
+GGCCATGTGCGGGGCGACCTGCTCTCGGGGCTCGTCGTGGCGCTGGCCCTCATTCCCGAGGCCATCGCCT
+TCTCGATCATCGCGGGCGTCGATCCGAAGGTCGGGCTCTATGCCTCCTTCTCGATCGCCGTCGTCACCGC
+CATCGCGGGCGGACGGCCCGGGATGATCTCGGCCGCCACCGCGGCGACCGCCGTGCTGATGGTGACCCTC
+GTGCGCGACCACGGGCTCCAGTATCTGCTGGCCGCCACCGTGCTTGCGGGGCTGATCCAGATCGCGCTCG
+GGCTCCTGAAGCTCGGCTTCGTCATGCGCTATGTCTCGCGCTCGGTGATGACGGGCTTCGTCAATGCGCT
+GGCGATCCTGATCTTCCTTGCGCAATTGCCCGAGCTCGACCCGCGGGCCGTGCCGCCGCTGACCTATCTC
+CTCGTGGCGGCAGGCCTGGCCATCATCTATCTCTTCCCGCGCCTCACCCGCGCCGTGCCCTCGCCGCTCG
+TCACCATCATCGTGCTGACGGCGCTGACGCTCGGCCTCGGGCTCGACGTGCGGACGGTGGGCGACATGGG
+CGCGCTGCCCGACACGCTGCCCGTCTTCCTGATCCCGGACATTCCCCTGACCTTCGAGACGCTGCGGATC
+ATCCTGCCCCCGGCCACAGCCGTGGCGGTGGTGGGGCTTCTGGAAAGCCTGATGACGCAGACCCTCGTCG
+ACGAGCTGACCGACACCCGCTCGAGCCGCAATCAGGAATGTATCGGGCAGGGGCTGGCCAACGCCGCCAC
+CGGCTTCATCGGCGGCATGGCGGGCTGCGCCATGATCGGCCAGTCGATGATCAACGTGAAGTCGGGCGGG
+CGCGGGCGGCTGTCCTGCTTCGTGGCGGGCGTGTTCCTGCTGATCCTCGTCGTGGGGCTCGGCGATGTCG
+TCAGCCGGATCCCGATGGCCGCGCTCGTCGCCATCATGATCATGGTCTCGATCGGCACCTTCTCCTGGTC
+GTCCCTCAAGGCGCTGCGCACCCATCCCCGGTCCTCCTCCGTGGTGATGCTGGCGACGGTGGCGACCGTG
+GTCTGGACCCACAATCTGGCCTTGGGCGTCCTCGTGGGCGTGCTGCTCTCGGGGATCTTCTTCGCCGCCA
+AGATTGCGCAGCTCTTCGCGGTCAGCTCCGAACTCTCGGCCTGCGGGCGCGCGCGGACCTACCGGGTCGA
+GGGCCAGCTCTTCTACGGCTCGGTCGAGGATTTCATGGCCGCCTTCGACTTCCGCGAGCCGCTCGAGCGC
+GTCACCATCGACGTGAGCCGCGCCCATATCTGGGACATCTCTTCGGTGCAGGCGCTGGACATGGCGGTGC
+TGAAGTTCCGCCGCGAGGGGGCCGAGGTGCGGATCGTGGGCATGAACGAGGCCTCCGAGACTCTCGTCGA
+CCGGCTGGCCCTGCACGACAGGCCGGGGGCCCTGGACCGGCTCACGGCCCATTGAGAGGGAGGACGACAT
+GACCGACAGGATCATGGCACTGGTGGACGGCTCGGGCTTCTCGCGCAGCGTCTGCCTTCATGCGGCCTGG
+CTCGCGCAGAGGCTGGAGCTTCCGGTGGACCTGCTGCATGTGCTGGGCCGCCGCGAGGCCGCCGATCGGG
+GCGATCTGTCGGGCGCGCTGCAGCTCGGCGCCCGCACCGCCCTGCTCGAGGAACTGGCCGCGCTCGATGC
+CGAGCGGGCGCGGCTCGCGCAGGCGCAGGGGCGGGCGATCCTCGAGGATGCGCAGGCGATCCTGGCCGCC
+GAGAGCGTGGAGACCACGCCCCATCTGCGGCAGGGAGACCTGATCGACACGGTGGCCGGGTTCGAGCGCT
+CGGGGCGGGCGCTGGTGGTTGGCAAGCGCGGCAGGGCCGCGGGCTTCGCCAGCGCCCATCTCGGCTCCAA
+TCTCGAGCGCCTCCTGCGCGCCTCGAAGCTGCCGGTCCTCATCGTGCCCGCGGACTGCCGGCCGGTGCGC
+AAGGTGCTGGTGGCCCATGACGGCGGCAGAAGCGCCCGCGGGGCGATCGAGCGGATGGCGGCAAGCCCGG
+TCTTCCGCGGCCTTGCGATCACGCTGGCCTGCGCGGGCGGCGAGGAGGCCCGCGCGACGCTCGAGCGCGC
+CCGCGGCACGCTGCTGGCCGCGGGGCTGGCGGCCGAGACCTGCCTCCTGTCCGGCGCGCCCGAGGTGGCG
+CTCGAGCGGAAGATCGAGGCCGAGGGCTTCGACCTTCTGGTGATGGGCGCCTATGGCCACAGCCGCATCC
+GCACCCTGATCATCGGCTCGACCACCACCGCCCTGATCCGCGCCTGCACGGTCCCGATGCTCGTCTACCG
+CTGACCGGGGCGCGACAGGGCGGCCTGCCGTTTCTCGGCGGGCCGCCGGTCAGGCGCTCCCGGCCTTTCA
+AGCCATCGACCCGAAGAGGCTCCTATCCCGGAAAGAGGCGGGCCCGCCGGCCTACCCGGCCATCAGTCTG
+GACAGGCTCGGCCACTGGAACACCAGCACGCCGCCCATCACCGTCGCGGCCCCCAGCACCCGCCACAGAT
+CCAGTGGCTTCCCCGCCAGCCCCATCAGTCCGAACCTGTCGATCAGGAGCGAGGTGAGGAGCTGCCCCGC
+GACAACCGCGATCATGAAGCCCGCGGCACCCATCGTCGGCATCAGGAGGATCGCGCCGGTGACGTAGACT
+ATCCCCACCAGCCCGCCGATCCAGATCCAGGATGGCTGCGCCAGGGCCATGCCCAGATCCGGCACGGGCA
+CCCGCATGGCCAGCAGCACCGGCAGGATGCAGATCAGGCTGACCAGCAATGAGGCAACCGCAGCCCAGAG
+GGGATGCCCCAGCGCACGGCCGAGCGCGGCATTGGCGCCGCCCTGAAGCGGCACGAGCGCACCCGAGACG
+AGCGCGAGGCAGGACAGGACAAGCAGGGGCATTCCGATCTCCTTTTCTCTGCCGCCGGTATAGGCCCCGC
+ATCGGATGAATTTGAAATTCGACCTTGCTTCCCTATCATGCAGCATATGAATAATCTTCGTGCGGTCGAT
+CTGAACCTTCTTGTCGTGCTGGATGCCCTTCTGGCGGAGCGCCATCTGTCGCGGGCGGCGGCTCGGCTGA
+ACATGAGCCAGCCTGCGGTCAGCCATGCGCTCGCCCGGCTGCGGCATCTGCTGGGCGATCCGCTGTTCCG
+GCGCGAGGGCGGTCGGATGGTGCCCACGCTGCGCGCGCAGGCGCTGGCCCCGCCGCTGGCCGAGGCTCTT
+GCGCAGATCCGCAGCGTGCTCGGGCCCGATGCGTTTGACCCGGCCGCGCCGCATGTGTTTCGCCTGACCA
+TGTCGGATTACGGCGCGGGGCTGGTGTTGCCGGGCCTGATGCGGCAGCTGCGCCGGATCGCACCGGAGAT
+CCGGCTGGTGGTCACCCAGAAGAGCCGGGAGGCGATGATCGAGGCCGTGAGCGAAGGCGAGGCCGATCTT
+GCGCTCGGCGTCTTTCCCGGGCTGCCGCCGCAGCTCGAGGCGGAGCTCTTGCTGACCGACCGCTATATAT
+GCCTGCTGGACCCGGCCCATCAGCCCGTCCGGTCCGGCGGCCTGACTGCGGAAGCCTTCTGGTCGGCTCC
+GCATGCCCATGTGGCGGTGCAGGGTGACTTCACCACGGAAATCGATCTGCATCTGAAGGATCGGGGCGGT
+CCCCGGCGCCTTGCGCTGATCCTGCCGCACTGGAGCATCGCACCCAAGGTCATCGCCGGCACGGATCTGA
+TCCTGACCGTTGCCAGCCGTGCCGTGCCCGCAGCGCCGGAGCCGCTGATTGTCACGGCGCCCCCCGTTCC
+GTTGCCTCCGATCCCGTTCAGCGCGATCCACGCCAGACGCCGCAAGGCCGATCCGGCGCTCAGATGGCTG
+ATCGCCCGGCTGCGGGAGGTCGTTGGCGAAGAGGCGGGAACCGCCGTGGCATGAGCCGCGAAGAAGGCCC
+CGAACTCACGCCGAAGACGAGCTCGGCCGCGATCAGCGTCCGCCAGGCGAAGGCCCAGCCGATCTTGAGG
+CCGGTCAGGATGCTCGGGAAGGCCGCCGGGATCAGGATCTTGGTGATGAAGCCCCAGCCCTTCAGCCCGT
+AGTTATGTCGTCCTGCCGCCCCCGCGCCACGAGGGCCGGATAAGCGCGGGCTCGCCCTTCGCGCAGCTCC
+AGAAGGCGGGAATGCCGACTGCCATCATGGCCGACATTCAGCGCCAGAGAAACGAGGATGCCCGGGAAGC
+CGTGCTCCATGCCATCCGCGGCGAGGTGGCGCGGGCGTGGCTCGGATTGCACAGCTCCGTGCGCGAGCGG
+ACCGGGATTGTGGTTCTGACCAACCGCGTCCGGGGGAAGTGAATGCCGCGATCCGCGACGAGCTGAAGGG
+GGAACATCGGCTCGGCGCTCAGGATGTAACGGTCGCCAGTCTCACGCCGCTCTCGCTCACCCGCGCCGAA
+GCGCGCGAGGCGGCCAGCTACAAGGCTGGTGATGTGGTGATCTCGGTGCGCAGCGTAGAGGGGTTGGAGC
+GGGACAAACTCTACCGGGTTACATCCACCCTGGTCAACCTCGTCTCAAGGAGAGCTGCAGCCCGATCAGC
+AAGGCCTGCACTCTCTGTTCGCCCGCGCGAGGACAGTCAACTGAGCGGGCGGAGATTGGGCGTCCTATCG
+GACCATGCACGGCTGCGACATAACCGGCTCGGCGAGAAGGGCGGGGCGCCCGCGGCGCCGGGACGAGAGG
+GTATCATGGCTCCGGTCACCTCCGCTTGCGGACGGAACTAGAGCCGTGGACCGGCAACGCCGGGGTCACG
+CCCAGATCCCTCGAGGCCAATACCGCGCGGGTTCTCTCCGGGCAATCCGGCGAGGTAAGCCGCGACCTGC
+GACCGCGACCGCGATATATCGGCGAGCCTGCGATCGAGCTTTGCCAGTTCATCCGTGAGGCGGGCGCGCA
+GCCGCTCGCAAGGATGGAACGTCGGCTCGGGGCTGATGATGCAGGGCAGCAGGTCGCGCATTGCCTCGAC
+CGTGAGCCCGGCCTCGGCCAGCTGTCGGATCATGCAAGCCTGCTCCAGATCGGCCGGGCCATAGTCGCGG
+TAGCCGCTTCCCGTCCGATGCGGACGCAGAAGCCCTTCCGCCTCGTAGAAGCGTAGCATTCGGACGCTGA
+TGCCACTGCGGTCGGATACATCGCCGATCTTCACCACGCTCTCCTTCTTGGGACTTGACCCTGACAACGG
+TGTCAGAGTGCAAAAGGAGTGCCGACACATCAAGTCGGAGAAGAAGCAATGTCGAAGATCGAACATGTCC
+ATCACAAGGGCGCGCGTGTGGGCTATCGTGACGACGGGGAAGGCAAGCCGCTCATCCTCGTCCACGGGAC
+CGGGGGAGACGGCGAGGCCAACTTTGATGGCCTTCTGCCGCATCTGTCGCGGCGGCGCGTGCTGCGGCCA
+GACTATGCCGGATCCGGACTCACAGTGGATGCCGCCGAAGTGCTGACGGTCGATCATCTGGTGCATCAGG
+TCATCGCCACCGTGGACCATGCGGGGATCGACAGTTTCGATCTGGCAGGCTTTTCTCTCGGCTCTGCCGT
+CGCGGTCCGGCTCGCCGCCCTGCATCCCGGGAGGGTCGACAGGCTCGTGCTGATTGGAGGGTTCATTCAC
+GCGGCCGACCCGCGCTCACGTCTGCAGTTCAAGCTCTGGGCGGACCTCGCCCGGAAAGATCCTGCCACCC
+TTGCGCGGCTCATGATGCTGACCGGTTTCAGCTACGCCTTCCTGTCGGCGATCACCGACTTGGATTCGGT
+GATCGCCGGCATGGTATCGGGCGGCAACTGGGAGGGAGTTGCGCGACAGGCGGAGCTGGATCTGCGAGTT
+GATGTCTCTCGTGAGCTCGGCCGTGTCAAAGCTCCAACCCTCGTGATCGGCAACCGGTGCGATCAGATGG
+TGGATCCGGCGGCTTCGATCGCGCTCGCTGCGGGCATAGCGGATGCCACCCTCGCTTGGCTTGAGGGGCC
+GCATCTTGCGTTGATGGAACGACCGGACGTCGCGGCGGACCTTTTGATGCGTCATCTGGCTGACTGAGCT
+CACCGCCTCGAGGGGCGCTGCAGCCCGATGGGCGAGGGCCGCGCTCTCAGCTCACGCGCGGGAGGATCGT
+CACCCGAAAGCCCGACACATCGGCCGACCTCCGATAGCGGGGTGCGGGCGTTTTCCTGAAGCGCTTCGAG
+GATTGCGCTGTCAAGGCGGTCGAGCTCACTGGTCGGCATGTTCCACCACGGATTCCGTTAACTCATCGGA
+AGTGTGCCAAAAACGCCGATGAATTGCCATTCCCGGCATGCGTTCGGCAAGGGACACTCTAGAAAGGACA
+TCAGGAGATTAGCATGGGGCGTCGTTTCGTTATGGTGCCGGGCATCGGGGGATCCGGCCCTGAGCATTGG
+CAGAGCCATTGGGAAAGTCTCTATCCGAACACCCTCCGGATAGAGCCGAATTCCTGGGATGAGCCCGACC
+TTGCGGACTGGTTCGCCGCCCTGGACCGGGCGGTCGCCGCAGCACCTTATCCGCCGGTGCTGGTATGCCA
+TTCGCTCGGGTGCCTGCTCTTTGCCCACTGGCGTGCGGCGTCGTCCCGTGCCATCGCCGCGGCATTTCTT
+GTTGCCGTGCCGGACCCGAGCGGGCCGGCTTTCCCGGCGCAGGCAAAGGCATTCGGAGCGCTACCTGCAA
+CGGGGTTTGGTGAGCGGCCGGTGTTGGCCGTCGCAAGTGAGAACGATCCCTATGATCCGGAGGCGAGTGC
+GATAGCCTGGGCTGTCAGACAAGGCGCCTGGCCGCGTCGTCTCGGCCCAAGGGGCCATTTGAACGAGGCG
+TCGAACATCGGCGCCTGGCCCGAAGGCCAAGAGCTTCTGGCAGATTTCCTGGACAAGATCGGAGAGTAGC
+CATGGACGTTGCAACTGCATTGCTGAGCTTTTCCATTGCAGCGGCTTTGCTGACGATCACACCGGGGCTC
+GATACAGCCCTCGTTCTGCGGACGGCGGCGGTCGAGGGGCCGCGCCGGGCGATGCTGGCGGGGGCAGGGG
+TGGTGACCGGGGTGCTGGCATGGGGATTGATTGCGGCTTTGGGGCTCGGTGCTGTGCTGGCCGTGTCGGA
+ACTGGCTTACCGTTGTCTTCAGCTTGCCGGCGCGGCCTACCTGATCTGGCTGGGTATCGGGATGTTGCGG
+GGAGCGTTGCGTGCGCGAGAGCCGGGCCTGCCCAAGGTCATGGCGCCTTCCGCACCAAATTGGTTCCTGC
+GCGGGGTAATGACCAACCTTCTTAACCCCAAGGTCGGTGTCTTCTATATCAGCTTCCTGCCGCAGTTTCT
+GCCCGTGGGCGTTTCGGTGGTGCCGTTCAGCGTCCTGCTCGCGGGGATACACGCGTCGATGGGGCTGATC
+TTTTTTGCAGCGCTGACTGCCGCGACAGTGCCGTTTCAGAATGCCCTGAACGGCCCTCGCCTGCCTCGGC
+TCCTCGACGGGGTCACCGGCAGTGTCTTGATCGGGTTCGCCCTGCGACTGCTGACGGAGCGGCGCGTGGG
+ATGACCTCAGCTCTCGATCCGACGCTGCAACTGACCGGGCGTGATCCCATGGGCGGCCTGAAAGGCGGCC
+ACGAAGCCGCTCGCTGTGGCGTAGCCGGCAGCATGGGCTGCATGTTGCACGCTCTTGCCGGCCATCAACG
+GGGCAATTGCGCGTGCCAACCGCAGGTCTCGCATCCAGGTGGTCCAGCTCTGCCCGGTGTCGCGACGGGC
+GAGCCGTTGCAGGCTGCGCCGCGACAGCGCCAGTGCCGCGGCCCAGTGGTCGAGCGAATGGTCGGCCCCA
+TCGAGATGTGCCAGAGCGATACGACGCAGGCGCGGGTCGGTTGGTAGCGGCAGCGTGGGCGCGGGGGCGG
+GGCGCGCAAGCCGGTCCCACAGCACGGCCGTCAGCCGGGCGAAGGCGGGCTCTTGCCGGTCGGCGCGGCT
+GGACCCTGCGAGAGTGCGGAGAAGTTCGGCCTCCAGCGCTTCGAGAGGGAAAGGTGTGGGGGCCTTGGGC
+AGTGGCGCCGCGGCGGGTCGGGTGTAGAGGCTGACCGATTTCCGCGCGCCCTCGGCCCGGATGCGGTGGC
+GGTGCGTCGGTGGAAGCCAGATCGCCATGCCGGGAGAGAGAAGATGCAGCCGGCCTCCTGTCTCGACCGT
+CACCGGCCGGTCCGGGCACCAGGCGAGCTGCCCGCGCCAGTGCGCATGCGCCTCGGGCATTGTGCCGGGT
+GTGAAGCTCGTGATCCTGCCGATCACCGGGCTTCCATCCTCGGCAAATCCTCCGATCTCATCGCGCTGCA
+TGCTGGCACCTCCGGGGTATCATCTGGCACCGGGGCAACACATTTTTCCAGCGCTTCCGTCACGATCGCG
+CGGAGGCGGAGCGGAGGACCGTATGGATATGGCGACAATCGCGCTGCTCGCGGGCGCAGGGCTGCTCGGC
+GGGCTGTGCAATGCGATCGCGGGCGGCGGCACGTTTTTTACCTTCCCGGCGCTGCTGGCCGTGGGGCTGC
+CGCCGGTGACGGCGGGCGCAACCAGCGCAGTGGCGATCTGGCCCGGCCATGCGGCCAGCCTGATCGGCGA
+AGGCGCGGTGCTGCGTCAGGACCTGATCGCGCGGCCCGGGCGCGTCACGGTGTTTGCGCTGGCCTCGGCG
+GCGGGGGCCGGGCTGTTGCTGCTGTCGGGAGATGCACTGTTCCGGCAGTTGGTCCCCTGGCTGCTGCTTT
+TCGCGACGCTGCTGTTTGCGGCAGGGCCCATGCTCAACCGCTGGCTTGCCCGCTGCGGGGTGTCGATCGG
+GCCAGTCAGCGCCGCGTGCGCCGAGGGGGGCGTGGCCCTTTATGGTGGCTACTTTGGGGCAGGGCTGGGG
+GTGCTGCTGCTGGCGCTGCTGACCGTGACGGGAGACGACGATCTGAAGCGGCTGAACGTGGTCAAGAATG
+CTCTGGCGACACTTGCGACCAGTATCGCCGTCCTGATCTTCGCCTTTGGCGGCGCGGTCGTCTGGGGGCC
+GGCTGCCCTGGTCTTCCTGGGGGCGACGGCAGGTGGTGTCATCGGTGGCCGGCTGGCGCGCCGGGTGAAC
+CCGCAAACCCTGCGCGCCGCGATCGTCTGCCTCGGCCTGTTGCTGGTCTGGCACTACGCGTGAGCCCGGG
+TCGAGGCGCGGAACGCCTCGCGCAGGGCCGTGGTAATCCGCCCCACGGGCCATGTGCTGTGCTTGCCGGG
+GCGGTCGAGCGACCACGGGACGAAGCTCGACCGACGTGCCCGTGACGAAGACCTCGTCCGCTGCATCCAG
+ATCGTCGAGGCTGACGGTTCCTTCATGAACCGACAGGCCGAGGCCACGCGCAAGGTCGAAGACATGGCGC
+TTGGTCAGGCTGTCGAGAAAGCATGTAGGAAGGGGAGACAGAAGCCTGCCATTCCGGACAAGGACGATGT
+TCGTCACCGTGGTTTCGGCGACATGGCCTGCCATATCCAGCATGAGGGCATCGTCATGTCCGCTACGGGC
+AGCTGCGGCCCGCGACAAGGTTCCGGTCATGTAGAGCCCCGAGCATTTCGACGCCGTCGGCGCCGTATCG
+GGCGCGGGGCGCCGCCAATCCGACAGAACCAGGCGCAATCCGCCGGTCCCGTCCCCAAGGGCGGTCTCCA
+CCGGCCAGTCCCAGGCCGCGATGGCGGTATGGATCCGGCACCCCTGTGCGGAAACGGTGACGCTTTCACT
+GCCGCGCCAGGCGATCGCCCGAACATAGGCGTCCTTCAGTCCGCCAGCCCAAAGCACGGCCTCGGCGGCG
+GCCTGAAGATCATCGACCAGCCATGGCAGCGTGTAGCCGAGAAGTTCGGTCGAGCGCTGCAGGCATCGGA
+AATGCTCCTTGCCCAGAAACAGACGACCGTCATAGGCGCGGATAATCGCGTTTCAGCGGCGTCGACGACA
+ATCCGCGTGCCCCCGTTACCTTATAAGCGGTGCCCAGCATATAGGGTCGCCAGAGCACGGTCCGACCCAT
+GTCTGCCGCGATGGCCTCGATCCGCTGCGCCGCGAAGAAGGCGTAGCCGGACGAGAAGCCGAACCAGAAC
+TCGAGGGAACTAATAGCTCTTCGCCGTCCCAGTAATCGACCGCATCCGCGTTTCGGAAGGAACTGGCAAC
+CCGGCGCTTTGCCTTGTCACCTCCGTGCGCAGCGCCCGCGAAGACTGTCAGCTTGCCGCTGTCGGGATGC
+CTGGCATGGGTTTCAAGGTCAGTTCGGGAAAGTCTTGCCATTCTTCGGGTCTCCTTCTCCGTCCGCGTTA
+GCGGTCGGGGCTGACTGTCATGCGGCAGCATGGCTGCTCGCAATTGAGGAATCTTCCGGAGGTCCTGAGG
+ATTTCGCGGCGACGAACACAGAGAGGAATTCTCAATATCCGCTGAGGGATCCGAAATTCATGGCTCTGGT
+CACGAGGCGCATTCTCTGGGGGAACACACCGGAGGTGACCATGAACCCGCGATGCACGGCAAATCCAGCG
+CAAGAGCACGACAAAGATAGTCTTGCATCAGGCCCGGCTCTGCCGCCGCGCCGCTTTCGGGCCTTTCACC
+GCTTGAGCGACAGGGAGTTGAAATATCTGGGATTGGATCGCCAAAATCTGCCGATCTTCAATCCTGTTCA
+GGCCATTCGCCGAGACGACCTGTTCTAGCGCGATGCGGGCAGGTCTGGCGTATCATGCAAGCAGATCAGT
+GTTTGCATCCCCGTGGCGACATGTTTGCGGCGTTCTCCATCAACGCCCCATACATCGAGCTGGCAGATGG
+TCAGTGTGCGACCATTCTTGATCACGCGGCCGACAGCCTCGGTAAAATCTCCTTGCGCCGGGCTGATCAG
+GTTCAGTTTGAACTCGACCGTCAGGACCGTACTGCCTTCGGGGAAGAGGAGGAAATGAGCGTAACCGCCT
+GCGCTGTCGGCGATGGCCGATGTTCCGGCGGCATGGAAGTAGCCATGCTGCTGCGTGAGTTCTTGGCGGA
+ACGGGAGACCTCGAGCCGCTACATGATGGTCGAAGCCTTTGTCCAGATCGACAAGGAGGAGATCGACCCC
+ATTCTAAGCATAGCCACGAAAGCCGCCTGATCATGCCCTCAGGCCATCCGGATAATCATACCAGCTTGAC
+GGACGTGCCCCCCCGTCATTGCCTAGGCCGTTCCCAGGGGGCTCCATCGCCTTTCTCCCTCGGCACCACC
+AGTGCGCGACCGGAGTCCGGGTGAGGCAGCTTCAGCATCGGCAGGTCGTAGATGCGCTGCAGGCGGACGG
+GCTGCATGATGTCGGCGACAGGGCCGCTGTCGAGGATCTTGCCGGCCCGCAGCGCCACGAGATCGTCGCA
+GAAGCGCCCGGCAAGGTTCACGTCGTGCAGCACCATCACCACAGTGAGCCCCTGCCGGCGGTTGAGCCCG
+CGAAGGAGCGACAACACCTCGATCTGATGCGCGGGATCGAGCGCGGAGGTGGGCTCGTCCAGGAGGAGGC
+AACCCGCCCCCTGCGCGAGGAGCATGGCGATCCGGGCCCGCTGCCGCTCGCCGCCCGAAAGGGTCTCCAC
+GGGGCTTTCGGCCTGGTCGGCGAGGCCTGCCTGGCGCAGGGCGTCCTGCTGGCGGGCGCGGTCCTCGGCG
+CCGAAGCGGCCGAAGGCGCCGTGCCAGGGAAAGCGGCCGAGCGCCACCAGCTCGGCGACCGTCAGGCCGG
+GGACGTGGGGCGGCGTCTGCGGCAGATGCGCCAGTTGCCGGGCAAAGTCGCTGGCGGCATAGGCGGCCAG
+AGGTCGACCGCGAAACAGGACTTGCCCGGCGGAGGGCGCGAGCTGCCGCGTCATCAGGCGCATGAGGGTC
+GATTTCCCCGAGCCGTTAGGCCCGAGGATGCCGGTCACGGAGCCGCGGGCGATGCGGAGATCCAGCCCCT
+CAAGGAGTTGCTGACCGGCGATTTGCACGCTCGCCTGACGGAGGTCGAATTCTGGAGAGCTGTGGGTCAT
+GGATGTCCTTCGCCGTGACGGGGCAGGGAGCCTTCCGCTGCGCGGCATCAAGCGGCACGCTTGCGGAGTT
+GCCAGAGAAAGAAGGGGCCGCCCAGGAGCGCTGCGAGCAGGCCGGGCGAGATTGGCCAAGGCCAGGCCAG
+CAGCCCGCCCACCCATTGCGCAAGGACCATGACCGAGGCGCCGGTCGCGACCGAAGCGAGGGCCGCCGGC
+GCGGTGGCGCGGAACCCCATTGTCGCCACGAGATGGGGTACGATCAGGCCGACGAAGCTGATCGGACCGA
+GGGCGATCGTGCCCGCGGCAGCGGCAAGAGACGCGAGCGCAAGCCCCGCAGCGCGGGCGGGCGTCACGGC
+CAGCCCGCGCCCTGCGGCGACCGCCTCGTCGAGCGCGAGCAGGTCGAACCAGCGCCGCAGGAGGAGCGCC
+ACCGCCAGTACCGCGATCGCCACGCTCCAGGCCAGCAGAGCCTGGGCGAGGCTCGCGCTGCCGGTGGACC
+CGGAGAACCAGCTGAGGAGCGCTGCGCCTTTCGGCCCGCCCGAGGCCAGCACCAGCGTCAGAAGCGCCTG
+CGCCGTGCTGCCGAACCCCACGCCGATCAGCAGCAGACGCGAGGTCGCAAACCGGACCCGCGCGGCCAGC
+AGCGTCACCAGCGCCAGCGTCGCTCCTGCGCCTGTGGCCGTCAGGGCGAAGCGCGAGACGAGCCCGCTTT
+CCGGCAGGAAGACCATGGCCAGCGCGAAGGCAAGGCCCGCCCCATGCCCGACGCCGAGGAGGTCGGGGCT
+CGTCAGCGGGTTGCGCAGGAGGCGCTGGAGCAGAAGGCCCGAGAGCGCAAGACAGGCGCCTGCGCCGGCC
+GCGAGCAGCAGCGGCGGCAGGCGCCAGCGCAGGACGGCGGCCAGATCCCTGGCCGTGGTGAGGTGCAGGC
+CGGCTTCCGAGCGACCGATCAGCAGCGCGAGGGCGAGCAGGACAGGCACGGCAAGCGCCAAAGGAAGCAG
+TGCCCGCATCGGACGCCGGGGCCGGGCGAGCGCCGGCGGTTCGGGGCGCGCGGGAAGATCCGGGCTTCGC
+GATCCGAGCGACAGAAAAACGAGAAGCGGTCCAATGAAGAGGCCTGACGCCGCGCCGACCGGGACGTCCC
+CGGCAAGACCCGAGAGCAGCCGCGCCGTCTGGTCGGCAAGCAGCAGCAGGACCGCGCCCCAGAGTCCCGC
+GCGGGGCAGGTCGGGCCGGGAGCGACCCCCAGACCTGCCGCCCAGGCCGCGGGCGAGCGCGGGGCCCGCG
+AGCCCCACGAAGCCGATCAGGCCCACCGTCGCCACCACCGAAGCCGTGATCCAGGCCGCGGCGGCGAGCA
+GCAGGAGCTTGGTCCGGCGCACGGAGAGGCCGAGGCCCTCTGCGGTCTCCTCGCCCAGCATCAGAAGCTG
+GAGCGGCCGGTGCATCAGCCACAGCGCCCCCGCCACGGGGGCGGTCTGCGCGAGAAGGCCGAGGCCGGGT
+TGCCAGCCGGCCTGCGCCAGCGAGCCGGCCTGCCATGTCAGCAGCTCCTGCAGGAAATCGTGGTTGAAGA
+GGACGAGAAGCGCATGGGCGGCCGCGGCGCAGAGATTGACCATCACGCCGGCGAGCACCAGCGCCTGACT
+GTGCAGGCCGCGGCCCCATGCAACGGCCAGCACCAGGATCAGCGCCCCCGCGGCTCCGGTCAGGGCAAGG
+AGCCCCGGCGCGGCCTGCCAGAGAGCCGGAGCCAGCAGCAGCCCTGCGGCCAGTGCCAGCGAGGCGCCAC
+CCGAGATGCCGAGGAGCCCGGGTTCGGCCAGCGGGTTGGCGAAGATGCGCTGGCAGACCTCGCCCGCCAT
+CGAGAGAAGGAACCCCGCGAGAAGCGCCATGGCGAGGCGCGGCAGGCTGCTCTGGGTCAGCACGAGCCGG
+GCGAGCCCGTCGCCCGCCAGCGCCTCGGGCAAGAGGGGCAGCAGACCTTGCAGCGTGAGCGCGCCGGCGA
+GGAGAAGGAGAAGCGTGCGCGCCATGGATCAGCCTTGCATGAGGGCCGCGGCGACCGTTTCGGCCAGATG
+CCGGGCCGAGAGCAGCGCGCCCTGCGGATAGAAGCTGCCGATCCAGTGCGCACGCCCCGACGCGACGGCG
+GGCACCGCGCGCCAGAGGGCGCTCGCCCGCAGCATCCGCTCGGTCCGCGGCCGCATCGAGGCGATCTCGA
+CCAGCAGGATGGTGGCGTCTTCCAGCCGGATCAGCTCCTCGAGAGAGGCGCGGTAGGTGCCGAGCGCAGT
+GACCGGGCCCGTCCAGGCGTTGGCGAGGCCCATCCGCGCCAGCACCGCGTCGGGCAGGCTGCCACGACCG
+TAGAGGGTGAAGAGCCGCCCCGAGAGGTCGGGGACGCAGACGAGGACGGAGCCGCGGTCCGCCGGCACAC
+GCCGGTCCTCGGTCGTCAGGACCGCCTCCGTCCCGGCCACAAGCCGTGCAGCGCTGTCCGGCGCGAGGCC
+TGCGGTGGCGGCCATCTGGCGCGCGAGATCGGCGGCGAGATCGAGCCGGCTGCCATCCGTCTCGGTCGGC
+ACGATCTCCACCGGGGCGATTGCGGCGATGCGCGGCGTCATCATCAGCGCCGAGGCCGGCGCGATGATCC
+TGTCGGGCGCGAGCCGCGCCAGATATTCGAGGTTGATCTCCCAGAAGGGCCCGATGTCGACCACGCCCGG
+CGGCAGGTCGAACGGCATGCGGCTGGCGAAATAGCCGCTGTCCGAGATCGCGAGCGGCGGTCGGTCGAGC
+GCGATCAGCGTCTCGGCCGCTGCCCAGTCGATGACGGCCAGCCGTGGGCCGGCCGTCGCCCGCGCAGGGA
+CGGGGAGGGTCAGGGCCACAAGGCCCGCGAGGAGAGGACGGCGCGAGATCATGGGAGGACGACGGAGACG
+GCGGGCCGCCTCCGTCCGGATCCGTCAGAAGCCGATGGCGATCTTGGCCGTGACCATCCGCCGGTCGCCC
+TCGTAGCAGGAATAGGCGCTGGCGCAGGTGGTGAAGTACTCCTTGTCCGTCAGGTTCGTCACATTGAGCG
+CCAGCCGCGCGGTCTCGCTCAGCGCATAGCTCGCGCCGAGGTCGATCACCGTCCGGCCATCCACCTTGAT
+CGTATTGCCGTTGTCGCCGAAGCTCGTGCCCACATGGCGCAGCCCGCCGCCGAGCGAGAGGCCGTCCAGC
+GCGCCCGCGCCGAAGCTGTAGTTCAACCAGAGCGACGCCTGCGACTTCGGCACCAGCGCGGGGCGGTTGC
+CCTCGTTGCCGGCATTGTCCTCGGTGATCTCGACATCGCTGTAGCTGTAGTTCGCCGCAATGTCCCAGCC
+CGAGCCGAGCGAGGCCTTGCCCTCGACCTCGATCCCGCGCGAACGGATCTCGCCTGTGGCGATGTTGTAG
+CCGGTCGAGATGCCGCCCGGCCCCAGTTCGGGCGTGAGCACGTTCGACTTGGTGATGTCGAACAGCGCCA
+CTGTCAGCAGCGCGTCCGTGCCCGAGGGCTGATACTTCGCTCCCAGCTCCCATTGCTGGCCGCGGGTGGG
+ATCGAAGGTACGGCCGTCCGAGCCGAGGCCCGCGTTCGGCAGGAAGCTCTCGGAATAGCTGAGGTAGGGG
+ACGAGGCCCGAATCCGTCAGGTAGCTCACCCCCACCCGGCCCGAGAAATTGTCGAGATCGACCTCGCGCG
+CGGTTCCGGTCAGGTGGTCGTCGGTTCTGGTGCTGAGCCAGTCCTGACGCCCGCCCAGCGTGAAGAGGAA
+GCGATCCAGCCGGATTTCGTCCTGAACGTAGAGACCCGTCTGGCGATACTCTTCGGTGTAGTCATAGGCC
+ACGGTCGTGGGGGTGGGAACGTCCACGCCATAGACGGGCGCATAGGGATCGAGCGAGGGCGCGGTGCCGT
+TCCAGCGGCGCGCGTCCGTGTCGCTGCGCGAATGGTCGAGCCCGATCAGCAGCTTGTGCGAGAGCCGCCC
+GGTCTGGAACTCGCCCAGGAGGTTGGTGTCGACCGCAAGGCTGTCGAGGCTTTCCGAGAAGCGCCGCGCC
+TGCCGCGTGAGGCCGGTGGCATCCGCCCCGATCATGGCGATCATGTCGAGATCGAAGTCCACGCGCCCGT
+AACGCAGGTTCTGGCGCACCGTCCAGCCATTGTCCATCCGGTGGCTGAACTCGTAGCCCAGCGTCTTCTG
+GTCCTGCTCGCTCCGCGAGAAGTTCGGGTCGCCCACGAGGATGTCGGTCGGCGTGAAGAAGATCGCCGTG
+CCGCCCGAGCGGTCGCGCAGCGCCTGCGCCGTGACGGTCAGGCTGGTGGCGTCGGTGGGTGCCCAGGTGA
+TCGAGGGCGCCAGCATCAGCCGGTCGTCCTTCATCCGCGTGCCGTCGCCGTAGGAAAATTGCGTGTTCCC
+GTCGCGCGCCACGCCGACCAGCCGGTAGGAGAGCGTCTTGTCCTCGGTGAGCGCGCCCCCGAAATCGACC
+GCCGCCTGCGTCGTGGCGAAGCTGCCGTAGGAAAGTTCGGCCTCGCGCAGCGGTTCGGTGACCGGCCGCT
+TCGAGGTCTTGCCGACCACGCCGCCCGCATCGGACTGCCCATAGAGGGCCGAGGACGGCCCGCGCAGCAC
+TTCGATCGTCTCGAGCTGGTGCGGATCGGTGCGGAAATGGCTGTAGTTCGAGGCGATCTGGCGCAGCCCG
+TCGAGATAGGCGCTGGAGGACTGGCCGTTGAAGCCGCGCAGCATGATCCATTCGAAGCCCTTGGGGTCCG
+GGCCGTAGGTTTCGATGTTGACGCCCGGCACATAGCGCAGCGCCTCGGTGACCGAGCGGGCGCCCTGCGC
+CTCCAGCTGGCGCGGGCCGATCACGCTGACCGACTGCGGCACTTCCAGAACGGGCGTGCCGCTCTTGCTG
+GCCGTGCCGCTGGCGCCCGCGACGAAGCTCGTGGCCCCGTTGCCGTCGCCCGCCACCCGGATCCGCTCGA
+GCATCACGCCGGCCGAGCCGTCCGCCGCGCCCGCGGGGATGCGCTGGAAGACGTGGATCGTGCCCGCATT
+GGCGAAGCGCCACGAGAGGCCGGTGCCCGCAAGCAGCGTCTCCATCGCCGCCTCGACGCTCATCGCGCCC
+TGCACCGGATTGCCCCGCACCGCCACAGCGCCCTCGTCGGGCATCACGATCGAGAGCCCGGCCACGCGGC
+CGATGTCATTGACCGCCCGCGTCACGGGTTTCGCCGGAATGTCGAACCGGTGCGGCACGCCTTGCGCCAG
+CACGGGGAGCGCCGCTCCGCAGAGAAGCGCGGTCGTCAGCAGCCGGGCCATACGGCCGGTCCGCCAGGGG
+AGAAGAGACTGCCCTCGCATGGAATATCCTTTGTCCTTCGTCACGGTGAGCACGGATGGCGAAGGTTCGG
+GCTTTCCATGCACTCATCAGGTTCACGTCCCGGGGCGGGGATCACTGAACCGACGGGCGCATCTTTTTCT
+CGGATGGCCCCTAGGGGCGCAGGATCCGGACGGATCCGGGCAGGCGGGTGATGGTCAGCCCCACCGTGTC
+GCGCAACGACTCGAGCGCCGCCTCGGGATGATCGAGATCGAGGCTGCCGGACACCCGCCTGTCTCCGAGG
+TCGCGCGAGGCAATGAGGATGTGCCCCGGCAGATAGCGCTCCAGCGTGGCGACCAGATCGCCGAGCCGCA
+TCCGGTAGAAGGCGAACCTGCCGTCCTGCCAGCCCGATGCTTCGGCCAGGTCCACGGCTTCCACGGAAGG
+CCGACCCGGGCCGTCGACGCTGAACTGCTCGCCCGGGACCAGCGGCTGCTCGACCGGCAGACCGGGATAG
+CGGACGCTCACGCGGCCTTGCCTGAGGACGATCTGGCCGCCGTCCTCCAGCAGCCGGACGTCGAAGACGG
+TGCCATGCACGGTGACCTCGCCCTTGCCGAAGCGCACACGGAACGGTCGCGGCGATCTGGTGACCTCGAA
+CGAGGCCGCTCCGCGCAGCAGCCGCAGAAGGCGGTCGGGACCGTCCATGTCGACGCGGATCGCGCTGTCC
+GCGTCGAGGAGCACCCGGCTGCCGTCGGGCAACGAGACGCTGCGGCGCTCGCCCCGGGCGCTCGCGTAAT
+CCGCTCCGAGATCCTGCAGGAGATGGGGCTGGCGCAGCCAGAGGCCGCCAAGGCCGATCGCCAGGGCCAG
+CACCGCCACAGTTCCGCCGCGCAGAACGCGCCGCCGCCGGGCGCCCCGGTCCATCGCCGCCAGATAGACC
+GAGAGCGCCCCGGCCTCGGCTTCGGCAAGCCGCTCGCCGGGCGCGCGCGTCTCGCCCCAGAGCGCTTCGA
+CCTCGGCCCAGGCGGCGACATGCGCGGGATCCTCCTCGAGCCAGACCTGCAGTTCGCGCTTCGACAGCGC
+GCGGCCGCGCAGGCGGACAAAGAGGTCACGGGCTTTCGCGCGCTGCGGCTCGGTCGGGTGGCGATCCCCA
+GTCAAGCCCCGACCTCTGCGGCGGCGGCGCAGGCGGCGACGGCCTTGGCCATGTGCTTGGCCACCGCGCG
+CTCCGACATGCCGAAAGCTCCGGCGATTTCGGAAAAGCTCCGGCCATGGACGCGGTTGAGCAGGAAGATG
+TGCCGGGTCTTCTCCGGCAGGGCGAGCAGAGCCAGATCGATCCGCTGCAGCGCGTCGCGGGCGCCCATCG
+CGTCTTCCGCCGAGGGCGCATGCAGACCCTCGTCGCGTCGGGCGGCCTCGGCCAGCAGCCGCGCCCGGGC
+CTGCTCCGCGCGCAGGTGATCGACGGCCGCGTTGCGCGCGCAGCGACTGAGATAGGCCGCAGGCTCCCCG
+TTCAGCCGCGTGGCACGCTCCCACAGACGCAGGAAGATGTCATGGACGATGTCACGCGCGAGGCTCGCGC
+AGCCGATCCGGCGGGCGATCTGCCGCTCCATCCGCTCGCGTTCCGAGACGTAGAGCTGAAGGAGGTGTTC
+GGACTGCACTGTGCGGGCCTGACTGTGAAGAGACGCGGCACCTTAAGGCCGCATGGAACTCCCGACAATA
+TCGCTCGGCCATTCTGTCGTGGGCGTCCCGCGTTGCTTCTGCCGCCTGTCGGCAGATCCACTGGTCGGTC
+AGAACGCTCTGTGTCCCAACGATGGTGGTTAACGCTTCGGTGCTAACGACCACGCCATATGGGTCTGGAG
+CCTAAGACGCTCCACAATAAGCGGCGTCTCCGCCACAGCGCGGACGCTCGTTCAGACAGGACTTCGCATA
+GAACCCGAAAGACCACGGTGCCGATCTCAGGGGTGGCCATTCCTGCCTGGGGATGGACAGCGCTTAACCC
+CTCCTGTGCTCTGCGCCTGCCGCCACCTCGACGGTCACATGCTCCATCCCGGTCGTCTCGCGCACGCGGC
+CTTTCACGGCGCGGCGCACGTCGTCCGCCACCGCGCCCGGCGCGAGCTCGATCTCCAGCGTGGCCATGGG
+CCGCTCCTGAGTGATCGACCAGGCGTGGACGTGATAGGCGCGGGCCACTCCGGGCAGCGTGGCTTCGAGG
+TCGGTCGCGACGGCGCGGGCGTCGAAGCCCGCCGGCGCGCCTTCGAGCAGGATATGGCCGCTCTCGCGCA
+CCACGGACCACGCCGAGCGCAGGATGAGGAGAGCAACCAGCACGGACAGGATCGGGTCGATGGGGGTCCA
+GCCTGTCCAGATGATGATGAGCGAGGCCGCAATCGCCGCAACCGAGCCGAGCAGATCTCCCATGACGTGC
+AGGGCGGCGGCACGGACGTTGAGGTTGTCGCCCTCTGCGCGGCTGAGCACCCAGAAAGCCAGAACGTTCA
+CCACGAGTCCCCCCACGGCGACCCAGAGCATCAGCCCGCCCAGCACCCCGTGCGGGTCGCGCAGGCGCTG
+GATGGCCTCGAAGACGATCCACCCCGCGATGGCGAACAGCGTGACCCCGTTCACGAAGGCGGCCAGCACC
+GAGAAGCGGTCGAAGCCGTAGGTCCGCTTCCAATCCGCCGGTCGCCGCGCCAGCCGGAAGGCGAACCAAG
+CCAGCAGAAGCGAGGCGAAGTCGGTCAGCATGTGGCCCGCATCGGCCAGAAGCGCGAGCGATCCGGAGAT
+GAGCCCGCCGATGACCTCGGCCCCCATGAAGCCGCCCGTCAGGGCTGCGGCGATGAGGATGGCGCGTTCC
+TTGGAGCGGCGCGCCTCGGGCGTGTCATTGGCCGAGAGGGTCGGACCGTGCGAATGCCCCGCATGTCCAT
+GTCGATGTGCGTGCCCATGCCCGTGTGCATGATCGTGCCCGTGACTGTGATCGTGTCCCATCACCGCACC
+TCCGCCCGAAGGCCCTTGTCAGCCGGGCGCGTGACGTGCGCGTTTATCCCGTGGTGGAGTGTGGGGGCAT
+CGAAGCCCGGCAGGTCAGGGCTGCGGAGGTGGTGGTCGGTCATGGCAGTGCTCTTGATTCGTCTCGTCCC
+CATGGTAGATACGATCTACAGCCACTGTAGCTTCAAGGGGTGATCGCGATGCAGGGCCATTCCATCGGTG
+CGCTGTCCAAGCGCACGGGCGTAAATGTGACGACGATCCGCTACTATGAGGGGCGTGGTCTTTTGCCCGA
+TCCCGGCCGCACGGGCGGGGGGCAGCGCCGCTACGGCGATGCCGAGCTGGACCGGTTGTCCTTTATCGCC
+CATGCCCGGCAGCTTGGATTCGACCTCGACGCCATTGCCGAACTGATCGCGTTGCAGGAGACACCCCATG
+CTGCCCATGGCGACGCGCACCGCATCGCGAAGGAACGGATTATCGAAATCCGGGATCGGATCGCGCGGTT
+GCGGCGGCTGGAGGCTGAACTAGTGCGCGTCGTGAAGACCTGCGACGGTCAGTCCGATGGGCAACCCTGC
+CGGGTGCTGCATGCCCTGGCCGACCATCAGGCGTGCGAAGGCGAGCACTGAGACCTGCTTGGGGTCACAA
+AGAGGTTCTGAACGTGAACACGTCGCGTGTCAGGGTGAACGCCCGGCCGGAGCATGCGCCAAGCGGCCAT
+TGTGGACGACACTCGGTAGCTCTTATCGCTCTTCCCTATCGTAAACGGTTCCGCTCGAGCAGATAGCGGC
+CTGGAGGCTTGCCGACCATCTTTCGAAACATGGTCACGAAACTGCTGGCGCTTTCATAGCCGAGATCGAT
+GGCGATGGCCTGAACCGACTGACCAGCGCTCAGGCGCCGCAAGGCAAGCACGATATGCAACTGTCGGCGC
+CAGCGGCCGAAACTCATGCCCACCTCGTCGGCCAAAAGACGGCTCAGGCTGCGCTCGCTGAGCGCGACGC
+GGGAGGCCCACTCCGCGACGCTCGCGTGATCCGCGGGCGCCGCGATCAACAGGTCGGTGAGCTTCTTCAG
+GCGCGGATCGCCGGGGATGGGCAGGCAGAGATCCTCGACCGGTGCCACAGCCAGCTCATCGAAGAGAACG
+GACACGATCCGCCCATCCGGGCCGTCGACGTCATAGAGGTCCGGCAGAGCGTTTGCCCGCATCAGCAACT
+CGCGGAAAAACCGCGACACCGCGATCGTGCAGCAATCTTTCGGCAGGTTCGCGGAGTCGGGAGGATCAAT
+GAAAAGAGAGAGACACTCCACCTCGCCCGAGCCGAAAACGGAATGGGGCAGCCCGCTGGGAATCCACACG
+GCGCATTGCGGCGGTACGATCCAGACTGCGCCGTCGACCTCGCAATTGACGACGCCCCGCACCGTGAAAA
+GCAGTTGCGCCTTTTGGTGATGGTGCCGGGGCGATTGCTCCAGGGCGTCAAGGGTGGCGACCGCGTTGGC
+GGCCACCAACGCACGCGGGATCTCGTCGACATAGGCGAGCCAGTCGCGACGGACGTCCAGATACATCTCA
+GACCTCGGCATTTTCAGATCAGGCCGGATTGAAACATATCGTGGCAGGGTTGCGCAATGACGCCACGTGC
+CGGCTGGCGTATCTGGTGATCGCGCTCCGTTACTGGAGGGGCAGAGCTGACCTGCCAGACACATAGGCAC
+AGGAGTTTCCACGTGATCGACAATGCCCCGGTTAAGCTCGCGCTCGCATGGCTCATCCCGGCAGTTGGTG
+CCGCACTCTTTGTCACGATCCAGTGCTTTTCCTATCTGAACGTCTATGTCGGCAGCGGCGGGACGATGCA
+GGCCATGACGTTCGATCCCGCCTCCTTGTGGGGCGTGTCCATTTTCTATGGCGCCTGGGTCCTCCCGCCC
+TTGCTGGCGCTGGCCGCAAGGCGCGCGACCGACTGGGCGATGCTCGTCTTCGGCGGTCTGCTGTTCATCA
+TGAGCACGCTCGCTGGCGTCTTCGATGGCTTGCGCGATGGCGGCCATCTTGTGGGTCTGGAACTGCTGGC
+TGTCACGCTGCCGGGTGTGGTCGCGCTTCTCTTTACATGGCGGCACATTCGTTCGACCTGAAACCGTCCA
+TTCTCGCCGGGAGACGACACATGCCCTTGGATATCACGAATTTTCCGCTTGTCTGGATGAGCTATGACGA
+AGCGCCCGATCACAACCACGACGAGGATTTCGCGGCACTCGAGGCGTGCTTCAAACGCGGCGCACCGTTT
+GTGATCCTGAGCGATAATGCTCCGACCGAAGACGAACAGCACGACCATAGCCAGGAAGAAAGGAAGCGCA
+CTGCGCTGTGGATGAAGAAGCACAAGGCCGAATTGCGGACGCTGGTGCGGGCGATGATCGTGATTGAGCC
+GAGCGCCGGCAAGCGTCTGGCCTTCAAGACTTTCGGCGCGGTCTTTTCCAAATTCTGGGGTTTTCCGTTG
+CGGATTGCAGTGACTCGCAAAGAGGCGATGGACGTCGCCGAGAACCTGCTATCAGAGGGCGCGGGGTCTA
+CAACATTCTGAAGAACAGCTGCGTGGACCGCGCGACGATGGTTTTCTGAAGATTGCAAGTTTCGCTCGAG
+CTTTGGTCGATCGGGCTATGGCGCAGTGGCCCGCCCCCATGGGGTGGTACGGTTTTAAGTGCATGACAGG
+TCTCGGCGCCACGGTTGAGGTGGCCGGCGTAGAGGGTGCGGTTGGCGAAGCCGGCCACTGCACGGCCAGT
+GGCGACGGGGGACGGTGGCCCAGCGATGAATGCGGGCGCCTCGTGTTGTAATGCTGGCGCCAGGTCTTGA
+TCACGATCCGGGCTTCGGCCAGGCTGTAGAAGATCCGTCCGTTCAACGTCGCGGCCGTGGCCACCGCCCG
+CAAGATCGCGGCCCTGATCTGGCAGTTGCTGACGAAGGAGCCCCCGTATCGCTGGGCGCGTCCCGCCTTC
+GTGGCCGTGAAGATGCGCAAGCTGGAGTTGCGTGCCGTCGCCGCCAGGGCTCACGCGCCAGCGGGTCCCA
+GCCGCGACTACTGGATCAAGGAGATCCAGCATCGGGAAATCGAACTGGTCGCACAGGCCGAACTTGCTTA
+CGCGCAGATGGTCGGGGCATGGAAGGACAAGCCGCCTAAGCCGCAGGGAGGATGAGAAAGGGGCTGTTCA
+ACAACGTCCGTGTCGATGGCTACACGCCCATCCTCGAGGAAGAGGCCGAAGGCATCCCAGCGGTTCAGGA
+CGTAGCGGAACGCCTTCGCCAGATCGCTCTTGCCCGAGATATAGTCGAGGTTCTCCTCGGCCCAGACCTT
+GAATGCCTTGACCTTCGGGCGGCTGTGCGCCTGCCGGACAGCGTGGCGCTCGTCGGCACTGCGGCCGTTG
+ATCTGCGCTTCGATGTCGTAGAGCGCTCCGATCCGGTCCACCGCCTCACGGGCGATGTCCGAGCCGGTCT
+CTTTCTCGACCTCGAAGAAGGCCCTTCGCAGATGCGCCCAACAGGCTGCTTCCTAGAATGGGCCGCGCCG
+TTCCCCTCCGCAAGATAAAGATCCCTGAGGCCGGCGTTAGCATCGGCCTGCAGGATCCCATTGCCGGCCC
+CGAGGTGCTTTTGCGGGTGCTGGCCCTTGCGATCGGGCGAGAAGTGATAGGCCACGGCCGGTGGCGTGGC
+TCTCGACCAGGGCCGTTGGTCGCGGACATAGGCCCAGATCCGCCCCTCCTTCACGCCCTTGCCAAGCTCG
+CCCTTCATCGCTCTCTCTTTTTGCAACTGACACCCCCATGACGGGCGAGGGAAGGCGGATGTGACATCGA
+GGAGCGAGCATCCCCATGCGCAAACGGCTTGACCGGAACGGCCCCGTCACCGAAGTCCTGACCCTAATGC
+GGCGCCGGAAAGCGGACCCAGCCGGTGAAGGAATAGCGGTCGAGCTCGGGATAACCCGCCCAGACATCGC
+GGCCCAACGTGTCGGCGATGACCCGTGCATTGCGGAAGGCGCCAAAGCAGGACATGAGCTTGATCGGCCC
+CTCACGCTCGCGCCAGCCCTCGTCCACGAGATACCGGGCAAAGTTGCGGCCCGAGATCGGGCGTACGAAA
+TCGGGGGCTCCGTCGCCACTCACATCGACGCTGGCGAAGATGGTGTTGCCCGCGCCATGCCCGGCGATGG
+TGTCCACCGATTCCTCGCGCCCCGGCGCCATCAGCGGGCGGCCCTCGCCTTCGCCCTCGCCGAAATCCAG
+CCGCATCGCGTATTTGTACCCGCCCGGGCGCCTCTGGAATCCGTTGGCGCTGGTTTCGGCCTCGGGCTGC
+GGCGCCATCACCAGAAGGCGCTCGTTCTCGCCCACCGCGCCGCGCGTGTCGACCGCCGGGGTGATCAGGT
+GCAGTTCGTCCTCGCCGATGGGCACCGGAATGATCTTGGCGTTTATCTTGCCCAGATAGGCGCCCGACAT
+CAGGATCCCGCCACCCGCGCCGGCGCCAAAGCCCACCGCCATGCTGACGATGTTCCCGGTCGAGAAGAAC
+GGCTGCTGATAGGCGACCGAGGTGACCCCGGCCGAGGCGGCGGCCCCGGTCAGCCCGCCGATGGCGCCCG
+AGGTGATGAGGCCGACGCGGGTGATCGCCGCCTGCGACCAGCCCGCGTTCAGCGCCCCGCGCATCGCGAC
+CCGGCCCGCCGCGCCGCCCAGGCCCGCGCCGACCGCGCCCCCCACCGCGCCGCTCAGCAGGTCGATGCCG
+ACCCGCGCGCCGGTGATCTTCTGGCCCGAGATCGCGGCACTGGTCAGATCCCCCGCGACCGAGCCCACGG
+CACCCGCCAGCGCGCCCGCGCCGATGCTGGCGGCCACGCATTCGGTGCCAAAGACCGCCGCCGCGGCTGC
+GCCCGCGACCCCGCCGGTCAGCACGGTTGCGCCGATGCCGACGATGGCCCCGGCGATCAGCCCCACGATC
+TCTTCCCAGCTCTGGCCCAGCGGGTCGGAGTTCGCGATCGGGTTGCCCATGGCATAGGCGTACCGGTTCA
+TGGTGATGCGCGGATCGAGCGACAAGAAGCGCATGGTTTCCGGGTTGTACCAGCGCGCCCTGAGATAGGT
+CAGGTTGCTGACCGGGTCGGTGAACTGCGAATTCCAGTTGAAGCTGTTGGCGCGGTCGAGCGCGGATTGC
+GGTGTGACCGTGCCATAGGCCGAGATGGCCAGAGCGTTGCTGCTGGCCGAGGTGCGGTGCACATAGACCG
+ATTTCGACGCCGCCGCATAGGCGGTGACCGATCCGGCGCTGACCCGCGCGACGGGCATCTGTCCCGCCCA
+CATGAGCCCGTGCCATTCCGGCGTGCCCGACTGGGCATTCGCCGCCACGCTCACCATGGTCCCGGCCAGC
+GGATAGAACCTGTCCTCGGTGCTGCCGTCGATCACCGAGGCCAGCGCGCCCTGCGGACCATAGCTGTTGG
+ACATCGAGGGCCCCGAGGCCATGCCGACATTGGTCAGCCGGTCGAGCGGGTCGAAGCCATAGGTCGACCC
+GTCCACGTCCCTGACCATGCGGCCATTGGCGTCATAGGCGGCAGCGCCCGAGGTGATCTGGTTCAGAGCG
+TTGTAGGCAAAGCTCTCCTGCTGGCCGTTCCGGGTGCGGGTCAGCACATTGGCGGCGCCATCGTAGGCAT
+AGCTTACCTGGGTCGGCGACCCGCCGCCGGACGGGGCCAGCGTGATCCCCACCAGCTGCTTCAGGCCGTC
+ATAGCTCATCGTCTTCGCGACGTTCACCGAAGGATCGGTGTTCACAGCCGAGGCGAGCGTCAGCGACACC
+AGGTTCCGCCAGCCGTCGCGGGTGGCGGCGGCGCTCAGGACGCCGATGCCCGCGCCGTCGGTGACCGCGA
+CGCTGTCGTTTGCCCCGAATCCGTCATAGCCGAACTGCGTGGTCTGCGCCGTCGCGCCGCCCAGCACCTG
+TTTCAACAACACGCCGTTGGCGTGGTTGGCCGTGCCCCAGGTGTTGCTCAGTGTGACCCCGCCCATGGTC
+TGCGCGATGATCTGGTTCAGGGTGTTGTACGAATAGCTTGCCGCGGTGCCATCGGGCAGGGTCATCGACA
+CCACCCGGCTGGTGGCGTCCTTGGTCAGCGACAGCGTCTTGCCATCGGGATAGGTCACGGACGAGGCCGT
+GCCGTCCAGAGAGTAGGCATAGCGCAAGGTGCCGCTCGGATCGGTGATATGGTCGATCCTGCCATTCGAA
+AGATAGGCGAAGGTGCGCGTCTGCCCGTTTGTGGTCTCGCTCAGCACCTGGCCTGCGGCGTCGTAGGCAT
+AGGTCGTCTGGGTGCCGTCATAGCGGGTGCGGCTTTGCAGGGCGCTGTCGGTCGTGTAGCTCAGCCGTTC
+GATCTGCCCGGCCTGGTTCCGGATCTCGATCAGGTTGCCGACCGGATCATAGGTCAGCGTCTCGCTGACA
+ACGAGGGGCTGCGCCGCGCCGTTATAGCTGACGTTGCGGGTGACAAGGATCGGATTGCCGTTCAGGTCGC
+GCTGCGTGGTGGTGCAGCGCGTCGCCTGCAACGCGGCGGTCGCGGGGGTGCCGGTGAAATCCACAACTTC
+GGAATTGCCGTCCGGCGTATAGGCGAAGGTCTTGACCGAATTCTGCACAACGTTGCCGCCGGTGATGCTG
+AAATGCGTTTCGGTCACCACTTGGCCAAAGCCGTCATAGGCCGAGGTCACGCGCTGCACCTGGCCCGCCT
+GGGGTGAGCCGCTGTCGGCATGGGTGTCGGTTTGGATCGTGTTGCCCAGCCCGTCACGGGTGATGACCGT
+GCGAAGATCGCCGTTCATCGAGGTGCTGACCGTTCGGGCCGCGTCATCGAAGATGGTCGTGCTCTGATTG
+CCCAGGGCATCGGCCAGGGCGATCTGACGTCCCAGCGCGTCATAGCTGATCGTCAGGGTCTGTTCGGTGG
+CGTCGGTCTCGCTCGCCTTCAGATCCAGCGCATTGAAACTCACGCGGCGCAGGGTACGCGACAGGCTGGG
+CGTCGATTGGGTTGGATCGCCATTGTCCATCATCAGGACGGCGCGCCCCTTTGCATCGTAGGTCGTGCAG
+AGGACATAGCCGTTGGACTGGGTCACGGTGCTGGTGTTGGTGCCGCCGCCACCGTTTCCGGCCAGAGTGT
+AGGCATGGGTCGTGACATCGCCCAGCGGGTCGGTTTCCTGCATCAGGCGCGCCAGCGGGTCGTAGGCATA
+GCTGCGCCGCGCGCCGCCGGGTTTGGTCTGGCTCAGGCAGGGTCCGCCCGGCAGGCGCATGTCGAAGACC
+GCGACCCGGGTGTGGCCGTTGGCGTCAGTCGTGTCGACGGTCAGCTGATGCGACGCGGCATCGTAGCTGT
+AGGAGGTCTGTTCGCCGACCGAAGCGACCGACCCCTCGGGACCGCTGTAGCCCTGGGCCCAGGTCAGGGT
+CCAGCCGGTCTGGCAGCCCCGGGGATCGAACTGGAAGGTCTTGGTCTTGTAGGGGGCGAAACTGCCCGCG
+CCCGCCGCCTGGGTAGAGACGGTGGTGGCGGCGATGGATTTCTGGTCGGCCGTCAGCCCATAGTCGATCC
+GCGTCGTCTGGCCGGTGACCGCATCGACGTAGTCGGTTCGCTGCGGCATCTCGCCTCCCCACGCGACCTG
+GAGAAAGCTGTGCGTCCGCTGGCCGGTCAGCCGGGGTCTGCCGCTGCTCAGGTCGTACTGGCTGCTCGAC
+GTGATCTTTCCATAAAGATCATAGGCGACATCTGCCTGCGAATTGTCGGACCACGTGCCGCCCGCCGCGT
+CATAGACGCTGTGCACCGTCGTCACCGGTTTGTTCATGTTCACGCTTCGCGCATGGGCGTCGGTGACGAT
+GTCGTAGGTATAGGAGGTGCGGTGCGCCTCTTGCGCATGGCCGTTTGCGTCCACCAGATAGGCATGCTCC
+GTCAGCGGGCAGTGCAGGTAGTTGAAGAACACCCGGTTGGCGGCAATGAGTGCGCCGCCCGCGTCGCGGC
+GCTGTTCCAGCACGTCGTACTGGTAGGCGGTGTTGTTGCTGTCCATGAGCCCGTCCGAGGCCGTTCCCAT
+CCGGTACCCCGCGGTTGCCCCGGTATAGGTATTGCCGCCCGATGCGGTGCCATAGCTGTAGTCGCTCCGG
+TCCAGGAACGCGCCGCCCGGTCCGGTCCGGGTCATCGACTGCACGGCCGGGCGGGTGCCGGAATTCCCTC
+CGGCGTCGATGTAGCGGAGGCCGGTGTAGGCCAGCGTCGTTGTCATCCCGGTGGGATAGGTGATCGCGCC
+GACGACCGTCGTGCCCGAGGCCGAGGCATAGCTGAAGGCGGTGACCGCGCCGATCTGGTTGGTGACATGC
+TGTACACCCTGGCTCGAAAACGCCACGGTCACGCTCGATCCGTCGGGCAGGGTCAGCACGATCGTGCCGC
+CGGAATAGCCGAACGTGACAACCTGGCCGAAACTGTCGGTGATGCTGGCTAGGCTGTTCTGGAACACGTC
+GCCCAGCGGGTTGGTATAGGCATAGCGCAGCATGTTGCCGTAAAGGTCGGCATGCGCGATCAGCTTGCCC
+GTGGCGTCGAAATAGCTGATCGATCCGTCGTCATAGCGCAGCATGAACCCGTATGTCCCGCCGCCGCCCG
+GAACGGGCTGCGGCGGGACGACGGTCTGGAACAGGCGCCCATGGTCGTTCAGATAACGCAGGCCGGATTG
+ATAGCCCGAACTGTCGGTCCAGCTGGGGTCAATGACAAAGGTCTTGCCCTCGACCGTCAGCGATTGCCCG
+GCGGCGACGAAGGGCAGCCCCCAGCCCCAGCCCTGCGGCAGGCCCAGCTGGCCCGACGCCCCCGCGGAAT
+AGCCCAGCGTCAGCGACAGGCCGATGGCGTCGGTGATCCCGCGCAACTGCACCAGCGGCAGCGACACCAC
+CAGCGACCCGGTATTCCTGTTGATGTATTCGTTGCTTTGCAGCGACTGGTTATAGGCCTGCGAGCCCTGA
+TATTGCGACGACGTCATGACATGCTCCCTGGGTCCGGTTTCACGCCTTGGGGCGCCCGGCTATGGAAAAC
+GGGGCCGCGGCCTACGGACAGGCCGCAGCGATTGTCAGAATGTCGGTGGGATGCGCGCGATCAGTTGTGC
+GCGCCGGGCTCGAAAATCATGTAGAGGGGGCCCTGGCTGCCGGAATCCCATGTCAACTTGGTCGAGTTGC
+ACAGGTGCCCGGTCGAGCAGATGTAGGTGTCGGGCGAGGCGTTGTCGATTTCGATATGGTTCGAGCTGAA
+GATCGGATGCGACATGTGCGCCTGCACCGAGCCGGAATAGCCGCCCGCCGAGGCCGAATAGCTCAGGATC
+CAGGTCGAGGTATCGGTGGCGCAGGTATCGCCGCCCGACGACGAGCCTTTTTCCTCGACATAGCCCACGG
+AAACGCAGGAAACGCCTGCCTGGCTGGCCACGACCGAAGCATCGTGGCCGATATCGTTCATGCAATGATC
+CGCGCTGCCACCGGCGGTGAAGCTGAAGGTAATGGGTTGCGCGGGCGTGACCGCGAGATAGACGCAGGCG
+TTCATATTCGCGCCGGCCCCCGCAAGGGCGGCGGTCCCGGTCATGACCATCAATGCGCAACCGGCGGCAA
+GAAATAGCACTCTCATGGGACTCTCCACTTACTGGACGCCGGCCCGAAATCAGTCCGGCGATACAACCAC
+GAGTTGCATTCCGCTTCGATTCGCACAACAATTATTCGTGAAGTGCGGCGGCTCTGTTGCACAATTCGGG
+TAAAAGGCGTGCTTCCCCTTTCCCCGGACGGACCTATCCTTTGGCCTCTGTTATGGGCGTGCCGAGTGCG
+GTGAAGCCGTTGAGGACGGCAACCCTGACCTGGAATTCGGCGACCTGACGGTCGAACTCGCGCGCGGAGA
+GGCGCTGGCTCAAGAGCTTGGCGCGGTGCATCTTGGTCTCAGCGCAGCTTCTGCGGTGATACCCGCTCCA
+TCGTCGCCAGATGGTCCTGCCGAGCCGATTCGAGGTCCGCAGGATCTCGTTGCGGGCCATGGCCCCAGCG
+GTGTCGGGCTTCCATGGTTCGGCGTTCTTGCGCGGTGGGATGACGCAATCGGCACCGCCGAGATCGTCCG
+CGCCACCTGACGTCAGGGGAACAGGCAGTCACGCCTCTAGGTGACTTTCTGCAACCACGCGGTTGTCGCT
+GGGCGTGAGATTGCCCTAAATTGGCTTTGAAGTGCAGTAACTCGTAGAATCTCCAACTTGGGGGAGATGG
+ATTGTTATACTACAGGATGCACATGAAGATGGCGGAGATGTTTTCTTCGCTCAAAATTTACGGCACATTC
+AGGCCTGAGGATGGGGTTTATGTAATTCTCATTCCTGGCACAATTGGAATCGCAGTTATCGGGATAATCA
+GCTCATTCATTTTTGTGCCAAGAGGGCTGCAATTTCTGTTACTTCCGCCATTCCCCGCAGGCGCTGCCAT
+TTACCTGTTTATGTGCCACAGGAAAGCGAACCGGAAGTGAAATCATGGCAACCAGTTCTGTGACCGGTTG
+GTTGGCGTTCAGGCCGATCGACAAATTTTAACGTTCAACCCTCGAAATAGAGCCGCCTCATCTCAAGTCC
+GGTCGGATCCATACGTTGATGAACCCCGTATCCAGCGCAACGAATGGTTCGAGTTCAATTTCAATGCGCG
+AAGCCTCCCAGCAACCAAGATAATGGAATATAAGCTTGTTCTGACGGTGCAGCGCCGTCGAAACTTCCGA
+TCCATTGATTAATACGATCGCGACATTATTCTCCGGCACGTTCGTTTTGTCACTTACGTCGACGCCGTAC
+TCCTTGAGCGAACGATCGACGCGGGTGTACTGGCCCACGACGCAGATCGTGCCGGTTTCGGACAGACGAA
+CTCTGGTTGCCCCCGCCTCCGCCTCCGTCGCCAGCCAGTCGAGGAGAGCCGCGGCCGAAGTCATTTTGGG
+CGCGGTGACCTGCGCGTGCGCAGCCAGCGGGAATATGCCGCCCGCTACAACGGCGGCACAACAGCACTTT
+ATCAAATGGCGCAACCGAGACCTTTCCCCACATGCCATCACATCATCTTCCGCCGTGAGAGCTCGGCTCA
+ACCACCTGGCCAGCCATCGTGGCATATAGTTCATTGGGATCCTCGCACGAAAATGCCGCCGACCACGCCG
+AAGTCAAGGCGCTTGACGAGCTTGTGGGTTTGGCCGGATCGTTACCCGAGGTCGCATGGAGAATGATCTC
+GCGGGCACCTCTTCTGACCGCTCCTGCCAGCATGTCGTAACGGCGGGCGAGGTGTGCCATCTTCTCGGCC
+CGCGCCTCGCTCTCCTCCTGCCGGTCGATCCGCACCATCTCGTTGATGGAACGCTGGACGTCGGCTTCGA
+GGTGCGCAAGCCGGCTGGCGATCTTGCCCTTGGTGAAGTTGCAGTCGCGGTTGTTGAACGCCTTGAACTT
+GCTCCCGTCGATGGCAACGCAGTCGCCCTTCAGCACGCCGATCCGGCAGCAGAGCTCGATGAATTGCGCG
+CAGGTCTTGCGGATGGCAACGGCGTTGTCGCGCCGGAAGTCGGCGATGGTCTTGTGGTCGGGCACATCAC
+TTCGACGTTCCAGCCAGCCTCCCGCTCCAGGCGGCGGCTCGACGGGATACGGTTGAGGTATCAATATATG
+AACAGCTTGAGCAAAACTGCCGGGTGATACCCCGGCCGACCGGTGCGTGCCGTAGCCGATCGGACGAAGC
+CGAGCGAAGGAAGTTCCAACTCCCCGACGAAAAGATCGACGACACGGGCGAGGGCGTCCTCGCTGATCCA
+ATCCTCAAGCCGGTCCGGGAACAGCAACGTCTGGCTGCGCTCGACCCCCTCGATGAATCCCGCCATCCCG
+AACCCCTGTCGACCTCGGAAAGTCTACCACACACAGGAGTTTCCACACAGCCTCGGCCGGCCTTGCCTAG
+CGTCCTGCTTGCCGGCCCCCACATCGCGCCGGTGTATCGACCCAGCGGAATCTGCACAGGTCAATCCGCT
+AAGGCGAATGATTAAGCGGGAGTGTTCATGTCCAGCGCCAGATGCGGGCGGCGATAAGGATTTGGGATCC
+GCATCAAATGTCCTCCAGCACCATTGAGGTATCCGCGCCCGCGCCGCCTCCCAACCGACAATTAATTGGC
+GCGTTGATCTGCCTCGGCGGCGCCAATGGTTCTCAGCGTTTCACCCAGCTCAGGAGCTGAAAAGTAGTAT
+TCGGATGAAAGGCGGAATGCCGTGACCCAAGGCTGCGGCTTATGATATATGAAATCGAACCTGATATTCT
+CATCGGGTGCGCTTAACTTAGAAAGCGAAATGTCCGCTGGAATTACAAAGCATGTTTGATATGCGTAAAC
+GTGGAATTCGTATCCCACATGGCAGGCCTGCGCTCTTGGTCCAGAAAAGTTAAGGTGTGCCTCTGCAACG
+CGTTCCGAGAAATAGCCGGAGTGCGAAAAAACTCTTTGATCCGCTTTTCGCGCAAGAAAATGATCCAGCG
+CCACCAAGAATGGGGAGGCAATCAGCATCGTGATTGCGATTTGTTTTGTGGTCGGCGCTGAAAGATTAAT
+CATTCATGCGACCGCAAAGATAACATGTTAATCGGGGGTGTGTTCTCCTAAGGTGACAAAACTGTTGTTT
+GGGCCTCAAGGATTCCTTGCGGAGCAGGTGCAGCGGATCGGCGAAGCCTTCGATCCGCGCCTCACGGATG
+CGACATAACCGGCTCGGCGAGAAGGGCGAGGCGCCCGCGGCGCCGGGACGAGAGGGTATCATGGCTCCGG
+TCACCTCCGCTTGCGGACGGAACTGGAGCCGTGGACCGGCAACGCCGGGGTCACGCCCAGATCCCTCGAG
+GCCAATGCCGCGCGGGTTCTCTCCGGGCAATCCGGCGAGGTAAGCCGCGACCTGCGACCGCGATATATCG
+GCGAGCCTGCGATCGAGCTTTGCCAGTTCATCCGTGAGGCGGGCGCGCAGCCGCTCGCAAGGATGGAACG
+TCGGCTCGGGGCTGATGATGCAGGGCAGCAGGTCGCGCATTGCCTCGACCGTGAGCCCGGCATCGGCCAG
+TTGTCGGATCATGCAAGCCTGCTCCAGATCAGCGGGGCTACCCGCGAGCTTCTCGGCTGGCACCTGTCGC
+GCTCGGGCAAGGCCTCCACGGCCGCGAGCCCGCTGGAACATGCGCTGATCAACCGGTTCGGCACACTCGG
+CCGTCCTCGGCACGACAGGGCACGACCGGACAGCTCAGCGCATAGTCGTCCTTGGAGGGCGGCTGCGTGG
+CGGTCATGAGACCCTGCATTCCGGTGCCCGCCGTCACCATGTCGGTCGCGGTGCCGCCGGTCACGCAACC
+GGAGAGCGTCAGCGCCGCCGCCAGAGCGGTTACGGTCTTAGCGATCTTCGTCATTCCTTAACCTTACTCG
+TTGATTTTATTACATAATTATCATTATCGGCTCGACGGTTGTAAGCGCAAAGTAGAATTGTCGCATCCAA
+GCAAAGTAGAACTGTCGCCTCTTCCTGTCGGGACAATGGAGGATCGGCGGCATGGGATGGGTGCTGATGA
+GCGAGCGCGAACTGAACCGCATCGAGATCCTGTCGAAGGTGCTCGATCGGAGGATGACGACGACGGAAGC
+CTCGGTTCTGCTGGCGATCGGCCCGCGTCAGGTGCAGCGTCTGCTGCGACGGTTGCGCGAGGACGGCGCG
+GCGGCAACGCGGCACGGGTTGCGCGGGCGACCGTCGAACCACCGCCTCTCGCCGGGATTGCGGGACCTTG
+CGCTGGCCCTCGTGCGGGAGACCTACGTCGATTTCGGCCCCACGCTCGCGGCCGAGAAGCTGGCCGAGCG
+CGACGGCCTGCATGTGTCGCGGGAGACGCTGCGGAAGTGGATGGTCGAGGATGGGCTCTGGCTGTCGCGT
+CCTCAGCGCCGGAGGTTTCACCAGCCGCGGCTGCGGCGCGAGCACCTGGGCGAACTGGTTCAGATAGACG
+GGTCCGATCATCATTGGTTCGAGGATCGCGCACCAGCCTGCACGCTGCTCGTCTTCATCGACGACGCGAC
+GAGCCGGCTGATGGAGATGCGCTTCGTGCCCTCCGAGAGCACCTTCGCCTATTTCGCGGCGCTGGAGTGC
+TACCTGACGCGGCACGGCAGGCCCACGGCTTTCTACTCCGACAAGCATTCGGTCTTCCGCGTGGCGAGGC
+AGGACGCGCGGACCGGCCATGGCATGACGCAGTTCGGCCGGGCGCTGGCCGAGTTGAACATCGAGATCCT
+CTGCGCCAACTCCTCGCAGGCCAAGGGCCGGGTCGAGCGGGCGAACCGCACCTTGCAGGACCGGCTGGTC
+AAGGAGATGCGGCTTGGGCAGGGCATTCCAGCGACATGGGAGGGCCGGGAACGCCTTCCTGCCCGGCTTC
+ATCGAGCGGCACAACGCGCAGTTCGCCGGACGATCCCGGCCGTACCGAGGGCCGAGAAGCGGTTCGTCAG
+CGCGATACGGATATGGATTTCAGCGGCCCGGCGGTCCGGTCATCAACCGCTCAACGCCTTCGGCACGGCC
+GGGATCGTCCGCGGGGCGTGAAGTCGAAGGGGGAAGGGGCGAGCGTGCCTCAAGCCGCTGTTGTGCAACA
+ACGCCGGTCCGGGTCGGAGCCCGGCCGGGTGCGGAGCGGCTGCAACGGACCGTGCCATAAAGGCCACGCC
+ACGGGGCTATTCGCGGGATCTGCCGGGCGCTCTTGTCTTGCCGTCCCCCGGGGCCTACCTTCGCCGCATG
+TTGACGCTCCTTCATATGGCCGGAGTCCGGGCCTTCTGCGGTTCGCCGCTCACGCATGCTCTGCCCCGGG
+CAGAGGCGGTCAACCGCTGACGCCTCTTCCCGGGGCGCGTCGTCTTCCCAGATCCGGATCTGCCAGGCGG
+ACATCGTCCGCAAGGAGCCCTCATGCTTCCCCGTCCGAAATCCCGGCGCCCGAGGGCGCGGGGCGCGTCC
+TGCATGGGTCCGGCCCCGCGCCGGGCCGGAATGCCCGGGCCGCGCTGACCGGCTGAGGCGCGCGGCCTGA
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/DownloadManager.java b/ngs-java/gov/nih/nlm/ncbi/ngs/DownloadManager.java
new file mode 100644
index 0000000..3081b89
--- /dev/null
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/DownloadManager.java
@@ -0,0 +1,143 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ==============================================================================
+*
+*/
+
+
+package gov.nih.nlm.ncbi.ngs;
+
+class DownloadManager {
+    enum DownloadResult {
+        SUCCESS,
+        FAILED,
+        UNSUPPORTED_OS
+    }
+
+    DownloadManager(LMProperties properties) {
+        this.properties = properties;
+    }
+
+    String getLatestVersion(String libname) {
+        Logger.finest(
+                ">> Checking the latest version of " + libname + " library...");
+
+        String request = "cmd=vers&libname=" + libname;
+
+        for (SratoolkitCgis cgis = new SratoolkitCgis(properties); ; ) {
+            String spec = cgis.nextSpec();
+            if (spec == null) {
+                break;
+            }
+
+            try {
+                String latest = HttpManager.post(spec, request);
+                latest = latest.trim();
+                Logger.info
+                        ("The latest version of " + libname + " = " + latest);
+                return latest;
+            } catch (HttpException e) {
+                Logger.finest(e);
+            }
+        }
+
+        Logger.info("Cannot check the latest version of " + libname);
+        return null;
+    }
+
+    /** Fetches the library from NCBI and writes it using fileCreator */
+    DownloadResult downloadLib(FileCreator fileCreator, String libname, Version version) {
+        String request = "cmd=lib&version=1.0&libname=" + libname;
+
+        try {
+            request += "&" + osProperties();
+        } catch (Exception e) {
+            Logger.warning("Cannot download library: " + e.getMessage());
+            return DownloadResult.FAILED;
+        }
+
+        for (SratoolkitCgis cgis = new SratoolkitCgis(properties); ; ) {
+            String spec = cgis.nextSpec();
+            if (spec == null) {
+                break;
+            }
+            int code = HttpManager.post(spec, request, fileCreator, libname);
+            if (code == 200) {
+                return DownloadResult.SUCCESS;
+            } else if (code == 412) {
+                Logger.warning("Cannot download library: " + code);
+                return DownloadResult.UNSUPPORTED_OS;
+            } else {
+                Logger.warning("Cannot download library: " + code);
+            }
+        }
+        return DownloadResult.FAILED;
+    }
+
+    private String osProperties()
+            throws Exception
+    {
+        String request = "os_name=";
+        String name = System.getProperty("os.name");
+        if (name == null) {
+            throw new Exception("Cannot detect OS");
+        }
+        request += name + "&bits=" + LibManager.detectJVM().intString();
+        String arch = System.getProperty("os.arch");
+        if (arch != null) {
+            request += "&os_arch=" + arch;
+        }
+        String version = System.getProperty("os.version");
+        if (version != null) {
+            request += "&os_version=" + version;
+        }
+        return request;
+    }
+
+    private  static class SratoolkitCgis {
+        private SratoolkitCgis(LMProperties properties) {
+            spec = properties.getProperty("/servers/sratookit-cgi");
+            if (spec != null) {
+                Logger.warning("Use " + spec + " from " + properties.cfgFilePath());
+            } else {
+                spec = "http://trace.ncbi.nlm.nih.gov/Traces/sratoolkit/sratoolkit.cgi";
+            }
+
+            done = false;
+        }
+
+        private String nextSpec() {
+            if (!done) {
+                done = true;
+                return spec;
+            } else {
+                return null;
+            }
+        }
+
+        private String spec;
+        private boolean done;
+    }
+
+    private LMProperties properties;
+}
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/LMProperties.java b/ngs-java/gov/nih/nlm/ncbi/ngs/LMProperties.java
new file mode 100644
index 0000000..6f1ef5e
--- /dev/null
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/LMProperties.java
@@ -0,0 +1,202 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ==============================================================================
+*
+*/
+
+
+package gov.nih.nlm.ncbi.ngs;
+
+
+import java.util.Date;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+class LMProperties extends java.util.Properties {
+    LMProperties(String bitsStr, Map<String, String> libraryVersions) {
+        bits = bitsStr;
+        path = LibPathIterator.ncbiHome();
+
+        if (path != null) {
+            path += LibPathIterator.fileSeparator() + "LibManager.properties";
+
+            try {
+                FileInputStream inStream = new FileInputStream(path);
+                load(inStream);
+                inStream.close();
+            } catch (IOException e) {}
+        }
+    }
+
+    public Object setProperty(String key, String value) {
+        String saved = getProperty(key);
+        if (saved != null && saved.equals(value)) {
+            return saved;
+        } else {
+            dirty = true;
+            return super.setProperty(key, value);
+        }
+    }
+
+    String get(String libname) {
+        return get(libname, Logger.Level.FINE);
+    }
+
+    String cfgFilePath() {
+        return path;
+    }
+
+    void setLastSearch(String libname) {
+        setProperty(getLibRoot(libname) + "last-search", Long.toString(new Date().getTime()));
+    }
+
+    Date getLastSeach(String libname) {
+        String dateLong = getProperty(getLibRoot(libname) + "last-search");
+        if (dateLong == null) {
+            return null;
+        }
+
+        return new Date(Long.valueOf(dateLong));
+    }
+
+    void setLatestVersion(String libname, String version) {
+        String node = getLibRoot(libname);
+        setProperty(node + "latest-version/value", version);
+        setProperty(node + "latest-version/updated", Long.toString(new Date().getTime()));
+    }
+
+    String getLatestVersion(String libname, long cacheTrustInterval) {
+        String node = getLibRoot(libname);
+        String version = getProperty(node + "latest-version/value");
+        String dateLong = getProperty(node + "latest-version/updated");
+        if (dateLong == null || version == null) {
+            return null;
+        }
+
+        if (new Date().getTime() - Long.valueOf(dateLong) > cacheTrustInterval) {
+            remove(node + "latest-version/value");
+            remove(node + "latest-version/updated");
+            return null;
+        }
+
+        return version;
+    }
+
+    void notLoaded(String libname) {
+        String node = getLibRoot(libname);
+        remove(node + "loaded/path");
+        remove(node + "loaded/version");
+        remove(node + "last-search");
+        dirty = true;
+    }
+
+    void loaded(String libname, String version, String path)
+    {   set(libname, "loaded", version, path); }
+
+    void saved(String libname, String version, String path)
+    {   set(libname, "saved", version, path); }
+
+    void store() {
+        try {
+            if (!dirty) {
+                return;
+            }
+
+            File file = new File(cfgFilePath());
+            File parent = file.getParentFile();
+            if (parent == null) {
+                Logger.finest
+                        ("Cannot find parent directory to store properties");
+                return;
+            } else if (!parent.exists()) {
+                if (!parent.mkdir()) {
+                    Logger.finest("Cannot create " + parent.getName());
+                    return;
+                }
+                parent.setExecutable(false, false);
+                parent.setReadable(false, false);
+                parent.setWritable(false, false);
+                parent.setExecutable(true, true);
+                parent.setReadable(true, true);
+                parent.setWritable(true, true);
+            }
+            FileOutputStream fileOut = new FileOutputStream(file);
+            store(fileOut, null);
+            fileOut.close();
+
+            dirty = false;
+        } catch (IOException e) {
+            Logger.finest(e);
+        }
+    }
+
+////////////////////////////////////////////////////////////////////////////////
+
+    private void set(String libname, String name, String version,
+                     String path)
+    {
+        String node = getLibRoot(libname) + name +"/";
+
+        setProperty(node + "path"   , path);
+        setProperty(node + "version", version);
+    }
+
+    private String get(String libname, Logger.Level level) {
+        String path = get(libname, "loaded", level);
+        if (path == null) {
+            path = get(libname, "saved", level);
+        }
+        return path;
+    }
+
+    private String get
+            (String libname, String name, Logger.Level level)
+    {
+        String node = getLibRoot(libname) + name +"/";
+        String version = getProperty(node + "version");
+        if (version != null) {
+            String path = getProperty(node + "path");
+            if (path != null) {
+                Logger.log(level, "The version of the most recently"
+                        + " loaded " + libname + " = " + version);
+                return path;
+            } else {
+                remove(node + "version");
+                dirty = true;
+            }
+        }
+        return null;
+    }
+
+    private String getLibRoot(String libname) {
+        return "/dll/" + libname + "/" + bits +"/";
+    }
+
+    private String path;
+    private String bits;
+    private boolean dirty;
+}
diff --git a/ngs-sdk/language/python/py_PileupIteratorItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/LibDependencies.java
similarity index 83%
copy from ngs-sdk/language/python/py_PileupIteratorItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/LibDependencies.java
index 2116522..b11b91e 100644
--- a/ngs-sdk/language/python/py_PileupIteratorItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/LibDependencies.java
@@ -24,9 +24,11 @@
 *
 */
 
-#include "py_PileupIteratorItf.h"
-#include "py_ErrorMsg.hpp"
+package gov.nih.nlm.ncbi.ngs;
 
-#include <ngs/itf/PileupItf.hpp>
-
-GEN_PY_ITERATOR_NEXT ( Pileup )
+class LibDependencies {
+    final static String NGS_SDK  = "ngs-sdk";
+    final static String NCBI_VDB = "ncbi-vdb";
+    final static String NGS_SDK_VERSION = "1.2.4";
+    final static String NCBI_VDB_VERSION = "2.6.2";
+}
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/LibManager.java b/ngs-java/gov/nih/nlm/ncbi/ngs/LibManager.java
index d2c0db2..d40fff8 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/LibManager.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/LibManager.java
@@ -28,18 +28,30 @@
 package gov.nih.nlm.ncbi.ngs;
 
 
+import gov.nih.nlm.ncbi.ngs.error.LibraryIncompatibleVersionError;
+import gov.nih.nlm.ncbi.ngs.error.LibraryLoadError;
+import gov.nih.nlm.ncbi.ngs.error.LibraryNotFoundError;
+import gov.nih.nlm.ncbi.ngs.error.cause.ConnectionProblemCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.DownloadDisabledCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.InvalidLibraryCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.JvmErrorCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.LibraryLoadCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.OutdatedJarCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.PrereleaseReqLibCause;
+import gov.nih.nlm.ncbi.ngs.error.cause.UnsupportedArchCause;
+
 import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.Vector;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 
 /** This class is responsible for JNI dynamic library load
@@ -50,29 +62,41 @@ class LibManager implements FileCreator
     /** Force it in force-majeure situations.
         It also could be set without recompiling
         by setting vdb.System.loadLibrary java system property */
-    private static boolean JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY = false;
+    private boolean JUST_DO_SIMPLE_LOAD_LIBRARY = false;
+
+    /**
+     * Will search for latest library version among all installed
+     */
+    private boolean SEARCH_FOR_LIBRARY = true;
+
+    /**
+     * Will check what is the latest version available online
+     */
+    private boolean AUTO_DOWNLOAD = true;
+
+    /**
+     * How often search for a latest installed library
+     */
+    private static final long SEARCH_LIB_FREQUENCY_INTERVAL = 7 * 24 * 60 * 60 * 1000;
+
+    /**
+     * How long we will trust latest version in cache before asking server
+     */
+    private static final long CACHE_LATEST_VERSION_INTERVAL = 7 * 24 * 60 * 60 * 1000;
 
 
     /** Possible location to search for library to load.
         The order of enum elements defines library location search order. */
     enum Location
     {
-/*KNOWN_PATH should be the first entry here
-   if you want it to be loaded right after download.
-   Otherwise the manager will try to the search previous location entries first.
-   May be you want it to test something (e.g. a bad library file).
-  And LATEST_PATH should be before KNOWN_PATH: it makes sure
-   you will first download the latest version from NCBI if it was released */
-        LATEST_PATH,   /* path to the latest version of the library:
-                                  found in the system or downloaded from NCBI */
-        KNOWN_PATH,    // from config or file downloaded from NCBI
-        CFG,           // from ~/.ncbi/LibManager.properties
+        CACHE,        // from ~/.ncbi/LibManager.properties
         NCBI_HOME,     // ~/.ncbi/lib64|32
         LIBPATH,       // iterate "java.library.path" - extended LD_LIBRARY_PATH
         NCBI_NGS_JAR_DIR, // directory where ncbi-ngs.jar is
         CLASSPATH,     // iterate "java.class.path" - where java classes are
         CWD,           // "."
-        TMP            // Temporary folder
+        TMP,            // Temporary folder
+        DOWNLOAD
     }
 
 
@@ -81,281 +105,127 @@ class LibManager implements FileCreator
         b64,
         bUNKNOWN;
 
-        private String intString()
+        String intString()
         {   switch (this) { case b32: return "32"; default: return "64";} }
     }
 
+    private class LibSearchResult {
+        // will be true only if found version is compatible and higher or equal to minimal version
+        boolean versionFits = false;
+        Location location = null;
+        String path = null;
+        Version version = null;
+        LibraryLoadCause failCause = null;
+    }
 
-////////////////////////////////////////////////////////////////////////////////
-
-
-    private class SratoolkitCgis {
-        private SratoolkitCgis() {
-            LMProperties properties = new LMProperties();
+    private class LibDownloadResult {
+        String savedPath = null;
+        DownloadManager.DownloadResult status;
+    }
 
-            spec = properties.getProperty("/servers/sratookit-cgi");
-            if (spec != null) {
-              Logger.warning
-               ("Use " + spec + " from " + properties.cfgFilePath());
-            } else {
-              spec =
-               "http://trace.ncbi.nlm.nih.gov/Traces/sratoolkit/sratoolkit.cgi";
-            }
+////////////////////// TODO check out of space condition ///////////////////////
 
-            done = false;
+    LibManager ( String [] libs, String [] versions )
+    {
+        if (versions == null || libs == null) {
+            throw new RuntimeException("Neither libs nor versions can be null");
         }
 
-        private String nextSpec() {
-            if (!done) {
-                done = true;
-                return spec;
-            } else {
-                return null;
-            }
+        if (versions.length != libs.length) {
+            throw new RuntimeException("Invalid library versions: must match number of libraries");
         }
 
-        private String spec;
-        private boolean done;
-    }
-
-
-////////////////////////////////////////////////////////////////////////////////
-
+        checkSystemProperties();
+        locations = generateLocations();
 
-    private class Latest extends HashMap<String, String> {
-        private String get(String libname) {
-            String value = super.get(libname);
-            if (value == null) {
-                value = latest(libname);
-                if (value != null) {
-                    put(libname, value);
-                }
-                return value;
-            } else {
-                return value;
-            }
+        for (int i = 0; i < libs.length; ++i) {
+            libraryVersions.put(libs[i], versions[i]);
         }
 
-        private String latest(String libname) {
-            Logger.finest(
-                ">> Checking the latest version of " + libname + " library...");
-
-            String request = "cmd=vers&libname=" + libname;
-
-            for (SratoolkitCgis cgis = new SratoolkitCgis(); ; ) {
-                String spec = cgis.nextSpec();
-                if (spec == null) {
-                    break;
-                }
+        properties = new LMProperties(detectJVM().intString(), libraryVersions);
+        if (AUTO_DOWNLOAD) {
+            downloadManager = new DownloadManager(properties);
+        }
 
-                try {
-                    String latest = HttpManager.post(spec, request);
-                    latest = latest.trim();
-                    Logger.info
-                        ("The latest version of " + libname + " = " + latest);
-                    return latest;
-                } catch (HttpException e) {
-                    Logger.finest(e);
-                }
+        if (!JUST_DO_SIMPLE_LOAD_LIBRARY && System.getProperty("vdb.deleteLibraries") != null) {
+            /* make sure we have the latest version of ngs-sdk & ncbi-vdb dll-s */
+            for (String libname : libs) {
+                Logger.warning( "Deleting all JNI libraries...");
+                LibPathIterator.deleteLibraries(this, libname);
             }
-
-            Logger.info("Cannot check the latest version of " + libname);
-            return null;
         }
     }
 
-
-////////////////////////////////////////////////////////////////////////////////
-
-
-    private class LMProperties extends java.util.Properties {
-        private LMProperties() {
-            bits = DetectJVM().intString();
-
-            path = LibPathIterator.ncbiHome();
-
-            if (path != null) {
-                path +=
-                    LibPathIterator.fileSeparator() + "LibManager.properties";
-
-                try {
-                    FileInputStream inStream = new FileInputStream(path);
-                    load(inStream);
-                    inStream.close();
-                } catch (IOException e) {}
-            }
+    private void checkSystemProperties() {
+        String loadLibraryProperty = System.getProperty("vdb.System.loadLibrary");
+        if (loadLibraryProperty != null && loadLibraryProperty.equals("1")) {
+            Logger.warning ( "Smart DLL search and library download was disabled" );
+            JUST_DO_SIMPLE_LOAD_LIBRARY = true;
+            AUTO_DOWNLOAD = false;
+            SEARCH_FOR_LIBRARY = false;
+            return;
         }
 
-        public Object setProperty(String key, String value) {
-            String saved = getProperty(key);
-            if (saved != null && saved.equals(value)) {
-                return saved;
-            } else {
-                dirty = true;
-                return super.setProperty(key, value);
-            }
+        String noLibraryDownload = System.getProperty("vdb.System.noLibraryDownload");
+        if (noLibraryDownload != null && noLibraryDownload.equals("1")) {
+            Logger.warning ( "DLL download was disabled" );
+            AUTO_DOWNLOAD = false;
         }
 
-        private String get(String libname, String latest)
-        {   return get(libname, latest, Logger.Level.FINE); }
-
-        private String getLoud(String libname, String latest)
-        {   return get(libname, latest, Logger.Level.INFO); }
-
-        private String cfgFilePath() { return path; }
-
-        private void notLoaded(String libname) {
-            String node = "/dll/" + libname + "/" + bits + "/loaded/";
-            remove(node + "path");
-            remove(node + "version");
-            dirty = true;
+        String noLibrarySearch = System.getProperty("vdb.System.noLibrarySearch");
+        if (noLibrarySearch != null && noLibrarySearch.equals("1")) {
+            Logger.warning ( "Search of installed DLL was disabled" );
+            SEARCH_FOR_LIBRARY = false;
         }
+    }
 
-        private void loaded(String libname, String version, String path)
-        {   set(libname, "loaded", version, path); }
-
-        private void saved(String libname, String version, String path)
-        {   set(libname, "saved", version, path); }
+    private Location[] generateLocations() {
+        Location[] allLocations = Location.values();
+        Location[] result;
+        Set<Location> disabledLocations = new TreeSet<Location>();
+        if (JUST_DO_SIMPLE_LOAD_LIBRARY) {
+            disabledLocations.addAll(Arrays.asList(allLocations));
+            disabledLocations.remove(Location.LIBPATH);
+        }
 
-        private void store() {
-            try {
-                if (!dirty) {
-                    return;
-                }
+        if (!AUTO_DOWNLOAD) {
+            disabledLocations.add(Location.DOWNLOAD);
+        }
 
-                File file = new File(cfgFilePath());
-                File parent = file.getParentFile();
-                if (parent == null) {
-                    Logger.finest
-                        ("Cannot find parent directory to store properties");
-                    return;
-                } else if (!parent.exists()) {
-                    if (!parent.mkdir()) {
-                        Logger.finest("Cannot create " + parent.getName());
-                        return;
-                    }
-                    parent.setExecutable(false, false);
-                    parent.setReadable(false, false);
-                    parent.setWritable(false, false);
-                    parent.setExecutable(true, true);
-                    parent.setReadable(true, true);
-                    parent.setWritable(true, true);
+        if (!SEARCH_FOR_LIBRARY) {
+            // disable everything except cache, libpath and download
+            Set<Location> allowedLocations = new TreeSet<Location>(Arrays.asList(new Location[] {
+                    Location.CACHE, Location.LIBPATH, Location.DOWNLOAD
+            }));
+            for (Location location : allLocations) {
+                if (!allowedLocations.contains(location)) {
+                    disabledLocations.add(location);
                 }
-                FileOutputStream fileOut = new FileOutputStream(file);
-                store(fileOut, null);
-                fileOut.close();
-
-                dirty = false;
-            } catch (IOException e) {
-                Logger.finest(e);
             }
         }
 
-////////////////////////////////////////////////////////////////////////////////
-
-        private void set(String libname, String name, String version,
-                         String path)
-        {
-            String node = "/dll/" + libname + "/" + bits + "/" + name +"/";
-
-            setProperty(node + "path"   , path);
-            setProperty(node + "version", version);
+        if (disabledLocations.size() > 0) {
+            Logger.info("Disabled locations: " + Arrays.toString(disabledLocations.toArray()));
         }
 
-        private String get(String libname, String latest, Logger.Level level) {
-            String path = get(libname, "loaded", latest, level);
-            if (path == null) {
-                   path = get(libname, "saved" , latest, level);
+        result = new Location[allLocations.length - disabledLocations.size()];
+        int i = 0;
+        for (Location location : allLocations) {
+            if (disabledLocations.contains(location)) {
+                continue;
             }
-            return path;
-        }
 
-        private String get
-            (String libname, String name, String latest, Logger.Level level)
-        {
-            String node = "/dll/" + libname + "/" + bits + "/" + name +"/";
-            String version = getProperty(node + "version");
-            if (version != null) {
-                String path = getProperty(node + "path");
-                if (path != null) {
-                    File f = new File(path);
-                    if (f.exists() &&
-                        new Version(version).compareTo(new Version(latest)) < 0)
-                    {
-                        remove(node + "path");
-                        remove(node + "version");
-                        dirty = true;
-                    } else {//new Exception().printStackTrace();
-                        Logger.log(level, "The version of the most recently"
-                            + " loaded " + libname + " = " + version);
-                        return path;
-                    }
-                } else {
-                    remove(node + "version");
-                    dirty = true;
-                }
-            }
-            return null;
+            result[i++] = location;
         }
 
-        private String path;
-        private String bits;
-        private boolean dirty;
-    }
-
-
-////////////////////// TODO check out of space condition ///////////////////////
-
-
-    LibManager ()
-    {
-        this ( null, null );
-    }
-
+        assert i == result.length;
 
-    LibManager ( String [] libs )
-    {
-        this ( null, libs );
+        return result;
     }
 
-    private LibManager ( Location [] locations, String [] libs )
+    Location[] locations()
     {
-        properties = new LMProperties();
-
-        latest         = new Latest();
-        latestLibPaths = new HashMap<String, String>();
-
-//      if (locations == null) locations = getLocationProperty ();
-
-        if (locations != null)
-            this.location = locations;
-        else
-            this.location = Location.values ();
-
-        if (System.getProperty("vdb.System.loadLibrary") != null)
-        {
-            Logger.warning ( "Smart DLL search was disabled" );
-            JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY = true;
-        }
-
-        if (JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY || libs == null) {
-            return;
-        }
-
-        boolean delete = System.getProperty("vdb.deleteLibraries") != null;
-        /* make sure we have the latest version of ngs-sdk & ncbi-vdb dll-s */
-        for (String libname : libs) {
-            if (delete) {
-                Logger.warning( "Deleting all JNI libraries...");
-                LibPathIterator.deleteLibraries(this, libname);
-            } else {
-                launchLibCheck(libname);
-            }
-        }
-
-        if (! delete) {
-            properties.store();
-        }
+        return locations;
     }
 
 
@@ -364,8 +234,7 @@ class LibManager implements FileCreator
 
     /** Creates a file by finding directory by iterating the location array
         and using libname to generate the file name */
-    public BufferedOutputStream create ( String libname )
-    {
+    public BufferedOutputStream create ( String libname ) {
         createdFileName = null;
         for (int i = 0; i < 2; ++i) {
             Location location = null;
@@ -428,7 +297,6 @@ or pathname not found and its directory is not writable */
                     continue;
                 }
 
-                updateKnownLibPath(pathname);
                 createdFileName = pathname;
 
                 Logger.fine("Opened " + pathname);
@@ -439,57 +307,107 @@ or pathname not found and its directory is not writable */
     }
 
 
-    public void done(boolean success)
-    {   if (!success) { createdFileName = null; } }
+    public void done(boolean success) {
+        if (!success) {
+            createdFileName = null;
+        }
+    }
 
 
 ////////////////////////////////////////////////////////////////////////////////
 
 
-    /** Loads the system library by finding it by iterating the location array.
-        Try to download it from NCBI if not found. */
-    boolean loadLibrary( String libname )
-    {
-        boolean ok = false;
+    /**
+     * Loads the system library by finding it by iterating the location array.
+     *   Try to download it from NCBI if not found.
+     *
+     * Will throw LibraryLoadError when failed.
+     */
+    void loadLibrary( String libname ) {
+        Version requiredVersion = getRequiredVersion(libname);
+        boolean updateCache = Arrays.asList(locations).contains(Location.CACHE);
 
-        Logger.fine("Loading " + libname + " library...");
-        if (load(libname) != null) {
-            Logger.fine("Loaded " + libname + " library");
-            ok = true;
-        } else {
-            Logger.warning("Failed to load " + libname + " library");
-            if (! JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY) {
-/* Here we try do download the library from NCBI always
-   when we were not able to System.load Library it. */
+        Logger.fine("Searching for " + libname + " library...");
+        try {
+            LibSearchResult searchResult = searchLibrary(libname, requiredVersion);
 
-                Logger.info("Downloading " + libname + " from NCBI...");
-                if (download( libname )) {
-                    Logger.info("Downloaded " + libname + " from NCBI");
-                    Logger.fine("Loading " + libname + " library...");
-                    String path = load(libname);
-                    Logger.fine(path != null ? "Loaded " : "Failed to load "
-                        + libname + " library");
-                    ok = path != null;
+            if (searchResult.path == null) {
+                throw new LibraryNotFoundError(libname, "No installed library was found",
+                        searchResult.failCause);
+            }
+
+            Logger.fine("Found " + libname + " library");
+
+            String libpath = searchResult.path;
+            Logger.info("Loading " + libname + "...");
+            try {
+                if (!mocksEnabled) {
+                    if (libpath.startsWith(libname)) {
+                        System.loadLibrary(libpath);
+                    } else {
+                        System.load(libpath);
+                    }
+                } else if (mockLoadException != null) {
+                    throw mockLoadException;
                 }
-                else {
-                    Logger.warning
-                        ("Failed to download " + libname + " from NCBI");
-                    ok = false;
+            } catch (Throwable e) {
+                if (searchResult.location != Location.DOWNLOAD) {
+                    throw new LibraryLoadError(libname, "Failed to load found library " + libpath,
+                            new JvmErrorCause(e));
                 }
-            }
-        }
 
-        properties.store();
+                throw new LibraryLoadError(libname, "No installed library was found and downloaded library '" + libpath + "' cannot be loaded",
+                        new JvmErrorCause(e),
+                        "Please install ngs and ncbi-vdb manually:" +
+                                " https://github.com/ncbi/ngs/wiki/Downloads" +
+                                " or write to \"sra-tools at ncbi.nlm.nih.gov\" if problems persist");
 
-        return ok;
-    }
+            }
+            Logger.fine("Loaded " + libname + " library");
 
+            Logger.fine("Checking library " + libname + " version...");
+            String v;
+            if (!mocksEnabled) {
+                v = LibVersionChecker.getLoadedVersion(libname);
+            } else {
+                v = mockLoadedLibraryVersion;
+            }
+            if (v == null) {
+                throw new LibraryLoadError(libname, "Failed to retrieve loaded library's version", new InvalidLibraryCause());
+            }
+            Version loadedVersion = new Version(v);
+            if (loadedVersion.compareTo(requiredVersion) < 0 || !loadedVersion.isCompatible(requiredVersion)) {
+                Logger.fine("Library version is not compatible. Required: " + requiredVersion.toSimpleVersion() + " loaded: " + loadedVersion.toSimpleVersion());
+                LibraryLoadCause failCause = searchResult.failCause;
+                if (searchResult.location == Location.DOWNLOAD || failCause == null) {
+                    failCause = (loadedVersion.compareTo(requiredVersion) < 0) ?
+                            new PrereleaseReqLibCause() : new OutdatedJarCause();
+                }
+                throw new LibraryIncompatibleVersionError(libname, "Library is incompatible",
+                        libpath, failCause);
+            }
+            Logger.fine("Library " + libname + " was loaded successfully." +
+                    " Version = " + loadedVersion.toSimpleVersion());
 
-    Location[] locations()
-    {
-        return location;
-    }
+            if (updateCache) {
+                properties.loaded(libname, searchResult.version.toSimpleVersion(), libpath);
 
+                if (searchResult.location != Location.CACHE) {
+                    properties.setLastSearch(libname);
+                }
+            }
+        } catch (LibraryLoadError e) {
+            if (updateCache) {
+                properties.notLoaded(libname);
+            }
+            Logger.warning("Loading of " + libname + " library failed");
+            throw e;
+        } finally {
+            if (updateCache) {
+                properties.store();
+            }
+        }
+    }
 
 //////////////////////////// static package methods ////////////////////////////
 
@@ -528,7 +446,7 @@ or pathname not found and its directory is not writable */
     }
 
 
-    static Bits DetectJVM()
+    static Bits detectJVM()
     {
         final String keys [] = {
             "sun.arch.data.model",
@@ -548,28 +466,6 @@ or pathname not found and its directory is not writable */
         return Bits.bUNKNOWN;
     }
 
-
-    static String osProperties()
-        throws Exception
-    {
-        String request = "os_name=";
-        String name = System.getProperty("os.name");
-        if (name == null) {
-            throw new Exception("Cannot detect OS");
-        }
-        request += name + "&bits=" + DetectJVM().intString();
-        String arch = System.getProperty("os.arch");
-        if (arch != null) {
-            request += "&os_arch=" + arch;
-        }
-        String version = System.getProperty("os.version");
-        if (version != null) {
-            request += "&os_version=" + version;
-        }
-        return request;
-    }
-
-
 //////////////////////////// private static methods ////////////////////////////
 
 
@@ -577,7 +473,7 @@ or pathname not found and its directory is not writable */
     private static String libnameWithDataModel(String libname)
     {
         String m = null;
-        switch (DetectJVM()) {
+        switch (detectJVM()) {
             case b64:
                 m = "-64";
                 break;
@@ -601,7 +497,7 @@ or pathname not found and its directory is not writable */
 
         int n = 0;
         for (int i = 0; i < p.length(); ++i) {
-            if ("CJKLNTW".indexOf(p.charAt(i)) >= 0) {
+            if ("PJCLNTWD".indexOf(p.charAt(i)) >= 0) {
                 ++n;
             }
         }
@@ -614,14 +510,14 @@ or pathname not found and its directory is not writable */
         n = 0;
         for (int i = 0; i < p.length(); ++i) {
             switch (p.charAt(i)) {
-                case 'C':
+                case 'P':
                     locations[n] = Location.CLASSPATH;
                     break;
                 case 'J':
                     locations[n] = Location.NCBI_NGS_JAR_DIR;
                     break;
-                case 'K':
-                    locations[n] = Location.KNOWN_PATH;
+                case 'C':
+                    locations[n] = Location.CACHE;
                     break;
                 case 'L':
                     locations[n] = Location.LIBPATH;
@@ -635,6 +531,9 @@ or pathname not found and its directory is not writable */
                 case 'W':
                     locations[n] = Location.CWD;
                     break;
+                case 'D':
+                    locations[n] = Location.DOWNLOAD;
+                    break;
                 default:
                     continue;
             }
@@ -644,69 +543,21 @@ or pathname not found and its directory is not writable */
         return locations;
     }
 
-
-    private static String current(String libname) {
-        try {
-            if (libname.equals("ncbi-vdb")) {
-                return Manager.getPackageVersion();
-            } else if (libname.equals("ngs-sdk")) {
-                return ngs.Package.getPackageVersion();
-            } else {
-                Logger.warning("It is not known how to check "
-                    + "the version of " + libname + " library");
-                return null;
-            }
-        } catch (ngs.ErrorMsg e) {
-            Logger.finest(e);
-        } catch (UnsatisfiedLinkError e) {
-            Logger.finest(e);
+    private Version checkLibraryVersion(String libname, String libpath, boolean useLoadLibrary) {
+        if (!useLoadLibrary && !fileExists(libpath)) {
+            Logger.finer("File " + libpath + " not found");
+            return null;
         }
-        return "0";
-    }
 
-
-    private boolean systemLoad(String filename, String libname) {
-        if (prepareToLoad(filename)) {
-            Logger.finer("System.load(" + filename + ")...");
-            try {
-                System.load(filename);
-                Logger.fine("Loaded library " + filename);
-                properties.loaded(libname, current(libname), filename);
-                return true;
-            } catch (UnsatisfiedLinkError e) {
-                Logger.fine("error: " + e);
-            } catch (Throwable e) {
-                Logger.warning("Cannot load library: " + e);
-            }
+        Version version = LibVersionChecker.getVersion(libname, libpath, useLoadLibrary);
+        if (version == null) {
+            Logger.fine("Cannot load or get library version: " + libpath);
         }
-        return false;
-    }
-
 
-    private boolean systemLoadLibrary
-        (String libnameWithDataModl, Location l, String libname)
-    {
-// System.loadLibrary is using java.library.path to find the library
-        Logger.finest("java.library.path = "
-            + System.getProperty("java.library.path"));
-        Logger.fine(l + ": System.loadLibrary(" + libnameWithDataModl + ")...");
-        Logger.finest("System.mapLibraryName(" + libnameWithDataModl + ") = "
-            + System.mapLibraryName(libnameWithDataModl));
-        try {
-            System.loadLibrary(libnameWithDataModl);
-            Logger.fine("Loaded library " + libnameWithDataModl);
-            properties.loaded(libname, current(libname), libnameWithDataModl);
-            return true;
-        } catch (UnsatisfiedLinkError e) {
-            Logger.fine("cannot load library: " + e);
-        } catch (Throwable e) {
-            Logger.warning("Cannot load library: " + e);
-        }
-        return false;
+        return version;
     }
 
-
-    private static boolean prepareToLoad(String filename) {
+    private static boolean fileExists(String filename) {
         File file = new File(filename);
         if (file.exists()) {
             return true;
@@ -716,99 +567,107 @@ or pathname not found and its directory is not writable */
         }
     }
 
+////////////////////////////////////////////////////////////////////////////////
 
-    private static void printLoadingMsg(Location l, String libname)
-    {
-        if (l == Location.LIBPATH) {
-            Logger.finer("LoadingLibrary " + libname + "...");
-        } else {
-            Logger.finer("Loading " + libname + " from " + l + "...");
+    private Version getRequiredVersion(String libname) {
+        String minimalVersion = libraryVersions.get(libname);
+        if (minimalVersion == null) {
+            throw new RuntimeException("Library '" + libname + "' version was not specified");
         }
+        return new Version(minimalVersion);
     }
 
+    private Version getLatestVersion(String libname) {
+        if (latestVersions.containsKey(libname)) {
+            return latestVersions.get(libname);
+        }
 
-////////////////////////////////////////////////////////////////////////////////
+        String v = properties.getLatestVersion(libname, CACHE_LATEST_VERSION_INTERVAL);
+        if (v == null && AUTO_DOWNLOAD) {
+            v = downloadManager.getLatestVersion(libname);
+            if (v != null) {
+                properties.setLatestVersion(libname, v);
+            }
+        }
 
+        // we will cache whatever we have here, even null
+        Version version = null;
+        if (v != null) {
+            version = new Version(v);
+        }
+        latestVersions.put(libname, version);
 
-    /** Tries to load the library by searching it using location array.
-        If JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY = true
-        then just call plain System.LoadLibrary(libname) */
-    private String load(String libname)
-    {
-        for (Location l : location) {
-            if (JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY) {
-                l = Location.LIBPATH;
-            }
+        return version;
+    }
 
-            printLoadingMsg(l, libname);
+    private LibSearchResult searchLibrary(String libname, Version requiredVersion) {
+        LibSearchResult searchResult = new LibSearchResult();
 
+        for (Location l : locations) {
+            Logger.info("Checking " + libname + " from " + l + "...");
+
+            List<String> pathsToCheck = new ArrayList<String>();
+            boolean useLoadLibrary = false;
+            boolean searchEvenAfterFound = !JUST_DO_SIMPLE_LOAD_LIBRARY;
             switch (l) {
-              case LIBPATH: {
-                if (systemLoadLibrary(libname, l, libname)) {
-                    return libname;
-                }
-                if (JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY) {
-                    return null;
-                }
+            case LIBPATH: {
+                pathsToCheck.add(libname);
                 String libnameWithDataModel = libnameWithDataModel(libname);
                 if (libnameWithDataModel != null) {
-                    if (systemLoadLibrary(libnameWithDataModel, l, libname)) {
-                        return libnameWithDataModel;
-                    }
+                    pathsToCheck.add(libnameWithDataModel);
                 }
+                useLoadLibrary = true;
                 break;
-              }
-              case LATEST_PATH:
-              case CFG: {
-                String filename = null;
-                if (l == Location.LATEST_PATH) {
-                    if (latestLibPaths == null) {
-                        continue;
-                    }
-                    filename = latestLibPaths.get(libname);
-                } else {
-                    filename = properties.get(libname, latest.get(libname));
-                }
+            }
+            case CACHE: {
+                String filename = properties.get(libname);
                 if (filename == null) {
                     continue;
                 }
-                if (filename.startsWith(libname)) {
-                    if (systemLoadLibrary(filename, l, libname)) {
-                        return libname;
-                    }
+
+                // when search is enabled, we might skip it if cache has information about previously
+                // loaded library and last search was less than SEARCH_LIB_FREQUENCY_INTERVAL ago
+                Date lastSearchDate = properties.getLastSeach(libname);
+
+                searchEvenAfterFound = lastSearchDate == null ||
+                        (new Date().getTime() - lastSearchDate.getTime() > SEARCH_LIB_FREQUENCY_INTERVAL);
+
+                pathsToCheck.add(filename);
+                // this is kind of hack, but it does not require different checks between win/unix
+                // we say that library was loaded from LIBPATH location when its path starts from library simple name
+                useLoadLibrary = filename.startsWith(libname);
+                break;
+            }
+            case DOWNLOAD: {
+                Logger.info("Downloading " + libname + " from NCBI...");
+                LibDownloadResult downloadResult;
+                if (!mocksEnabled) {
+                    downloadResult = download(libname);
+                } else if (mockDownloadStatus == null) {
+                    throw new RuntimeException("mockDownloadStatus must be set when mocks enabled");
                 } else {
-                    if (systemLoad(filename, libname)) {
-                        return filename;
-                    }
+                    downloadResult = new LibDownloadResult();
+                    downloadResult.status = mockDownloadStatus;
+                    downloadResult.savedPath = "/some/path/" + libname;
                 }
-                if (l == Location.CFG) {
-                    properties.notLoaded(libname);
-                }
-                break;
-              }
-              default: {
-                String name[] = null;
-                if (l == Location.KNOWN_PATH) {
-                    if (knownLibPath == null) {
-                        continue;
+                if (downloadResult.status != DownloadManager.DownloadResult.SUCCESS) {
+                    Logger.warning("Failed to download " + libname + " from NCBI");
+                    if (downloadResult.status == DownloadManager.DownloadResult.UNSUPPORTED_OS) {
+                        searchResult.failCause = new UnsupportedArchCause();
                     } else {
-                        for (int i = 0;
-                            i < knownLibPath.length && knownLibPath[i] != null;
-                            ++i)
-                        {
-                            if (knownLibPath[i].contains(libname)) {
-                                name = new String[1];
-                                name[0] = knownLibPath[i];
-                                break;
-                            }
-                        }
+                        searchResult.failCause = new ConnectionProblemCause();
                     }
+                    continue;
                 }
-                if (name == null) {
-                    name = mapLibraryName(libname);
-                }
-                Logger.finest("System.mapLibraryName(" + libname + ") = "
-                    + name[0]);
+                Logger.info("Downloaded " + libname + " from NCBI");
+                Logger.fine("Checking " + libname + " library...");
+
+                pathsToCheck.add(downloadResult.savedPath);
+                break;
+            }
+            default: {
+                String name[] = mapLibraryName(libname);
+                Logger.finest("System.mapLibraryName(" + libname + ") = " + name[0]);
 
                 LibPathIterator it = new LibPathIterator(l, name);
                 while (true) {
@@ -817,97 +676,118 @@ or pathname not found and its directory is not writable */
                         break;
                     }
 
-                    if (systemLoad(filename, libname)) {
-                        return filename;
-                    }
+                    pathsToCheck.add(filename);
                 }
                 break;
-              }
             }
-        }
-
-        return null;
-    }
+            }
 
 
-////////////////////////////////////////////////////////////////////////////////
+            boolean foundInLocation = false;
+            for (String path : pathsToCheck) {
+                Version v;
+                if (!mocksEnabled) {
+                    v = checkLibraryVersion(libname, path, useLoadLibrary);
+                } else if (mockLocationVersions == null) {
+                    throw new RuntimeException("mockLocationVersions must be set when mocks enabled");
+                } else {
+                    v = mockLocationVersions.get(l);
+                }
+                if (v == null) {
+                    continue;
+                }
 
+                foundInLocation = true;
+
+                boolean versionFits = v.isCompatible(requiredVersion) && v.compareTo(requiredVersion) >= 0;
+                // replace a found version if either:
+                // a) none was previously found
+                // b) found version which fits requirements and it is higher than previously found
+                // c) found version version which fits requirements while previously found one does not
+                if (searchResult.path == null ||
+                        (versionFits && (v.compareTo(searchResult.version) > 0) || !searchResult.versionFits)) {
+                    searchResult.versionFits = versionFits;
+                    searchResult.location = l;
+                    searchResult.version = v;
+                    searchResult.path = path;
+                }
 
-    /** Downloads the library and default configuration from NCBI.
-        Save them where it can be found by LibManager.loadLibrary() */
-    private boolean download(String libname)
-    {   return download(libname, latest.get(libname)); }
+                if (searchResult.versionFits && !searchEvenAfterFound) {
+                    break;
+                }
+            }
 
+            if (l == Location.DOWNLOAD) {
+                // when we downloaded something that either can't be loaded or does not fit our requirements
+                // or we just overwrote our best found library and cannot load it
+                if (!searchResult.versionFits ||
+                        (!foundInLocation && searchResult.path.equals(pathsToCheck.get(0)))) {
+                    searchResult.versionFits = false;
+                    searchResult.location = l;
+                    searchResult.version = null;
+                    searchResult.path = pathsToCheck.get(0);
+                }
+            }
 
-    private boolean download(String libname, String latest) {
-        int i = -1;
-        if (knownLibPath != null) {
-            i = 0;
-            while(knownLibPath[i] != null) {
-                ++i;
+            if (searchResult.version != null && searchResult.version.isCompatible(requiredVersion)) {
+                Version latestVersion = getLatestVersion(libname);
+                // if we don't know the latest version, then we might stop the search if
+                // found version is okay and searchEvenAfterFound == false
+                if (latestVersion == null && searchResult.version.compareTo(requiredVersion) >= 0 &&
+                        !searchEvenAfterFound) {
+                    break;
+                }
+                // if we know the latest version, then we should search until find it
+                if (latestVersion != null && searchResult.version.compareTo(latestVersion) >= 0) {
+                    break;
+                }
             }
-            --i;
         }
 
-        if (downloadLib(libname, latest) == null) {
-            return false;
-        }
+        boolean downloadEnabled = Arrays.asList(locations).contains(Location.DOWNLOAD);
 
-        if (knownLibPath == null || knownLibPath.length < 1) {
-            Logger.finest("cannot find downloaded library path: "
-                + "skipping configuration download");
-            return true;
-        }
-        int j = 0;
-        while(knownLibPath[j] != null) {
-            ++j;
-        }
-        --j;
-        if (i != j - 1) {
-            Logger.finest("cannot find downloaded library path[]: "
-                + "skipping configuration download");
-            return true;
+        if (searchResult.failCause == null && !downloadEnabled) {
+            searchResult.failCause = new DownloadDisabledCause();
         }
 
-        return downloadKfg(knownLibPath[i + 1]);
+        return searchResult;
     }
 
+////////////////////////////////////////////////////////////////////////////////
 
-    /** Fetches the library from NCBI and writes it to where it can be found by
-        LibManager.loadLibrary() */
-    private String downloadLib(String libname, String version) {
-        String request = "cmd=lib&version=1.0&libname=" + libname;
 
-        try {
-            request += "&" + osProperties();
-        } catch (Exception e) {
-            Logger.warning("Cannot download library: " + e.getMessage());
-            return null;
+    /** Downloads the library and default configuration from NCBI.
+        Save them where it can be found by LibManager.loadLibrary() */
+    private LibDownloadResult download(String libname) {
+        if (!AUTO_DOWNLOAD) {
+            throw new RuntimeException("AUTO_DOWNLOAD is disabled. This method should not be called");
         }
 
-        for (SratoolkitCgis cgis = new SratoolkitCgis(); ; ) {
-            String spec = cgis.nextSpec();
-            if (spec == null) {
-                break;
-            }
-            int code = HttpManager.post(spec, request, this, libname);
-            if (code == 200) {
-                String r = createdFileName;
-                createdFileName = null;
-                properties.saved(libname, version, r);
-                return r;
-            } else {
-                Logger.warning("Cannot download library: " + code);
-            }
+        LibDownloadResult result = new LibDownloadResult();
+
+        Version latestVersion = getLatestVersion(libname);
+        if (latestVersion == null) {
+            result.status = DownloadManager.DownloadResult.FAILED;
+            return result;
+        }
+        result.status = downloadManager.downloadLib(this, libname, latestVersion);
+
+        if (result.status == DownloadManager.DownloadResult.SUCCESS) {
+            result.savedPath = createdFileName;
+            createdFileName = null;
+            properties.saved(libname, latestVersion.toSimpleVersion(), result.savedPath);
         }
-        return null;
-    }
 
+        return result;
+
+//        return downloadKfg(knownLibPath[i + 1]);
+    }
 
     /** Fetches the configuration from NCBI */
     private boolean downloadKfg(String libpath) {
         Logger.finest("configuration download is disabled");
 /*
+        // this is broken. if enabled, move download part to a DownloadManager
         File l = new File(libpath);
         String d = l.getParent();
         if (d == null) {
@@ -987,234 +867,50 @@ or pathname not found and its directory is not writable */
         return true;
     }
 
-
 ////////////////////////////////////////////////////////////////////////////////
 
-
-    /** Check the version of local dll,
-        compare it with the latest available;
-        download the latest if it is more recent */
-    private String checkLib(String libname, String latest) {
-        Logger.finest("> Checking the version of " + libname + " library...");
-
-        if (latest == null || latest.length() == 0) {
-            latest = this.latest.get(libname);
-        } else {
-            this.latest.put(libname, latest);
-            Logger.info("The latest version of " + libname + " = " + latest);
-        }
-
-        Logger.finest(">> Checking the current version of "
-            + libname + " library...");
-        String path = load(libname);
-        String current = current(libname);
-        Logger.info("The current version of " + libname + " = " + current);
-
-        if (new Version(current).compareTo(new Version(latest)) < 0) {
-            Logger.info("Will download " + libname + " library");
-            path = downloadLib(libname, latest);
-        } else {
-            Logger.info("Will not download " + libname + " library");
-        }
-
-        Logger.finest
-            ("< ...Done checking the version of " + libname + " library");
-
-        return path;
-    }
-
-
-    /** Execute a process to check the version of dll,
-        and download it if it is out of date */
-    private void launchLibCheck(String libname) {
-        String latest = this.latest.get(libname);
-        if (properties.getLoud(libname, latest) != null) {
-         // LibManager.properties knows already where the latest dll version is
-            return;
-        } else {
-            Logger.finest
-                (libname + "-" + latest + " was not found in properties");
-        }
-        Vector<String> cmdarray = new Vector<String>();
-        String property = System.getProperty("java.home");
-        if (property != null) {
-            cmdarray.add(property + LibPathIterator.fileSeparator()
-                   + "bin" + LibPathIterator.fileSeparator() + "java");
-            if (!tryJava(cmdarray)) {
-                cmdarray.remove(0);
-            }
-        }
-        if (cmdarray.size() == 0) {
-            cmdarray.add("java");
-            if (!tryJava(cmdarray)) {
-                return;
-            }
-        }
-
-        String classpath = System.getProperty("java.class.path");
-        if (classpath != null) {
-            cmdarray.add("-cp");
-            cmdarray.add(classpath);
-        }
-        cmdarray.add(addProperty("java.library.path"));
-        if (System.getProperty("vdb.log") != null) {
-            cmdarray.add(addProperty("vdb.log"));
-        }
-        cmdarray.add("gov.nih.nlm.ncbi.ngs.LibManager");
-        cmdarray.add(libname);
-        if (latest != null) {
-            cmdarray.add(latest);
-        }
-
-        Logger.info(">>> RUNNING CHILD ...");
-        try {
-            String cmd[] = new String[cmdarray.size()];
-            for (int i = 0; i < cmdarray.size(); ++i) {
-                cmd[i] = cmdarray.elementAt(i);
-            }
-            Logger.finest(cmd);
-            Process p = Runtime.getRuntime().exec(cmd);
-            BufferedReader bri =
-                 new BufferedReader(new InputStreamReader(p.getInputStream()));
-            BufferedReader bre =
-                new BufferedReader(new InputStreamReader(p.getErrorStream()));
-            String line = null;
-            while ((line = bre.readLine()) != null)
-            {   System.err.println(line); }
-            bre.close();
-            while ((line = bri.readLine()) != null) {
-                String found = null;
-                Pattern pattern =  Pattern.compile
-                    ("^LibManager: libname='(.*)' filename='(.*)'$");
-                Matcher matcher = pattern.matcher(line);
-                while (matcher.find()) {
-                    found = matcher.group(1);
-                    if (!found.startsWith(libname)) {
-                        continue;
-                    }
-                    String filename = matcher.group(2);
-                    latestLibPaths.put(libname, filename);
-                    break;
-                }
-                if (found == null) {
-                    System.out.println(line);
-                }
-            }
-            bri.close();
-            p.waitFor();
-        } catch (Exception e) { Logger.finest(e); }
-        Logger.info("<<< Done CHILD");
-    }
-
-
-    /** Make sure we can execute java */
-    private boolean tryJava(Vector<String> cmdarray) {
-        try {
-            Process p
-                = Runtime.getRuntime().exec(cmdarray.elementAt(0) + " -?");
-            if (p.waitFor() == 0) {
-                return true;
-            }
-        } catch (Exception e) {}
-        return false;
-    }
-
-
-    /** Create java property option */
-    private String addProperty(String key) {
-        String property = System.getProperty(key);
-        if (property != null) {
-            return "-D" + key + "=" + property + "";
-        } else {
-            return "";
-        }
-    }
-
-
-    /** Add the pathname to knownLibPath array */
-    private void updateKnownLibPath(String pathname) {
-        int l = 9;
-
-        if (knownLibPath == null) {
-            knownLibPath = new String[l];
-        } else {
-            l = knownLibPath.length;
-        }
-
-        int i = 0;
-        for (i = 0; i < l; ++i) {
-            if (knownLibPath[i] == null) {
-                break;
-            }
-        }
-
-        if (i >= l) {
-            String tmp[] = knownLibPath;
-            l *= 2;
-            knownLibPath = new String[l];
-            for (i = 0; i < tmp.length; ++i) {
-                knownLibPath[i] = tmp[i];
-            }
-        }
-
-        knownLibPath[i] = pathname;
-    }
-
-
-////////////////////////////////////////////////////////////////////////////////
-
-
-    private String[] knownLibPath; // location where library was downloaded to
-
     /** Possible location to search for library to load.
         The order of elements defines library location search order. */
-    private Location[] location;
+    private Location[] locations;
+
+    /** Minimal versions for each of the libraries */
+    private Map<String, String> libraryVersions = new HashMap<String, String>();
 
-    /** Locations where the latest libraries were found */
-    private HashMap<String, String> latestLibPaths;
+    /** Latest versions downloaded from NCBI or taken from cache for each of the libraries */
+    private HashMap<String, Version> latestVersions = new HashMap<String, Version>();
 
-    /** The latest available library versions */
-    private Latest latest;
+    /** Knows how to check and download latest libraries versions */
+    private DownloadManager downloadManager;
 
     /** Is updated by FileCreator methods called by HttpManager */
     private String createdFileName;
 
+    /** File that plays a role of a cache for information
+     * of libraries locations/versions between runs */
     private LMProperties properties; // to keep dll path/version-s
 
 ////////////////////////////////////////////////////////////////////////////////
+/// These variables alter LibManager behaviour and should only be used in tests
 
+    boolean mocksEnabled = false;
+    Map<Location, Version> mockLocationVersions;
+    DownloadManager.DownloadResult mockDownloadStatus;
+    Throwable mockLoadException;
+    String mockLoadedLibraryVersion;
 
-    /** Call checkLib for every argument to the version of local dll,
-        compare it with the latest available
-        and download the latest if it is more recent */
-    public static void main(String[] args) {
-        LibManager l = new LibManager();
-
-        for (int i = 0; i < args.length; i++) {
-            String libname = args[i];
-            String version = null;
-            if (i + 1 < args.length) {
-                version = args[++i];
-            }
-            String path = l.checkLib(libname, version);
-            if (path != null) {
-                System.out.println("LibManager: libname='"
-                    + libname + "' filename='" + path + "'");
-            }
-        }
-
-        l.properties.store();
-    }
 
+////////////////////////////////////////////////////////////////////////////////
 
 /*******************************************************************************
 -Djava.library.path
 -Dvdb.log
-off if JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY
+off if JUST_DO_SIMPLE_LOAD_LIBRARY
+
+-Dvdb.System.noLibraryDownload=1 - will turn auto-download off
+-Dvdb.System.noLibrarySearch=1  - with previous option will not try
+                                  to find latest installed lib
 
-TODO save location where library was found
-(try to use load instead of loadLibrary even for LIBPATH);
-add which() method to return this location(?);
+TODO
 try to load the library if LibManager.loadLibrary() was never called.
 What if loadLibrary() is called several times? load()
       http://docs.oracle.com/javase/6/docs/api/java/util/logging/Level.html
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/LibPathIterator.java b/ngs-java/gov/nih/nlm/ncbi/ngs/LibPathIterator.java
index b59ddd0..e214cc5 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/LibPathIterator.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/LibPathIterator.java
@@ -81,13 +81,8 @@ class LibPathIterator {
 
         this.mgr = mgr;
         this.location = location;
+        this.filenames = filename;
 
-        if (location == LibManager.Location.KNOWN_PATH) {
-            this.abspath = filename[0];
-        } else {
-            this.filenames = filename;
-        }
-        
         this.parents = parents;
         this.separator = fileSeparator();
 
@@ -128,19 +123,10 @@ class LibPathIterator {
                 crn = crnLocation;
             }
 
-            if (crn != null && crn == LibManager.Location.KNOWN_PATH) {
-                if (abspath != null) {
-                    return abspath;
-                } else {
-                    continue;
-                }
-            }
-            else {
-                if (separator == null) {
-                    throw new NullPointerException();
-                }
-                return path += separator + filename;
+            if (separator == null) {
+                throw new NullPointerException();
             }
+            return path += separator + filename;
         }
     }
 
@@ -148,7 +134,7 @@ class LibPathIterator {
     /** Iterate over all locations and print them: debug/test */
     static boolean list( String libname )
     {
-        return iterate(new LibManager(), libname, false);
+        return iterate(new LibManager(new String[] {}, new String[] {}), libname, false);
     }
 
 
@@ -175,6 +161,7 @@ class LibPathIterator {
         }
 
         while (true) {
+            // TODO(andrii): check if that will work with new changes
             ++iLocation;
             Logger.finest("LibPathIterator.reset() " + iLocation);
             if (location == null) {
@@ -205,11 +192,6 @@ class LibPathIterator {
                         continue;
                     }
                     return true;
-                case KNOWN_PATH:
-                    if (!resetPaths(abspath)) {
-                        continue;
-                    }
-                    return true;
                 case LIBPATH:
                     path = System.getProperty("java.library.path");
                     Logger.finest("java.library.path = " + path);
@@ -500,7 +482,7 @@ Here we use it just to find where to write the downoaded file. */
         }
 
         path += fileSeparator() + "lib";
-        switch (LibManager.DetectJVM()) {
+        switch (LibManager.detectJVM()) {
             case b64:
                 path += "64";
                 break;
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/LibVersionChecker.java b/ngs-java/gov/nih/nlm/ncbi/ngs/LibVersionChecker.java
new file mode 100644
index 0000000..d4e550b
--- /dev/null
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/LibVersionChecker.java
@@ -0,0 +1,206 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ==============================================================================
+*
+*/
+
+
+package gov.nih.nlm.ncbi.ngs;
+
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+class LibVersionChecker {
+    static Version getVersion(String libname, String libpath, boolean useLoadLibrary) {
+        Vector<String> cmdarray = new Vector<String>();
+        String property = System.getProperty("java.home");
+        if (property != null) {
+            cmdarray.add(property + LibPathIterator.fileSeparator()
+                    + "bin" + LibPathIterator.fileSeparator() + "java");
+            if (!tryJava(cmdarray)) {
+                cmdarray.remove(0);
+            }
+        }
+        if (cmdarray.size() == 0) {
+            cmdarray.add("java");
+            if (!tryJava(cmdarray)) {
+                // come up with exception class
+                throw new RuntimeException("Failed to check library " + libpath + " version: failed to execute java");
+            }
+        }
+
+        String classpath = System.getProperty("java.class.path");
+        if (classpath != null) {
+            cmdarray.add("-cp");
+            cmdarray.add(classpath);
+        }
+        cmdarray.add(createPropertyString("java.library.path"));
+        if (System.getProperty("vdb.log") != null) {
+            cmdarray.add(createPropertyString("vdb.log"));
+        }
+        cmdarray.add("gov.nih.nlm.ncbi.ngs.LibVersionChecker");
+        cmdarray.add(libname);
+        cmdarray.add(libpath);
+        if (useLoadLibrary) {
+            cmdarray.add("true");
+        }
+
+        Logger.finer(">>> RUNNING CHILD ...");
+        String version = null;
+        try {
+            String cmd[] = new String[cmdarray.size()];
+            for (int i = 0; i < cmdarray.size(); ++i) {
+                cmd[i] = cmdarray.elementAt(i);
+            }
+            Logger.finest(cmd);
+            Process p = Runtime.getRuntime().exec(cmd);
+            BufferedReader bri =
+                    new BufferedReader(new InputStreamReader(p.getInputStream()));
+            BufferedReader bre =
+                    new BufferedReader(new InputStreamReader(p.getErrorStream()));
+            String line = null;
+            while ((line = bre.readLine()) != null) {
+                System.err.println(line);
+            }
+            bre.close();
+            while ((line = bri.readLine()) != null) {
+                Pattern pattern = Pattern.compile("^LibManager: version='(.*)'$");
+                Matcher matcher = pattern.matcher(line);
+                while (matcher.find()) {
+                    version = matcher.group(1);
+                    if (version != null) {
+                        break;
+                    }
+                }
+                if (version == null) {
+                    System.out.println(line);
+                }
+            }
+            bri.close();
+            p.waitFor();
+        } catch (Exception e) { Logger.finest(e); }
+        Logger.finer("<<< Done CHILD");
+        if (version != null) {
+            return new Version(version);
+        }
+        return null;
+    }
+
+    /** Call checkLib for every argument to the version of local dll,
+     compare it with the latest available
+     and download the latest if it is more recent */
+    public static void main(String[] args) {
+        LibVersionChecker checker = new LibVersionChecker();
+
+        if (args.length != 2 && args.length != 3) {
+            throw new RuntimeException("Not enough arguments: should be 2 or 3");
+        }
+
+        String libname = args[0];
+        String libpath = args[1];
+        boolean useLoadLibrary = args.length == 3 && args[2].equals("true");
+        String version = checker.checkLib(libname, libpath, useLoadLibrary);
+        if (version != null) {
+            System.out.println("LibManager: version='" + version + "'");
+        }
+
+    }
+
+    /** Check the version of local dll,
+     compare it with the latest available;
+     download the latest if it is more recent */
+    private String checkLib(String libname, String path, boolean useLoadLibrary) {
+        Logger.finest("> Checking the version of " + path  + " library...");
+
+        Logger.finest(">> Loading the library...");
+        boolean loaded = false;
+        try {
+            if (useLoadLibrary) {
+                System.loadLibrary(path);
+            } else {
+                System.load(path);
+            }
+            loaded = true;
+        } catch (UnsatisfiedLinkError e) {
+            Logger.finest("<< Failed to load library " + path);
+            Logger.finest(e);
+        }
+
+        String version = null;
+        if (loaded) {
+            Logger.finest(">> Checking current version of the library...");
+            version = getLoadedVersion(libname);
+
+            Logger.finest("<< The current version of " + path + " = " + version);
+        }
+
+        Logger.finest("< Done checking version of the library");
+
+        return version;
+    }
+
+    static String getLoadedVersion(String libname) {
+        try {
+            if (libname.equals("ncbi-vdb")) {
+                return Manager.getPackageVersion();
+            } else if (libname.equals("ngs-sdk")) {
+                return ngs.Package.getPackageVersion();
+            } else {
+                Logger.warning("It is not known how to check "
+                        + "the version of " + libname + " library");
+                return null;
+            }
+        } catch (ngs.ErrorMsg e) {
+            Logger.finest(e);
+        } catch (UnsatisfiedLinkError e) {
+            Logger.finest(e);
+        }
+        return null;
+    }
+
+    /** Make sure we can execute java */
+    private static boolean tryJava(Vector<String> cmdarray) {
+        try {
+            Process p
+                    = Runtime.getRuntime().exec(cmdarray.elementAt(0) + " -?");
+            if (p.waitFor() == 0) {
+                return true;
+            }
+        } catch (Exception e) {}
+        return false;
+    }
+
+    /** Create java property option */
+    private static String createPropertyString(String key) {
+        String property = System.getProperty(key);
+        if (property == null) {
+            throw new RuntimeException("Property " + key + " is not defined");
+        }
+        return "-D" + key + "=" + property + "";
+    }
+
+}
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/Logger.java b/ngs-java/gov/nih/nlm/ncbi/ngs/Logger.java
index 778bb2a..368c1eb 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/Logger.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/Logger.java
@@ -26,6 +26,8 @@
 
 package gov.nih.nlm.ncbi.ngs;
 
+import ngs.ErrorMsg;
+
 /** The Logger is used to print log messages to stderr.
  An associated "Level" reflects a minimum Level that this logger cares about. */
 class Logger {
@@ -70,7 +72,7 @@ class Logger {
     static void finer  (String msg) { log(Level.FINER  , msg); }
     static void finest (String msg) { log(Level.FINEST , msg); }
 
-    static void fine   (Throwable e) { fine  (e.toString()); }
+    static void fine   (Throwable e) { fine(e.toString()); }
     static void finest (Throwable e) { finest(e.toString()); }
 
     static void finest (String[] msgs) {
@@ -98,9 +100,24 @@ class Logger {
         if (this.level.id() < level.id()) {
             return;
         }
-        System.err.println(msg);
+        String v = getVersion();
+
+        String formatted = "ngs-java" + (v != null ? "." + v : "") + ": " + msg;
+        System.err.println(formatted);
+    }
+
+    private String getVersion() {
+        if (version == null) {
+            try {
+                version = ngs.Package.getPackageVersion();
+            } catch (Throwable e) {
+                version = null;
+            }
+        }
+        return version;
     }
 
+    private String version;
     private Level level;
     private static Logger logger = new Logger();
 }
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/Manager.java b/ngs-java/gov/nih/nlm/ncbi/ngs/Manager.java
index b8c86ab..f2679e4 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/Manager.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/Manager.java
@@ -94,18 +94,14 @@ class Manager
 
                To do just a plain call to System.LoadLibrary(libname)
                 set LibManager.JUST_DO_REGULAR_JAVA_SYSTEM_LOAD_LIBRARY to true
-                or set vdb.System.loadLibrary java system property. */
-
-            String ngs_sdk  = "ngs-sdk";
-            String ncbi_vdb = "ncbi-vdb";
-
-            LibManager m = new LibManager( new String[] { ngs_sdk, ncbi_vdb } );
-            if ( ! m . loadLibrary ( ngs_sdk ) )
-                throw new ExceptionInInitializerError
-                    ( "Cannot load " + ngs_sdk + " library" );
-            if ( ! m . loadLibrary ( ncbi_vdb ) )
-                throw new ExceptionInInitializerError
-                    ( "Cannot load " + ncbi_vdb + " library" );
+                or set vdb.System.loadLibrary=1 java system property. */
+
+            LibManager m = new LibManager(
+                    new String[] { LibDependencies.NGS_SDK, LibDependencies.NCBI_VDB },
+                    new String[] { LibDependencies.NGS_SDK_VERSION, LibDependencies.NCBI_VDB_VERSION });
+
+            m . loadLibrary ( LibDependencies.NGS_SDK );
+            m . loadLibrary ( LibDependencies.NCBI_VDB );
 
             // try to initialize the NCBI library
             String err = Initialize ();
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/NGS.java b/ngs-java/gov/nih/nlm/ncbi/ngs/NGS.java
index f460acc..ee69fbf 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/NGS.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/NGS.java
@@ -49,6 +49,18 @@ public class NGS
         return mgr . isSupported ();
     }
 
+    /**
+     * Returns exception which occurred during initialization
+     *  If the exception is a subclass of LibraryLoadError, then there was a problem
+     *  with loading native libraries
+     *
+     * @return initialization error or null
+     */
+    static public ExceptionInInitializerError getInitializationError ()
+    {
+        return mgr . invalid;
+    }
+
 
     /**
      * Updates User-Agent header in HTTP communications
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/Version.java b/ngs-java/gov/nih/nlm/ncbi/ngs/Version.java
index 04f088e..3f94922 100644
--- a/ngs-java/gov/nih/nlm/ncbi/ngs/Version.java
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/Version.java
@@ -31,7 +31,7 @@ package gov.nih.nlm.ncbi.ngs;
 /******************************************************************************/
 
 
-class Version {
+class Version implements Comparable<Version> {
 
     Version(String version) {
         stage = Stage.FINAL;
@@ -89,6 +89,18 @@ class Version {
             + major + "." + minor + "." + release + stage + revision + " }";
     }
 
+    public String toSimpleVersion() {
+        return version == null ? "null" : version;
+    }
+
+    public boolean isCompatible(Version other) {
+        return major == other.major;
+    }
+
+    public int getMajor() {
+        return major;
+    }
+
     /** Compares two Version, testing whether one comes before or after the
         other, or whether they're equal. The Version parts are compared.
 
@@ -101,7 +113,7 @@ class Version {
                       0                : if version equals version2
                       a positive number: if version comes after version2
      */
-    int compareTo(Version o) { /* if this < o return -1 */
+    public int compareTo(Version o) { /* if this < o return -1 */
         int r = 1;
         if (o == null) {
             v(o, r, 88);
diff --git a/ngs-sdk/language/c++/ReferenceSequence.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryIncompatibleVersionError.java
similarity index 56%
copy from ngs-sdk/language/c++/ReferenceSequence.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryIncompatibleVersionError.java
index 939f154..788dc7c 100644
--- a/ngs-sdk/language/c++/ReferenceSequence.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryIncompatibleVersionError.java
@@ -20,44 +20,40 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include <ngs/ReferenceSequence.hpp>
+package gov.nih.nlm.ncbi.ngs.error;
 
-namespace ngs
-{
+import gov.nih.nlm.ncbi.ngs.error.cause.LibraryLoadCause;
 
-    ReferenceSequence :: ReferenceSequence ( ReferenceSequenceRef ref )
-            throw ()
-        : self ( ref )
-    {
-        assert ( ref != 0 );
+public class LibraryIncompatibleVersionError extends LibraryLoadError {
+    private String outdatedLibPath;
+
+    public LibraryIncompatibleVersionError(String libName, String msg, String outdatedLibPath, LibraryLoadCause cause) {
+        super(libName, msg, cause);
+        this.outdatedLibPath = outdatedLibPath;
     }
 
-    ReferenceSequence & ReferenceSequence :: operator = ( const ReferenceSequence & obj )
-        throw ( ErrorMsg )
-    {
-        assert ( obj . self != 0 );
-        ReferenceSequenceRef new_ref = obj . self -> Duplicate ();
-        this -> self -> Release ();
-        this -> self = new_ref;
-        return * this;
+    @Override
+    public String getErrorMessage() {
+        return super.getErrorMessage() + "\n" +
+            "Library path: " + outdatedLibPath;
     }
 
-    ReferenceSequence :: ReferenceSequence ( const ReferenceSequence & obj )
-            throw ( ErrorMsg )
-        : self ( obj . self == 0 ? 0 : obj . self -> Duplicate() )
-    {
-        assert ( obj . self != 0 );
+    public String getOutdateLibPath() {
+        return outdatedLibPath;
     }
-    
-    ReferenceSequence :: ~ ReferenceSequence ()
-        throw ()
-    {
-        this -> self -> Release ();
-        this -> self = 0;
+
+    @Override
+    public String toString() {
+        return generateMsg(getMessage(), getOutdateLibPath());
     }
 
-} // namespace ngs
\ No newline at end of file
+    private static String generateMsg(String msg, String outdatedLibPath) {
+        String result = msg + "\n";
+        result += "Library path: " + outdatedLibPath;
+        return result;
+    }
+}
diff --git a/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryLoadError.java b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryLoadError.java
new file mode 100644
index 0000000..a8ed97a
--- /dev/null
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryLoadError.java
@@ -0,0 +1,80 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ==============================================================================
+*
+*/
+
+package gov.nih.nlm.ncbi.ngs.error;
+
+import gov.nih.nlm.ncbi.ngs.error.cause.LibraryLoadCause;
+
+public class LibraryLoadError extends ExceptionInInitializerError {
+    String libName;
+    LibraryLoadCause cause;
+    String errorMessage;
+    String recommendation;
+
+    public LibraryLoadError(String libName, String msg, LibraryLoadCause cause) {
+        this(libName, msg, cause, cause.getRecommendation());
+    }
+
+    public LibraryLoadError(String libName, String msg, LibraryLoadCause cause, String recommendation) {
+        super(generateMsg(libName, msg, cause, recommendation));
+
+        this.libName = libName;
+        this.cause = cause;
+        this.errorMessage = generateMsg(libName, msg, cause, null);
+        this.recommendation = recommendation;
+    }
+
+    @Override
+    public LibraryLoadCause getCause() {
+        return cause;
+    }
+
+    /**
+     * @return error message, without recommendation
+     */
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    /**
+     * @return recommendation for the user regarding error, can be null
+     */
+    public String getRecommendation() {
+        return recommendation;
+    }
+
+    private static String generateMsg(String libName, String msg, LibraryLoadCause cause, String recommendation) {
+        String result = "Failed to load '" + libName + "' - " + msg;
+        if (cause != null) {
+            result += ", " + cause.getMessage();
+            if (recommendation != null) {
+                result += "\n" + recommendation;
+            }
+        }
+
+        return result;
+    }
+}
diff --git a/ngs-sdk/win/stdbool.h b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryNotFoundError.java
similarity index 80%
copy from ngs-sdk/win/stdbool.h
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryNotFoundError.java
index 4807cb4..44f0494 100644
--- a/ngs-sdk/win/stdbool.h
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/LibraryNotFoundError.java
@@ -20,27 +20,17 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
 
-/*--------------------------------------------------------------------------
- * bool
- */
+package gov.nih.nlm.ncbi.ngs.error;
 
-#ifndef __cplusplus
-typedef unsigned char bool;
+import gov.nih.nlm.ncbi.ngs.error.cause.LibraryLoadCause;
 
-#undef true
-#define true 1
-
-#undef false
-#define false 0
-
-#endif
-
-
-#endif /* _STDBOOL_H */
+public class LibraryNotFoundError extends LibraryLoadError {
+    public LibraryNotFoundError(String libName, String msg, LibraryLoadCause cause) {
+        super(libName, msg, cause);
+    }
+}
diff --git a/ngs-sdk/dispatch/PackageItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/ConnectionProblemCause.java
similarity index 72%
copy from ngs-sdk/dispatch/PackageItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/ConnectionProblemCause.java
index d7cfdf0..88d2263 100644
--- a/ngs-sdk/dispatch/PackageItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/ConnectionProblemCause.java
@@ -20,26 +20,21 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include <ngs/itf/PackageItf.hpp>
-#include <ngs/itf/StringItf.hpp>
 
-#include "version.h" // NGS_SDK_VERSION
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-namespace ngs
-{
-
-    /*----------------------------------------------------------------------
-     * PackageItf
-     */
-
-    String PackageItf :: getPackageVersion ()
-        throw ( ErrorMsg )
-    {
-        return String ( NGS_SDK_VERSION );
+public class ConnectionProblemCause extends LibraryLoadCause {
+    public ConnectionProblemCause() {
+        super("auto-download failed - connection problem");
     }
 
-} // namespace ngs
+    @Override
+    public String getRecommendation() {
+        return "Please check your network connection, and check if you need proxy configuration. " +
+            "Contact your IT department or email sra-tools at ncbi.nlm.nih.gov for assistance.";
+    }
+}
diff --git a/ngs-sdk/dispatch/PackageItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/DownloadDisabledCause.java
similarity index 74%
copy from ngs-sdk/dispatch/PackageItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/DownloadDisabledCause.java
index d7cfdf0..dfe2d66 100644
--- a/ngs-sdk/dispatch/PackageItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/DownloadDisabledCause.java
@@ -20,26 +20,21 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include <ngs/itf/PackageItf.hpp>
-#include <ngs/itf/StringItf.hpp>
 
-#include "version.h" // NGS_SDK_VERSION
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-namespace ngs
-{
-
-    /*----------------------------------------------------------------------
-     * PackageItf
-     */
-
-    String PackageItf :: getPackageVersion ()
-        throw ( ErrorMsg )
-    {
-        return String ( NGS_SDK_VERSION );
+public class DownloadDisabledCause extends LibraryLoadCause {
+    public DownloadDisabledCause() {
+        super("NGS auto-download is disabled");
     }
 
-} // namespace ngs
+    @Override
+    public String getRecommendation() {
+        return "Please enable auto-download or install ngs and ncbi-vdb manually: " +
+                "https://github.com/ncbi/ngs/wiki/Downloads";
+    }
+}
diff --git a/ngs-sdk/win/stdbool.h b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/InvalidLibraryCause.java
similarity index 76%
copy from ngs-sdk/win/stdbool.h
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/InvalidLibraryCause.java
index 4807cb4..679785f 100644
--- a/ngs-sdk/win/stdbool.h
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/InvalidLibraryCause.java
@@ -20,27 +20,20 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
 
-/*--------------------------------------------------------------------------
- * bool
- */
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-#ifndef __cplusplus
-typedef unsigned char bool;
+public class InvalidLibraryCause extends LibraryLoadCause {
+    public InvalidLibraryCause() {
+        super("library was found but its version cannot be determined");
+    }
 
-#undef true
-#define true 1
-
-#undef false
-#define false 0
-
-#endif
-
-
-#endif /* _STDBOOL_H */
+    @Override
+    public String getRecommendation() {
+        return "Please be sure that you have the latest library from NCBI";
+    }
+}
diff --git a/ngs-sdk/win/stdbool.h b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/JvmErrorCause.java
similarity index 79%
copy from ngs-sdk/win/stdbool.h
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/JvmErrorCause.java
index 4807cb4..767fcfa 100644
--- a/ngs-sdk/win/stdbool.h
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/JvmErrorCause.java
@@ -20,27 +20,22 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
 
-/*--------------------------------------------------------------------------
- * bool
- */
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-#ifndef __cplusplus
-typedef unsigned char bool;
+public class JvmErrorCause extends LibraryLoadCause {
 
-#undef true
-#define true 1
+    public JvmErrorCause(Throwable e) {
+        super("Java Virtual Machine error");
+        initCause(e);
+    }
 
-#undef false
-#define false 0
-
-#endif
-
-
-#endif /* _STDBOOL_H */
+    @Override
+    public String getRecommendation() {
+        return null;
+    }
+}
diff --git a/ngs-sdk/language/python/py_PileupIteratorItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/LibraryLoadCause.java
similarity index 83%
copy from ngs-sdk/language/python/py_PileupIteratorItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/LibraryLoadCause.java
index 2116522..0874155 100644
--- a/ngs-sdk/language/python/py_PileupIteratorItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/LibraryLoadCause.java
@@ -20,13 +20,17 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include "py_PileupIteratorItf.h"
-#include "py_ErrorMsg.hpp"
 
-#include <ngs/itf/PileupItf.hpp>
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-GEN_PY_ITERATOR_NEXT ( Pileup )
+public abstract class LibraryLoadCause extends Exception {
+    public LibraryLoadCause(String msg) {
+        super(msg);
+    }
+
+    public abstract String getRecommendation();
+}
diff --git a/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/OutdatedJarCause.java
similarity index 76%
copy from ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/OutdatedJarCause.java
index ad00313..2f91af6 100644
--- a/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/OutdatedJarCause.java
@@ -20,13 +20,19 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include "py_ReadGroupIteratorItf.h"
-#include "py_ErrorMsg.hpp"
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-#include <ngs/itf/ReadGroupItf.hpp>
+public class OutdatedJarCause extends LibraryLoadCause {
+    public OutdatedJarCause() {
+        super("your NGS version is out of date");
+    }
 
-GEN_PY_ITERATOR_NEXT ( ReadGroup )
+    @Override
+    public String getRecommendation() {
+        return "Please update ngs-java to the latest version or contact sra-tools at ncbi.nlm.nih.gov for assistance";
+    }
+}
diff --git a/ngs-sdk/dispatch/PackageItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/PrereleaseReqLibCause.java
similarity index 75%
copy from ngs-sdk/dispatch/PackageItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/PrereleaseReqLibCause.java
index d7cfdf0..5c937dd 100644
--- a/ngs-sdk/dispatch/PackageItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/PrereleaseReqLibCause.java
@@ -20,26 +20,19 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include <ngs/itf/PackageItf.hpp>
-#include <ngs/itf/StringItf.hpp>
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-#include "version.h" // NGS_SDK_VERSION
-
-namespace ngs
-{
-
-    /*----------------------------------------------------------------------
-     * PackageItf
-     */
-
-    String PackageItf :: getPackageVersion ()
-        throw ( ErrorMsg )
-    {
-        return String ( NGS_SDK_VERSION );
+public class PrereleaseReqLibCause extends LibraryLoadCause {
+    public PrereleaseReqLibCause() {
+        super("your NGS version requires a library that is still in pre-release");
     }
 
-} // namespace ngs
+    @Override
+    public String getRecommendation() {
+        return "Please revert to an older ngs-java or contact sra-tools at ncbi.nlm.nih.gov for assistance";
+    }
+}
diff --git a/ngs-sdk/dispatch/PackageItf.cpp b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/UnsupportedArchCause.java
similarity index 72%
copy from ngs-sdk/dispatch/PackageItf.cpp
copy to ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/UnsupportedArchCause.java
index d7cfdf0..a09ff1d 100644
--- a/ngs-sdk/dispatch/PackageItf.cpp
+++ b/ngs-java/gov/nih/nlm/ncbi/ngs/error/cause/UnsupportedArchCause.java
@@ -20,26 +20,20 @@
 *
 *  Please cite the author in any work or product based on this material.
 *
-* ===========================================================================
+* ==============================================================================
 *
 */
 
-#include <ngs/itf/PackageItf.hpp>
-#include <ngs/itf/StringItf.hpp>
+package gov.nih.nlm.ncbi.ngs.error.cause;
 
-#include "version.h" // NGS_SDK_VERSION
-
-namespace ngs
-{
-
-    /*----------------------------------------------------------------------
-     * PackageItf
-     */
-
-    String PackageItf :: getPackageVersion ()
-        throw ( ErrorMsg )
-    {
-        return String ( NGS_SDK_VERSION );
+public class UnsupportedArchCause extends LibraryLoadCause {
+    public UnsupportedArchCause() {
+        super("download failed - there is no library available for your OS/version");
     }
 
-} // namespace ngs
+    @Override
+    public String getRecommendation() {
+        return "Please try building ngs and ncbi-vdb from sources: " +
+            "https://github.com/ncbi/ngs/wiki/Building-and-Installing-from-Source";
+    }
+}
diff --git a/ngs-java/ngs/ReadCollection.java b/ngs-java/ngs/ReadCollection.java
index e7a8c13..4344348 100644
--- a/ngs-java/ngs/ReadCollection.java
+++ b/ngs-java/ngs/ReadCollection.java
@@ -85,6 +85,7 @@ public interface ReadCollection
         throws ErrorMsg;
 
     /**
+     * @param spec the name of a contained read group    
      * @return true if a call to "getReadGroup()" should succeed
      */
     boolean hasReadGroup ( String spec );
@@ -117,6 +118,7 @@ public interface ReadCollection
         throws ErrorMsg;
 
     /**
+     * @param spec the name of a contained Reference
      * @return true if a call to "getReference()" should succeed
      */
     boolean hasReference ( String spec );
diff --git a/ngs-java/setup/package.prl b/ngs-java/setup/package.prl
index 8e98b7a..e19caa3 100644
--- a/ngs-java/setup/package.prl
+++ b/ngs-java/setup/package.prl
@@ -1,6 +1,6 @@
 ################################################################################
 sub PACKAGE      { 'ngs-java' }
-sub VERSION      { '1.2.3' }
+sub VERSION      { '1.2.4' }
 sub PACKAGE_TYPE { 'J' }
 sub PACKAGE_NAME { 'NGS-JAVA' }
 sub PACKAGE_NAMW { 'NGS_JAVA' }
diff --git a/ngs-python/build.xml b/ngs-python/build.xml
index a7e40d4..21e36c3 100644
--- a/ngs-python/build.xml
+++ b/ngs-python/build.xml
@@ -2,11 +2,16 @@
 
     <!-- This file is currently for use on Windows; Linux/Mac builds are run via gmake -->
     <property environment="env"/>
-    <property name="vdb.build"      value="Debug" />
-    <property name="vdb.platform"   value="x64" />
+    <property name="Platform"   value="x64" />
+    <property name="Configuration"      value="Debug" />
+    <property name="Output"     value="${basedir}\..\..\OUTDIR" />
+    <property name="MSVS"           value="2013" />
     
-    <property name="vdb.outdir"   value="..\ngs-sdk\..\..\OUTDIR\" />
-    <property name="vdb.dir"   value="${env.outdir}\win\cl\${vdb.platform}\${vdb.build}\bin" />
+    <condition property="PlatformToolset" value="v100" else="v120">
+        <equals arg1="${MSVS}" arg2="2010"/>
+    </condition>    
+    <property name="vdb.dir"        value="${Output}\ncbi-vdb\win\${PlatformToolset}\${Platform}\${Configuration}\bin" />
+    <property name="ngs.dir"        value="${Output}\ngs-sdk\win\${PlatformToolset}\${Platform}\${Configuration}\bin" />
 	
     <!-- Set this to full path to Python if not in PATH already -->
     <property name="python.exe"     value="python" />
@@ -24,11 +29,12 @@
         <element name="args" optional="yes" />
         <sequential>
             <exec executable="${python.exe}" failonerror="true">
-                <env key="NGS_PY_LIBRARY_PATH" value="${vdb.dir}"/>
+                <env key="PATH" value="${vdb.dir};${ngs.dir};${env.PATH}"/>            
                 <env key="NGS_PY_DOWNLOAD_LIBRARY" value="0"/>
                 <arg value="examples/@{class}.py"/>
                 <args />
             </exec>
+            <!-- TODO: use fc to diff output against expected -->
         </sequential>
     </macrodef>
 
@@ -75,4 +81,7 @@
         
     </target>
     
+    <target name="clean" />
+    <target name="build" />
+
 </project>
diff --git a/ngs-python/examples/AlignSliceTest.py b/ngs-python/examples/AlignSliceTest.py
index 470c30c..49e5c3f 100644
--- a/ngs-python/examples/AlignSliceTest.py
+++ b/ngs-python/examples/AlignSliceTest.py
@@ -56,6 +56,7 @@ def run(acc, refName, start, stop):
 
 if len(sys.argv) != 5:
     print ("Usage: AlignSliceTest accession reference start stop\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
@@ -63,5 +64,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/AlignSliceTest26.py b/ngs-python/examples/AlignSliceTest26.py
index 12fa81b..65db41b 100644
--- a/ngs-python/examples/AlignSliceTest26.py
+++ b/ngs-python/examples/AlignSliceTest26.py
@@ -56,6 +56,7 @@ def run(acc, refName, start, stop): # this function doesn't release NGS objects
 
 if len(sys.argv) != 5:
     print ("Usage: AlignSliceTest accession reference start stop\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
@@ -63,5 +64,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException, x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/AlignTest.py b/ngs-python/examples/AlignTest.py
index c064bda..a6743b2 100644
--- a/ngs-python/examples/AlignTest.py
+++ b/ngs-python/examples/AlignTest.py
@@ -62,6 +62,7 @@ def run(acc, splitNum, splitNo):
 
 if len(sys.argv) != 4:
     print ("Usage: FragTest accession NumChunks ChunkNo\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
@@ -69,6 +70,8 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
+        exit(1)
 
diff --git a/ngs-python/examples/AlignTest26.py b/ngs-python/examples/AlignTest26.py
index f705a57..53cdf2c 100644
--- a/ngs-python/examples/AlignTest26.py
+++ b/ngs-python/examples/AlignTest26.py
@@ -63,6 +63,7 @@ def run(acc, splitNum, splitNo): # this function doesn't release NGS objects how
 
 if len(sys.argv) != 4:
     print ("Usage: FragTest accession NumChunks ChunkNo\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
@@ -70,5 +71,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException, x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/AlignTest.py b/ngs-python/examples/DumpReferenceFASTA.py
similarity index 53%
copy from ngs-python/examples/AlignTest.py
copy to ngs-python/examples/DumpReferenceFASTA.py
index c064bda..41cae76 100644
--- a/ngs-python/examples/AlignTest.py
+++ b/ngs-python/examples/DumpReferenceFASTA.py
@@ -27,48 +27,60 @@ import traceback
 
 from ngs import NGS
 from ngs.ErrorMsg import ErrorMsg
-from ngs.ReadCollection import ReadCollection
-from ngs.Alignment import Alignment
-from ngs.AlignmentIterator import AlignmentIterator
 
+def process(ref):
+    length = ref.getLength()
+    line = 0
 
-def run(acc, splitNum, splitNo):
-    # open requested accession using SRA implementation of the API
-    with NGS.openReadCollection(acc) as run:
-        run_name = run.getName()
-        
-        # compute window to iterate through
-        MAX_ROW = run.getAlignmentCount()
-        chunk = MAX_ROW / splitNum
-        first = int(round(chunk * (splitNo-1)))
-        next_first = int(round(chunk * (splitNo)))
-        if next_first > MAX_ROW:
-            next_first = MAX_ROW
+    print( ">" + ref.getCanonicalName() )
+    try:
+        offset = 0
+        while offset < length:
+            chunk = ref.getReferenceChunk ( offset, 5000 )
+            chunk_len = len (chunk)
+            
+            chunk_idx = 0
+            while chunk_idx < chunk_len:
+                endIndex = chunk_idx + 70 - line
+                if endIndex > chunk_len:
+                    endIndex = chunk_len
+                chunk_line = chunk [ chunk_idx : endIndex ]
+                line = line + len (chunk_line)
+                chunk_idx = chunk_idx + len (chunk_line)
 
-        # start iterator on reads
-        with run.getAlignmentRange(first+1, next_first-first, Alignment.primaryAlignment) as it:
-            i = 0
-            while it.nextAlignment():
-                print ("{}\t{}\t{}\t{}\t{}\t{}".format(it.getReadId(),
-                    it.getReferenceSpec(),
-                    it.getAlignmentPosition(),
-                    it.getShortCigar(False),
-                    it.getFragmentBases(),
-                    ("aligned" if it.isAligned() else "unaligned"),
-                ))
-                i += 1
-            print ("Read {} alignments for {}".format(i, run_name))
+                sys.stdout.write( chunk_line )
+                if line >= 70:
+                    print("")
+                    line = 0
+            offset = offset + 5000
+    except ErrorMsg as x:
+        pass
 
+def run(acc, refName=None):
+    # open requested accession using SRA implementation of the API
+    with NGS.openReadCollection(acc) as run:
+        if refName:
+            with run.getReference(refName) as ref:
+                process(ref)
+        else:
+            with run.getReferences() as refs:
+                while refs.nextReference():
+                    process(refs)
+                    print("")
 
-if len(sys.argv) != 4:
-    print ("Usage: FragTest accession NumChunks ChunkNo\n")
+if len(sys.argv) < 2 or len(sys.argv) > 3:
+    print ("Usage: DumpReferenceFASTA accession [ reference ]\n")
+    exit(1)
 else:
     try:
-        run(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
+        acc = sys.argv[1]
+        refName = sys.argv[2] if len(sys.argv) == 3 else None
+        run ( acc, refName )
     except ErrorMsg as x:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
-
+        exit(1)
diff --git a/ngs-python/examples/FragTest.py b/ngs-python/examples/FragTest.py
index d5ceabd..8638088 100644
--- a/ngs-python/examples/FragTest.py
+++ b/ngs-python/examples/FragTest.py
@@ -62,6 +62,7 @@ def run(acc, splitNum, splitNo):
 
 if len(sys.argv) != 4:
     print ("Usage: FragTest accession NumChunks ChunkNo\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
@@ -69,5 +70,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/FragTest26.py b/ngs-python/examples/FragTest26.py
index 147517c..7d5c33f 100644
--- a/ngs-python/examples/FragTest26.py
+++ b/ngs-python/examples/FragTest26.py
@@ -62,6 +62,7 @@ def run(acc, splitNum, splitNo): # this function doesn't release NGS objects how
 
 if len(sys.argv) != 4:
     print ("Usage: FragTest accession NumChunks ChunkNo\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
@@ -69,5 +70,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException, x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/PileupTest.py b/ngs-python/examples/PileupTest.py
index 7e7ee63..605eca5 100644
--- a/ngs-python/examples/PileupTest.py
+++ b/ngs-python/examples/PileupTest.py
@@ -98,6 +98,7 @@ def run(acc, refName, start, stop):
 
 if len(sys.argv) != 5:
     print ("Usage: PileupTest accession reference start stop\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
@@ -105,5 +106,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/PileupTest26.py b/ngs-python/examples/PileupTest26.py
index 66ea792..db48b83 100644
--- a/ngs-python/examples/PileupTest26.py
+++ b/ngs-python/examples/PileupTest26.py
@@ -98,6 +98,7 @@ def run(acc, refName, start, stop):
 
 if len(sys.argv) != 5:
     print ("Usage: PileupTest26 accession reference start stop\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
@@ -105,5 +106,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException, x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/RefTest.py b/ngs-python/examples/RefTest.py
index 72c15b6..3218e9e 100644
--- a/ngs-python/examples/RefTest.py
+++ b/ngs-python/examples/RefTest.py
@@ -51,6 +51,7 @@ def run(acc):
 
 if len(sys.argv) != 2:
     print ("Usage: RefTest accession\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1])
@@ -58,5 +59,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException as x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/examples/RefTest26.py b/ngs-python/examples/RefTest26.py
index e5eea33..e189ad4 100644
--- a/ngs-python/examples/RefTest26.py
+++ b/ngs-python/examples/RefTest26.py
@@ -52,6 +52,7 @@ def run(acc): # this function doesn't release NGS objects however it might
 
 if len(sys.argv) != 2:
     print ("Usage: RefTest accession\n")
+    exit(1)
 else:
     try:
         run(sys.argv[1])
@@ -59,5 +60,7 @@ else:
         print (x)
         traceback.print_exc()
         # x.printStackTrace - not implemented
+        exit(1)
     except BaseException, x:
         traceback.print_exc()
+        exit(1)
diff --git a/ngs-python/ngs/Alignment.py b/ngs-python/ngs/Alignment.py
index e1874ce..74f2a71 100644
--- a/ngs-python/ngs/Alignment.py
+++ b/ngs-python/ngs/Alignment.py
@@ -178,7 +178,7 @@ class Alignment(Fragment):
         :returns: '-' if negative strand is transcribed
         :returns: '?' if unknown
         """
-        return getNGSValue(self, NGS.lib_manager.PY_NGS_AlignmentGetRNAOrientation, c_char)
+        return getNGSValue(self, NGS.lib_manager.PY_NGS_AlignmentGetRNAOrientation, c_char).decode("utf-8")
 
     # ------------------------------------------------------------------
     # details of mate alignment            
diff --git a/ngs-python/ngs/LibManager.py b/ngs-python/ngs/LibManager.py
index cd4f1b4..c57bdea 100644
--- a/ngs-python/ngs/LibManager.py
+++ b/ngs-python/ngs/LibManager.py
@@ -246,7 +246,7 @@ class LibManager:
         self._bind(self.c_lib_engine, "PY_NGS_Engine_GetVersion",            [POINTER(c_char_p), POINTER(c_char), c_size_t], None)
         self._bind(self.c_lib_engine, "PY_NGS_Engine_IsValid",               [c_char_p, POINTER(c_int), POINTER(c_char), c_size_t], None)
 
-        # self._bind(self.c_lib_engine, "PY_NGS_Engine_RefcountRelease", [c_void_p, POINTER(c_void_p)], None)
+        # self._bind(self.c_lib_engine, "PY_NGS_Engine_RefcountRelease",       [c_void_p, POINTER(c_char), c_size_t], None)
         # self._bind(self.c_lib_engine, "PY_NGS_Engine_StringData", [c_void_p, POINTER(c_char_p)], None)
         # self._bind(self.c_lib_engine, "PY_NGS_Engine_StringSize", [c_void_p, POINTER(c_size_t)], None)
         
diff --git a/ngs-python/ngs/Pileup.py b/ngs-python/ngs/Pileup.py
index a7af7cc..be784bb 100644
--- a/ngs-python/ngs/Pileup.py
+++ b/ngs-python/ngs/Pileup.py
@@ -48,7 +48,7 @@ class Pileup(PileupEventIterator):
         """
         :return: base at current Reference position
         """
-        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupGetReferenceBase, c_char)
+        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupGetReferenceBase, c_char).decode("utf-8")
 
     # ----------------------------------------------------------------------
     # details of this pileup row
diff --git a/ngs-python/ngs/PileupEvent.py b/ngs-python/ngs/PileupEvent.py
index 6adc651..1ff7f33 100644
--- a/ngs-python/ngs/PileupEvent.py
+++ b/ngs-python/ngs/PileupEvent.py
@@ -100,14 +100,14 @@ class PileupEvent(Refcount):
         :returns: retrieves base aligned at current Reference position
         :throws: ErrorMsg if event is an insertion or deletion
         """
-        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupEventGetAlignmentBase, c_char)
+        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupEventGetAlignmentBase, c_char).decode("utf-8")
 
     def getAlignmentQuality(self):
         """
         :returns: retrieves base aligned at current Reference position
         :throws: ErrorMsg if event is an insertion or deletion
         """
-        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupEventGetAlignmentQuality, c_char)
+        return getNGSValue(self, NGS.lib_manager.PY_NGS_PileupEventGetAlignmentQuality, c_char).decode("utf-8")
 
     def getInsertionBases(self):
         """
diff --git a/ngs-python/ngs/ReadCollection.py b/ngs-python/ngs/ReadCollection.py
index 55005d0..da03196 100644
--- a/ngs-python/ngs/ReadCollection.py
+++ b/ngs-python/ngs/ReadCollection.py
@@ -93,7 +93,7 @@ class ReadCollection(Refcount):
         ret = c_int()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionHasReadGroup(self.ref, spec.encode(), byref(ret), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionHasReadGroup(self.ref, spec.encode("UTF-8"), byref(ret), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
     
@@ -110,7 +110,7 @@ class ReadCollection(Refcount):
         ret = ReadGroup()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionGetReadGroup(self.ref, spec, byref(ret.ref), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionGetReadGroup(self.ref, spec.encode("UTF-8"), byref(ret.ref), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
         
@@ -140,7 +140,7 @@ class ReadCollection(Refcount):
         ret = c_int()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionHasReference(self.ref, spec.encode(), byref(ret), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionHasReference(self.ref, spec.encode("UTF-8"), byref(ret), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
     
@@ -150,7 +150,7 @@ class ReadCollection(Refcount):
         ret = Reference()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionGetReference(self.ref, spec.encode(), byref(ret.ref), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionGetReference(self.ref, spec.encode("UTF-8"), byref(ret.ref), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
         
@@ -166,7 +166,7 @@ class ReadCollection(Refcount):
         ret = Alignment()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionGetAlignment(self.ref, alignmentId, byref(ret.ref), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionGetAlignment(self.ref, alignmentId.encode("UTF-8"), byref(ret.ref), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
 
@@ -226,7 +226,7 @@ class ReadCollection(Refcount):
         ret = Read()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReadCollectionGetRead(self.ref, readId, byref(ret.ref), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReadCollectionGetRead(self.ref, readId.encode("UTF-8"), byref(ret.ref), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
 
@@ -286,7 +286,7 @@ def openReadCollection(spec):
     ERROR_BUFFER_SIZE = 4096
     str_err = create_string_buffer(ERROR_BUFFER_SIZE)
     from . import PY_RES_OK
-    res = NGS.lib_manager.PY_NGS_Engine_ReadCollectionMake(spec.encode(), byref(ret.ref), str_err, len(str_err))
+    res = NGS.lib_manager.PY_NGS_Engine_ReadCollectionMake(spec.encode("UTF-8"), byref(ret.ref), str_err, len(str_err))
     if res != PY_RES_OK:
         raise ErrorMsg(str_err.value)
         
diff --git a/ngs-python/ngs/Refcount.py b/ngs-python/ngs/Refcount.py
index 11784cb..fb3bd03 100644
--- a/ngs-python/ngs/Refcount.py
+++ b/ngs-python/ngs/Refcount.py
@@ -16,6 +16,22 @@ def RefcountRelease(ref):
     finally:
         ngs_str_err.close()
 
+# def RefcountEngineRelease(ref):
+    # """Releases NGS-object imported from ngs engine
+    
+    # :param ref: reference to refcounted NGS-object to be released. It's expected to be of type c_void_p
+    # :returns: None
+    # :throws: ErrorMsg
+    # """
+
+    # ERROR_BUFFER_SIZE = 4096
+    # str_err = create_string_buffer(ERROR_BUFFER_SIZE)
+    # from . import PY_RES_OK
+    # res = NGS.lib_manager.PY_NGS_Engine_RefcountRelease(ref, str_err, len(str_err))
+    # if res != PY_RES_OK:
+        # raise ErrorMsg(str_err.value)
+
+
 def RefcountRawStringRelease(ref):
     """Releases raw string imported from ngs-sdk
     
@@ -29,17 +45,6 @@ def RefcountRawStringRelease(ref):
     finally:
         ngs_str_err.close()
 
-# def RefcountEngineRelease(ref):
-    # """Releases NGS-object imported from ngs engine
-    
-    # :param ref: reference to refcounted NGS-object to be released. It's expected to be of type c_void_p
-    # :returns: None
-    # :throws: ErrorMsg
-    # """
-    # with NGSEngine_String() as ngs_str_err:
-        # res = NGS.lib_manager.PY_NGS_Engine_RefcountRelease(ref, byref(ngs_str_err.ref))
-        # check_res(res, ngs_str_err)
-
 
 class Refcount:
     """ Base class for all refcounted objects imported from ngs-sdk
diff --git a/ngs-python/ngs/Reference.py b/ngs-python/ngs/Reference.py
index dfd9149..df5fd88 100644
--- a/ngs-python/ngs/Reference.py
+++ b/ngs-python/ngs/Reference.py
@@ -103,7 +103,7 @@ class Reference(Refcount):
         ret = Alignment()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_ReferenceGetAlignment(self.ref, alignmentId, byref(ret.ref), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_ReferenceGetAlignment(self.ref, alignmentId.encode("UTF-8"), byref(ret.ref), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
         
diff --git a/ngs-python/ngs/Statistics.py b/ngs-python/ngs/Statistics.py
index fc85965..6bf5c64 100644
--- a/ngs-python/ngs/Statistics.py
+++ b/ngs-python/ngs/Statistics.py
@@ -90,7 +90,7 @@ class Statistics(Refcount):
         ret = c_uint64()
         ngs_str_err = NGS_RawString()
         try:
-            res = NGS.lib_manager.PY_NGS_StatisticsGetAsU64(self.ref, path, byref(ret), byref(ngs_str_err.ref))
+            res = NGS.lib_manager.PY_NGS_StatisticsGetAsU64(self.ref, path.encode("UTF-8"), byref(ret), byref(ngs_str_err.ref))
         finally:
             ngs_str_err.close()
         
diff --git a/ngs-python/setup/package.prl b/ngs-python/setup/package.prl
index d99921f..17135ee 100644
--- a/ngs-python/setup/package.prl
+++ b/ngs-python/setup/package.prl
@@ -1,6 +1,6 @@
 ################################################################################
 sub PACKAGE      { 'ngs-python' }
-sub VERSION      { '1.2.3' }
+sub VERSION      { '1.2.4' }
 sub PACKAGE_TYPE { 'P' }
 sub PACKAGE_NAME { 'NGS-PYTHON' }
 sub PACKAGE_NAMW { 'NGS_PYTHON' }
diff --git a/ngs-sdk/dispatch/PackageItf.cpp b/ngs-sdk/dispatch/PackageItf.cpp
index d7cfdf0..03ce7ea 100644
--- a/ngs-sdk/dispatch/PackageItf.cpp
+++ b/ngs-sdk/dispatch/PackageItf.cpp
@@ -43,3 +43,10 @@ namespace ngs
     }
 
 } // namespace ngs
+
+extern "C" {
+    const char * ngs_PackageItf_getPackageVersion () {
+        static const ngs::String version (ngs::PackageItf::getPackageVersion());
+        return version . data ();
+    }
+}
diff --git a/ngs-sdk/dispatch/version.h b/ngs-sdk/dispatch/version.h
index 7dbd7dd..a9291c9 100644
--- a/ngs-sdk/dispatch/version.h
+++ b/ngs-sdk/dispatch/version.h
@@ -1 +1 @@
-#define NGS_SDK_VERSION "1.2.3"
+#define NGS_SDK_VERSION "1.2.4"
diff --git a/ngs-sdk/examples/DumpReferenceFASTA.cpp b/ngs-sdk/examples/DumpReferenceFASTA.cpp
index df4d16b..d04def4 100644
--- a/ngs-sdk/examples/DumpReferenceFASTA.cpp
+++ b/ngs-sdk/examples/DumpReferenceFASTA.cpp
@@ -69,6 +69,8 @@ public:
                     }
                 }
             }
+            if (line != 0)
+                cout << '\n';
         }
         catch ( ErrorMsg x )
         {
@@ -93,14 +95,13 @@ public:
         while ( refs . nextReference () )
         {
             process ( refs );
-            cout << '\n';
         }
     }
 };
 
 int main (int argc, char const *argv[])
 {
-    if ( argc < 2 )
+    if ( argc < 2 || argc > 3)
     {
         cerr << "Usage: DumpReferenceFASTA accession [ reference ]\n";
     }
diff --git a/ngs-sdk/examples/Makefile b/ngs-sdk/examples/Makefile
index 599befe..bd7340c 100644
--- a/ngs-sdk/examples/Makefile
+++ b/ngs-sdk/examples/Makefile
@@ -25,7 +25,7 @@
 default: std
 
 ifeq (Darwin,$(shell uname -s))
-MFLAGS += -mmacosx-version-min=10.6
+    MFLAGS += -mmacosx-version-min=10.6
 endif
 
 CC = cc $(MFLAGS) $(CFLAGS)
@@ -35,13 +35,14 @@ CXX = c++ $(MFLAGS) $(CPPFLAGS)
 # NCBI_VDB_LIBDIR and NGS_LIBDIR
 include $(CURDIR)/Makefile.config
 
-TARGETS =           \
-    FragTest        \
-    AlignTest       \
-    AlignSliceTest  \
-    RefTest         \
-    PileupTest      \
-    FastqTableDump 
+TARGETS =               \
+	AlignSliceTest      \
+	AlignTest           \
+	DumpReferenceFASTA  \
+	FastqTableDump      \
+	FragTest            \
+	PileupTest          \
+	RefTest             \
 
 # This rule triggers detection of the libraries and headers
 # in addition to building the examples
@@ -61,65 +62,77 @@ clean:
 #     which in turn relies upon ncbi-vdb to access the SRA
 #
 TEST_LIBS =              \
-    -L$(NCBI_VDB_LIBDIR) \
-    -L$(NGS_LIBDIR)      \
-    -lncbi-ngs-c++       \
-    -lngs-c++            \
+	-L$(NCBI_VDB_LIBDIR) \
+	-L$(NGS_LIBDIR)      \
+	-lncbi-ngs-c++       \
+	-lngs-c++            \
 	-lngs-bam-c++        \
-    -lncbi-ngs-c++       \
-    -lncbi-vdb-static    \
-    -lngs-adapt-c++      \
-    -lpthread            \
-    -ldl                 \
-    -lm
+	-lncbi-ngs-c++       \
+	-lncbi-vdb-static    \
+	-lngs-adapt-c++      \
+	-lpthread            \
+	-ldl                 \
+	-lm                  \
 
-# FragTest
-#  access read fragments
-FRAG_TEST_SRC = \
-    FragTest.cpp
 
-FragTest: $(FRAG_TEST_SRC)
-	$(CXX) -g -o $@ $(FRAG_TEST_SRC) $(TEST_LIBS)
+# AlignSliceTest
+#  slice a ReadCollection and output alignments
+ALIGNSLICE_TEST_SRC = \
+	AlignSliceTest.cpp
 
-# RefTest ###################
-REF_TEST_SRC = \
-    RefTest.cpp
+AlignSliceTest: $(ALIGNSLICE_TEST_SRC)
+	$(CXX) -g -o $@ $(ALIGNSLICE_TEST_SRC) $(TEST_LIBS)
 
-RefTest: $(REF_TEST_SRC)
-	$(CXX) -g -o $@ $(REF_TEST_SRC) $(TEST_LIBS)
 
 # AlignTest #################
 #  access alignments
 ALIGN_TEST_SRC = \
-    AlignTest.cpp
+	AlignTest.cpp
 
 AlignTest: $(ALIGN_TEST_SRC)
 	$(CXX) -g -o $@ $(ALIGN_TEST_SRC) $(TEST_LIBS)
 
-# AlignSliceTest
-#  slice a ReadCollection and output alignments
-ALIGNSLICE_TEST_SRC = \
-    AlignSliceTest.cpp
 
-AlignSliceTest: $(ALIGNSLICE_TEST_SRC)
-	$(CXX) -g -o $@ $(ALIGNSLICE_TEST_SRC) $(TEST_LIBS)
+# DumpReferenceFASTA
+DUMP_SRC = \
+	DumpReferenceFASTA.cpp
+DumpReferenceFASTA: $(DUMP_SRC)
+	$(CXX) -g -o $@ $(DUMP_SRC) $(TEST_LIBS)
+
+
+# FastqTableDump
+#  produce fastq-like table
+FASTQ_TABLE_DUMP_OBJ = \
+	FastqTableDump.cpp
+
+FastqTableDump: $(FASTQ_TABLE_DUMP_OBJ)
+	$(CXX) -g -o $@ $(FASTQ_TABLE_DUMP_OBJ) $(TEST_LIBS)
+
+
+# FragTest
+#  access read fragments
+FRAG_TEST_SRC = \
+	FragTest.cpp
+
+FragTest: $(FRAG_TEST_SRC)
+	$(CXX) -g -o $@ $(FRAG_TEST_SRC) $(TEST_LIBS)
 
 
 # PileupTest
 #  slice a ReadCollection and produce pileups
 PILEUP_TEST_OBJ = \
-    PileupTest.cpp
+	PileupTest.cpp
 
 PileupTest: $(PILEUP_TEST_OBJ)
 	$(CXX) -g -o $@ $(PILEUP_TEST_OBJ) $(TEST_LIBS)
 
-# FastqTableDump
-#  produce fastq-like table
-FASTQ_TABLE_DUMP_OBJ = \
-    FastqTableDump.cpp
 
-FastqTableDump: $(FASTQ_TABLE_DUMP_OBJ)
-	$(CXX) -g -o $@ $(FASTQ_TABLE_DUMP_OBJ) $(TEST_LIBS)
+# RefTest ###################
+REF_TEST_SRC = \
+	RefTest.cpp
+
+RefTest: $(REF_TEST_SRC)
+	$(CXX) -g -o $@ $(REF_TEST_SRC) $(TEST_LIBS)
 
 # ===========================================================================
 #
@@ -138,6 +151,9 @@ run_frag:  FragTest
 run_align: AlignTest
 	./$^ ERR225922 10000 2 $(REDIRECT)
 
+run_dump: DumpReferenceFASTA
+	./$^ SRR520124 1 $(REDIRECT)
+
 run_align_slice: AlignSliceTest
 	./$^ SRR1121656 1 1 9999 $(REDIRECT)
 
@@ -147,7 +163,7 @@ run_pileup: PileupTest
 run_ref: RefTest
 	./$^ SRR1121656 $(REDIRECT)
 
-ALL_TESTS = run_frag run_align run_align_slice run_pileup run_ref
+ALL_TESTS = run_frag run_align run_align_slice run_pileup run_ref run_dump
 
 run_all: $(ALL_TESTS)
 
diff --git a/ngs-sdk/examples/expected.txt b/ngs-sdk/examples/expected.txt
index dac7d24..91cdb1b 100644
--- a/ngs-sdk/examples/expected.txt
+++ b/ngs-sdk/examples/expected.txt
@@ -27876,3 +27876,534 @@ GL000225.1	GL000225.1	211173	linear
 GL000192.1	GL000192.1	547496	linear
 NC_007605	NC_007605.1	171823	linear
 hs37d5	hs37d5	35477943	linear
+>1
+AGGGGCCTGCCCGACGGGCGGGCCTTTCGGGGCGCAGGACGGCTGTCCGGGGTCTCCCCGGCCGCCTGCC
+TTGGGAGAGCTGCCGGATCCCCTTTTTTCCAGTCCCCTTACGGAGGTTTCCTCATGTGCCCCGCTTCGCG
+CCGTTCCCGGCCTGCCATCGACATGACCCTGATCGAGCGCCTGGACACGCTGGCCGGCGCCGCCATCGCG
+CGGCTGCCCGATGTGGCCTATCCGCTGATCACCAAGCTGACATCCGCCCGCCTGCTGGCCCCCGCCCGCC
+TGCCGTCCGACGTCGTCACCATCGGCAGCGAGGTGCTCTATCACGACGATCAGGGCGCGCGGGACCGGCG
+CGTGACCCTGTCCTGGCCCGAAGATGCCGACATCAGCCGCCGATCCGTGTCGATCCTGACCCCGGTGGGC
+GTGGCGCTGCTGGGCCTGTCGGCGGGCGACCGGTTCCAGTGGCAGACGCGGGCCGGAGAGCGGCGCAGCC
+TCACCGTGCTGCAGGTCGGGTCGGAGCCGCGGCCCGGGACGACCCCGGCCGCGCCGCGGCCCGGGCTGTC
+CTGAGCGCCGGGACGGGAGCCTACCATGTCGCATCGGAAGATCCCCCGCTACTGTGCCGGATGCGGCGCG
+GCCATTCCCCGGGCCGCCGCCGGACGCTGTCCCTTCTGCCGGGTCGAGTTCGCCCCGGCCGGGGGCGGCG
+CCCGGCCCCCCTCGCCGGGGGGGGCCGGCGATCCCTATCGGCCGCCCTGCCGGACGCGGCGGGGCCGCGC
+CGCCTCTGCCCGCGGGGCGGCCATGATCCGGCTGCGCCCGCTGATCGCGCCCGCGCTGCTGTTGCTCGGC
+ATCGCCGGCATCACCTTCGCGCAGGCCGAGGCGGGCCGGCGCTTCGGCATCGCGCCGCTCGGCCGGAATG
+GCCGGAACGCCCTGCAGATGGCGGCCTATCTCGGCCTCGCCTGGCTTCTCAGCCGGACCTTCGGCCAGCT
+GCTGGCCCGCCTGCGGCCGCAGAGCCGCCCGCTGCCGAAGCTGCTCGGCGATCTGGTCTCGGCCCTTCTG
+TTCCTGACGGCGATCGTCTCGGGGATCCTGCTCATCCTAGGCCACGGTGCCGGCAGCGCGCTGGCGGGGT
+CGGGGGTGGTGCTGGCCCTGTTCGGCTTCGCGATCCGCAATGTGGTGGCCGATACGCTCTCGGGGATCGC
+CTTGGGCCTCGAGGCGCCGTTCCGCATCGGCGACTGGGTCGATATCGAGGGGCTGGGCCGCGGCCGGGTG
+GTCGAGATCGGCTGGCGCACCACGCGGCTTCTGACGCGCGACTCGACCTATGTGATCCTGCCCAACAGCC
+AGGTCTCGCGGCAACGCATCGTCAACTACAGCGCGCCCCGGTCCGAGTTCCGGGCGCAGATGGAGATCAA
+GCTGGGACATGCCACCCCGGCAGCCGAAGGGGCGGACCTCCTGCATAAGGCGCTGCGGGAGGCGCCGCTG
+ATCCGCCAGTCGCCCGCGCCCGACGTGCGCATCCAGGCCATCGAGCCCGATGGGGTGCGGTATGCGCTGC
+GCTACTGGCTGGGCCGGTTCGATCACGAATGGGAGTGCCGCGATGCGATCTGGCGCGAGGTGGATGCGGC
+ACTCCGCCGGGCCGGGATCCCGCTGGCGCAGCCCCCCGTCGCCCTGCTCTGCGCCCGTGAGGGAGGCGCG
+ACACCGGGGGCAGGGATGCCGGCCGGCGTCCCCGTCGCCCTGCGCTGACGCCCGGGCAGACGGGCCCGTC
+GGGGGGCGGCGGCAAGACATGCGACCGGACCTCCTTGGCTCCTGCCTCCTCGAGCGCGGCCTGCACCGCC
+TCGAGCGTCTACAGGACCCGCGCGTGCCGGTCGCCCCGGGCACCGATCCAGGTGGCCCCGCGCGAGGTCT
+CGCGCCGGACGGCTTGGCATGGGCCCGCACATCGGCTAGGTCCGTCCCACTCGTCAGGACCCGGGTGCGA
+TCCCCGGGTGGCTCCTCCGGCCGCCGATCCGCCGGACAACCCACCAGCACCAGCAGGAACATCCGCCGGC
+GCGCAGGTCCGGGCCGGCGGGGAACGGGACATTCATGATTTCATTCGCCACCTATCGCCAGCAATGGCTG
+GGCCATGTGCGGGGCGACCTGCTCTCGGGGCTCGTCGTGGCGCTGGCCCTCATTCCCGAGGCCATCGCCT
+TCTCGATCATCGCGGGCGTCGATCCGAAGGTCGGGCTCTATGCCTCCTTCTCGATCGCCGTCGTCACCGC
+CATCGCGGGCGGACGGCCCGGGATGATCTCGGCCGCCACCGCGGCGACCGCCGTGCTGATGGTGACCCTC
+GTGCGCGACCACGGGCTCCAGTATCTGCTGGCCGCCACCGTGCTTGCGGGGCTGATCCAGATCGCGCTCG
+GGCTCCTGAAGCTCGGCTTCGTCATGCGCTATGTCTCGCGCTCGGTGATGACGGGCTTCGTCAATGCGCT
+GGCGATCCTGATCTTCCTTGCGCAATTGCCCGAGCTCGACCCGCGGGCCGTGCCGCCGCTGACCTATCTC
+CTCGTGGCGGCAGGCCTGGCCATCATCTATCTCTTCCCGCGCCTCACCCGCGCCGTGCCCTCGCCGCTCG
+TCACCATCATCGTGCTGACGGCGCTGACGCTCGGCCTCGGGCTCGACGTGCGGACGGTGGGCGACATGGG
+CGCGCTGCCCGACACGCTGCCCGTCTTCCTGATCCCGGACATTCCCCTGACCTTCGAGACGCTGCGGATC
+ATCCTGCCCCCGGCCACAGCCGTGGCGGTGGTGGGGCTTCTGGAAAGCCTGATGACGCAGACCCTCGTCG
+ACGAGCTGACCGACACCCGCTCGAGCCGCAATCAGGAATGTATCGGGCAGGGGCTGGCCAACGCCGCCAC
+CGGCTTCATCGGCGGCATGGCGGGCTGCGCCATGATCGGCCAGTCGATGATCAACGTGAAGTCGGGCGGG
+CGCGGGCGGCTGTCCTGCTTCGTGGCGGGCGTGTTCCTGCTGATCCTCGTCGTGGGGCTCGGCGATGTCG
+TCAGCCGGATCCCGATGGCCGCGCTCGTCGCCATCATGATCATGGTCTCGATCGGCACCTTCTCCTGGTC
+GTCCCTCAAGGCGCTGCGCACCCATCCCCGGTCCTCCTCCGTGGTGATGCTGGCGACGGTGGCGACCGTG
+GTCTGGACCCACAATCTGGCCTTGGGCGTCCTCGTGGGCGTGCTGCTCTCGGGGATCTTCTTCGCCGCCA
+AGATTGCGCAGCTCTTCGCGGTCAGCTCCGAACTCTCGGCCTGCGGGCGCGCGCGGACCTACCGGGTCGA
+GGGCCAGCTCTTCTACGGCTCGGTCGAGGATTTCATGGCCGCCTTCGACTTCCGCGAGCCGCTCGAGCGC
+GTCACCATCGACGTGAGCCGCGCCCATATCTGGGACATCTCTTCGGTGCAGGCGCTGGACATGGCGGTGC
+TGAAGTTCCGCCGCGAGGGGGCCGAGGTGCGGATCGTGGGCATGAACGAGGCCTCCGAGACTCTCGTCGA
+CCGGCTGGCCCTGCACGACAGGCCGGGGGCCCTGGACCGGCTCACGGCCCATTGAGAGGGAGGACGACAT
+GACCGACAGGATCATGGCACTGGTGGACGGCTCGGGCTTCTCGCGCAGCGTCTGCCTTCATGCGGCCTGG
+CTCGCGCAGAGGCTGGAGCTTCCGGTGGACCTGCTGCATGTGCTGGGCCGCCGCGAGGCCGCCGATCGGG
+GCGATCTGTCGGGCGCGCTGCAGCTCGGCGCCCGCACCGCCCTGCTCGAGGAACTGGCCGCGCTCGATGC
+CGAGCGGGCGCGGCTCGCGCAGGCGCAGGGGCGGGCGATCCTCGAGGATGCGCAGGCGATCCTGGCCGCC
+GAGAGCGTGGAGACCACGCCCCATCTGCGGCAGGGAGACCTGATCGACACGGTGGCCGGGTTCGAGCGCT
+CGGGGCGGGCGCTGGTGGTTGGCAAGCGCGGCAGGGCCGCGGGCTTCGCCAGCGCCCATCTCGGCTCCAA
+TCTCGAGCGCCTCCTGCGCGCCTCGAAGCTGCCGGTCCTCATCGTGCCCGCGGACTGCCGGCCGGTGCGC
+AAGGTGCTGGTGGCCCATGACGGCGGCAGAAGCGCCCGCGGGGCGATCGAGCGGATGGCGGCAAGCCCGG
+TCTTCCGCGGCCTTGCGATCACGCTGGCCTGCGCGGGCGGCGAGGAGGCCCGCGCGACGCTCGAGCGCGC
+CCGCGGCACGCTGCTGGCCGCGGGGCTGGCGGCCGAGACCTGCCTCCTGTCCGGCGCGCCCGAGGTGGCG
+CTCGAGCGGAAGATCGAGGCCGAGGGCTTCGACCTTCTGGTGATGGGCGCCTATGGCCACAGCCGCATCC
+GCACCCTGATCATCGGCTCGACCACCACCGCCCTGATCCGCGCCTGCACGGTCCCGATGCTCGTCTACCG
+CTGACCGGGGCGCGACAGGGCGGCCTGCCGTTTCTCGGCGGGCCGCCGGTCAGGCGCTCCCGGCCTTTCA
+AGCCATCGACCCGAAGAGGCTCCTATCCCGGAAAGAGGCGGGCCCGCCGGCCTACCCGGCCATCAGTCTG
+GACAGGCTCGGCCACTGGAACACCAGCACGCCGCCCATCACCGTCGCGGCCCCCAGCACCCGCCACAGAT
+CCAGTGGCTTCCCCGCCAGCCCCATCAGTCCGAACCTGTCGATCAGGAGCGAGGTGAGGAGCTGCCCCGC
+GACAACCGCGATCATGAAGCCCGCGGCACCCATCGTCGGCATCAGGAGGATCGCGCCGGTGACGTAGACT
+ATCCCCACCAGCCCGCCGATCCAGATCCAGGATGGCTGCGCCAGGGCCATGCCCAGATCCGGCACGGGCA
+CCCGCATGGCCAGCAGCACCGGCAGGATGCAGATCAGGCTGACCAGCAATGAGGCAACCGCAGCCCAGAG
+GGGATGCCCCAGCGCACGGCCGAGCGCGGCATTGGCGCCGCCCTGAAGCGGCACGAGCGCACCCGAGACG
+AGCGCGAGGCAGGACAGGACAAGCAGGGGCATTCCGATCTCCTTTTCTCTGCCGCCGGTATAGGCCCCGC
+ATCGGATGAATTTGAAATTCGACCTTGCTTCCCTATCATGCAGCATATGAATAATCTTCGTGCGGTCGAT
+CTGAACCTTCTTGTCGTGCTGGATGCCCTTCTGGCGGAGCGCCATCTGTCGCGGGCGGCGGCTCGGCTGA
+ACATGAGCCAGCCTGCGGTCAGCCATGCGCTCGCCCGGCTGCGGCATCTGCTGGGCGATCCGCTGTTCCG
+GCGCGAGGGCGGTCGGATGGTGCCCACGCTGCGCGCGCAGGCGCTGGCCCCGCCGCTGGCCGAGGCTCTT
+GCGCAGATCCGCAGCGTGCTCGGGCCCGATGCGTTTGACCCGGCCGCGCCGCATGTGTTTCGCCTGACCA
+TGTCGGATTACGGCGCGGGGCTGGTGTTGCCGGGCCTGATGCGGCAGCTGCGCCGGATCGCACCGGAGAT
+CCGGCTGGTGGTCACCCAGAAGAGCCGGGAGGCGATGATCGAGGCCGTGAGCGAAGGCGAGGCCGATCTT
+GCGCTCGGCGTCTTTCCCGGGCTGCCGCCGCAGCTCGAGGCGGAGCTCTTGCTGACCGACCGCTATATAT
+GCCTGCTGGACCCGGCCCATCAGCCCGTCCGGTCCGGCGGCCTGACTGCGGAAGCCTTCTGGTCGGCTCC
+GCATGCCCATGTGGCGGTGCAGGGTGACTTCACCACGGAAATCGATCTGCATCTGAAGGATCGGGGCGGT
+CCCCGGCGCCTTGCGCTGATCCTGCCGCACTGGAGCATCGCACCCAAGGTCATCGCCGGCACGGATCTGA
+TCCTGACCGTTGCCAGCCGTGCCGTGCCCGCAGCGCCGGAGCCGCTGATTGTCACGGCGCCCCCCGTTCC
+GTTGCCTCCGATCCCGTTCAGCGCGATCCACGCCAGACGCCGCAAGGCCGATCCGGCGCTCAGATGGCTG
+ATCGCCCGGCTGCGGGAGGTCGTTGGCGAAGAGGCGGGAACCGCCGTGGCATGAGCCGCGAAGAAGGCCC
+CGAACTCACGCCGAAGACGAGCTCGGCCGCGATCAGCGTCCGCCAGGCGAAGGCCCAGCCGATCTTGAGG
+CCGGTCAGGATGCTCGGGAAGGCCGCCGGGATCAGGATCTTGGTGATGAAGCCCCAGCCCTTCAGCCCGT
+AGTTATGTCGTCCTGCCGCCCCCGCGCCACGAGGGCCGGATAAGCGCGGGCTCGCCCTTCGCGCAGCTCC
+AGAAGGCGGGAATGCCGACTGCCATCATGGCCGACATTCAGCGCCAGAGAAACGAGGATGCCCGGGAAGC
+CGTGCTCCATGCCATCCGCGGCGAGGTGGCGCGGGCGTGGCTCGGATTGCACAGCTCCGTGCGCGAGCGG
+ACCGGGATTGTGGTTCTGACCAACCGCGTCCGGGGGAAGTGAATGCCGCGATCCGCGACGAGCTGAAGGG
+GGAACATCGGCTCGGCGCTCAGGATGTAACGGTCGCCAGTCTCACGCCGCTCTCGCTCACCCGCGCCGAA
+GCGCGCGAGGCGGCCAGCTACAAGGCTGGTGATGTGGTGATCTCGGTGCGCAGCGTAGAGGGGTTGGAGC
+GGGACAAACTCTACCGGGTTACATCCACCCTGGTCAACCTCGTCTCAAGGAGAGCTGCAGCCCGATCAGC
+AAGGCCTGCACTCTCTGTTCGCCCGCGCGAGGACAGTCAACTGAGCGGGCGGAGATTGGGCGTCCTATCG
+GACCATGCACGGCTGCGACATAACCGGCTCGGCGAGAAGGGCGGGGCGCCCGCGGCGCCGGGACGAGAGG
+GTATCATGGCTCCGGTCACCTCCGCTTGCGGACGGAACTAGAGCCGTGGACCGGCAACGCCGGGGTCACG
+CCCAGATCCCTCGAGGCCAATACCGCGCGGGTTCTCTCCGGGCAATCCGGCGAGGTAAGCCGCGACCTGC
+GACCGCGACCGCGATATATCGGCGAGCCTGCGATCGAGCTTTGCCAGTTCATCCGTGAGGCGGGCGCGCA
+GCCGCTCGCAAGGATGGAACGTCGGCTCGGGGCTGATGATGCAGGGCAGCAGGTCGCGCATTGCCTCGAC
+CGTGAGCCCGGCCTCGGCCAGCTGTCGGATCATGCAAGCCTGCTCCAGATCGGCCGGGCCATAGTCGCGG
+TAGCCGCTTCCCGTCCGATGCGGACGCAGAAGCCCTTCCGCCTCGTAGAAGCGTAGCATTCGGACGCTGA
+TGCCACTGCGGTCGGATACATCGCCGATCTTCACCACGCTCTCCTTCTTGGGACTTGACCCTGACAACGG
+TGTCAGAGTGCAAAAGGAGTGCCGACACATCAAGTCGGAGAAGAAGCAATGTCGAAGATCGAACATGTCC
+ATCACAAGGGCGCGCGTGTGGGCTATCGTGACGACGGGGAAGGCAAGCCGCTCATCCTCGTCCACGGGAC
+CGGGGGAGACGGCGAGGCCAACTTTGATGGCCTTCTGCCGCATCTGTCGCGGCGGCGCGTGCTGCGGCCA
+GACTATGCCGGATCCGGACTCACAGTGGATGCCGCCGAAGTGCTGACGGTCGATCATCTGGTGCATCAGG
+TCATCGCCACCGTGGACCATGCGGGGATCGACAGTTTCGATCTGGCAGGCTTTTCTCTCGGCTCTGCCGT
+CGCGGTCCGGCTCGCCGCCCTGCATCCCGGGAGGGTCGACAGGCTCGTGCTGATTGGAGGGTTCATTCAC
+GCGGCCGACCCGCGCTCACGTCTGCAGTTCAAGCTCTGGGCGGACCTCGCCCGGAAAGATCCTGCCACCC
+TTGCGCGGCTCATGATGCTGACCGGTTTCAGCTACGCCTTCCTGTCGGCGATCACCGACTTGGATTCGGT
+GATCGCCGGCATGGTATCGGGCGGCAACTGGGAGGGAGTTGCGCGACAGGCGGAGCTGGATCTGCGAGTT
+GATGTCTCTCGTGAGCTCGGCCGTGTCAAAGCTCCAACCCTCGTGATCGGCAACCGGTGCGATCAGATGG
+TGGATCCGGCGGCTTCGATCGCGCTCGCTGCGGGCATAGCGGATGCCACCCTCGCTTGGCTTGAGGGGCC
+GCATCTTGCGTTGATGGAACGACCGGACGTCGCGGCGGACCTTTTGATGCGTCATCTGGCTGACTGAGCT
+CACCGCCTCGAGGGGCGCTGCAGCCCGATGGGCGAGGGCCGCGCTCTCAGCTCACGCGCGGGAGGATCGT
+CACCCGAAAGCCCGACACATCGGCCGACCTCCGATAGCGGGGTGCGGGCGTTTTCCTGAAGCGCTTCGAG
+GATTGCGCTGTCAAGGCGGTCGAGCTCACTGGTCGGCATGTTCCACCACGGATTCCGTTAACTCATCGGA
+AGTGTGCCAAAAACGCCGATGAATTGCCATTCCCGGCATGCGTTCGGCAAGGGACACTCTAGAAAGGACA
+TCAGGAGATTAGCATGGGGCGTCGTTTCGTTATGGTGCCGGGCATCGGGGGATCCGGCCCTGAGCATTGG
+CAGAGCCATTGGGAAAGTCTCTATCCGAACACCCTCCGGATAGAGCCGAATTCCTGGGATGAGCCCGACC
+TTGCGGACTGGTTCGCCGCCCTGGACCGGGCGGTCGCCGCAGCACCTTATCCGCCGGTGCTGGTATGCCA
+TTCGCTCGGGTGCCTGCTCTTTGCCCACTGGCGTGCGGCGTCGTCCCGTGCCATCGCCGCGGCATTTCTT
+GTTGCCGTGCCGGACCCGAGCGGGCCGGCTTTCCCGGCGCAGGCAAAGGCATTCGGAGCGCTACCTGCAA
+CGGGGTTTGGTGAGCGGCCGGTGTTGGCCGTCGCAAGTGAGAACGATCCCTATGATCCGGAGGCGAGTGC
+GATAGCCTGGGCTGTCAGACAAGGCGCCTGGCCGCGTCGTCTCGGCCCAAGGGGCCATTTGAACGAGGCG
+TCGAACATCGGCGCCTGGCCCGAAGGCCAAGAGCTTCTGGCAGATTTCCTGGACAAGATCGGAGAGTAGC
+CATGGACGTTGCAACTGCATTGCTGAGCTTTTCCATTGCAGCGGCTTTGCTGACGATCACACCGGGGCTC
+GATACAGCCCTCGTTCTGCGGACGGCGGCGGTCGAGGGGCCGCGCCGGGCGATGCTGGCGGGGGCAGGGG
+TGGTGACCGGGGTGCTGGCATGGGGATTGATTGCGGCTTTGGGGCTCGGTGCTGTGCTGGCCGTGTCGGA
+ACTGGCTTACCGTTGTCTTCAGCTTGCCGGCGCGGCCTACCTGATCTGGCTGGGTATCGGGATGTTGCGG
+GGAGCGTTGCGTGCGCGAGAGCCGGGCCTGCCCAAGGTCATGGCGCCTTCCGCACCAAATTGGTTCCTGC
+GCGGGGTAATGACCAACCTTCTTAACCCCAAGGTCGGTGTCTTCTATATCAGCTTCCTGCCGCAGTTTCT
+GCCCGTGGGCGTTTCGGTGGTGCCGTTCAGCGTCCTGCTCGCGGGGATACACGCGTCGATGGGGCTGATC
+TTTTTTGCAGCGCTGACTGCCGCGACAGTGCCGTTTCAGAATGCCCTGAACGGCCCTCGCCTGCCTCGGC
+TCCTCGACGGGGTCACCGGCAGTGTCTTGATCGGGTTCGCCCTGCGACTGCTGACGGAGCGGCGCGTGGG
+ATGACCTCAGCTCTCGATCCGACGCTGCAACTGACCGGGCGTGATCCCATGGGCGGCCTGAAAGGCGGCC
+ACGAAGCCGCTCGCTGTGGCGTAGCCGGCAGCATGGGCTGCATGTTGCACGCTCTTGCCGGCCATCAACG
+GGGCAATTGCGCGTGCCAACCGCAGGTCTCGCATCCAGGTGGTCCAGCTCTGCCCGGTGTCGCGACGGGC
+GAGCCGTTGCAGGCTGCGCCGCGACAGCGCCAGTGCCGCGGCCCAGTGGTCGAGCGAATGGTCGGCCCCA
+TCGAGATGTGCCAGAGCGATACGACGCAGGCGCGGGTCGGTTGGTAGCGGCAGCGTGGGCGCGGGGGCGG
+GGCGCGCAAGCCGGTCCCACAGCACGGCCGTCAGCCGGGCGAAGGCGGGCTCTTGCCGGTCGGCGCGGCT
+GGACCCTGCGAGAGTGCGGAGAAGTTCGGCCTCCAGCGCTTCGAGAGGGAAAGGTGTGGGGGCCTTGGGC
+AGTGGCGCCGCGGCGGGTCGGGTGTAGAGGCTGACCGATTTCCGCGCGCCCTCGGCCCGGATGCGGTGGC
+GGTGCGTCGGTGGAAGCCAGATCGCCATGCCGGGAGAGAGAAGATGCAGCCGGCCTCCTGTCTCGACCGT
+CACCGGCCGGTCCGGGCACCAGGCGAGCTGCCCGCGCCAGTGCGCATGCGCCTCGGGCATTGTGCCGGGT
+GTGAAGCTCGTGATCCTGCCGATCACCGGGCTTCCATCCTCGGCAAATCCTCCGATCTCATCGCGCTGCA
+TGCTGGCACCTCCGGGGTATCATCTGGCACCGGGGCAACACATTTTTCCAGCGCTTCCGTCACGATCGCG
+CGGAGGCGGAGCGGAGGACCGTATGGATATGGCGACAATCGCGCTGCTCGCGGGCGCAGGGCTGCTCGGC
+GGGCTGTGCAATGCGATCGCGGGCGGCGGCACGTTTTTTACCTTCCCGGCGCTGCTGGCCGTGGGGCTGC
+CGCCGGTGACGGCGGGCGCAACCAGCGCAGTGGCGATCTGGCCCGGCCATGCGGCCAGCCTGATCGGCGA
+AGGCGCGGTGCTGCGTCAGGACCTGATCGCGCGGCCCGGGCGCGTCACGGTGTTTGCGCTGGCCTCGGCG
+GCGGGGGCCGGGCTGTTGCTGCTGTCGGGAGATGCACTGTTCCGGCAGTTGGTCCCCTGGCTGCTGCTTT
+TCGCGACGCTGCTGTTTGCGGCAGGGCCCATGCTCAACCGCTGGCTTGCCCGCTGCGGGGTGTCGATCGG
+GCCAGTCAGCGCCGCGTGCGCCGAGGGGGGCGTGGCCCTTTATGGTGGCTACTTTGGGGCAGGGCTGGGG
+GTGCTGCTGCTGGCGCTGCTGACCGTGACGGGAGACGACGATCTGAAGCGGCTGAACGTGGTCAAGAATG
+CTCTGGCGACACTTGCGACCAGTATCGCCGTCCTGATCTTCGCCTTTGGCGGCGCGGTCGTCTGGGGGCC
+GGCTGCCCTGGTCTTCCTGGGGGCGACGGCAGGTGGTGTCATCGGTGGCCGGCTGGCGCGCCGGGTGAAC
+CCGCAAACCCTGCGCGCCGCGATCGTCTGCCTCGGCCTGTTGCTGGTCTGGCACTACGCGTGAGCCCGGG
+TCGAGGCGCGGAACGCCTCGCGCAGGGCCGTGGTAATCCGCCCCACGGGCCATGTGCTGTGCTTGCCGGG
+GCGGTCGAGCGACCACGGGACGAAGCTCGACCGACGTGCCCGTGACGAAGACCTCGTCCGCTGCATCCAG
+ATCGTCGAGGCTGACGGTTCCTTCATGAACCGACAGGCCGAGGCCACGCGCAAGGTCGAAGACATGGCGC
+TTGGTCAGGCTGTCGAGAAAGCATGTAGGAAGGGGAGACAGAAGCCTGCCATTCCGGACAAGGACGATGT
+TCGTCACCGTGGTTTCGGCGACATGGCCTGCCATATCCAGCATGAGGGCATCGTCATGTCCGCTACGGGC
+AGCTGCGGCCCGCGACAAGGTTCCGGTCATGTAGAGCCCCGAGCATTTCGACGCCGTCGGCGCCGTATCG
+GGCGCGGGGCGCCGCCAATCCGACAGAACCAGGCGCAATCCGCCGGTCCCGTCCCCAAGGGCGGTCTCCA
+CCGGCCAGTCCCAGGCCGCGATGGCGGTATGGATCCGGCACCCCTGTGCGGAAACGGTGACGCTTTCACT
+GCCGCGCCAGGCGATCGCCCGAACATAGGCGTCCTTCAGTCCGCCAGCCCAAAGCACGGCCTCGGCGGCG
+GCCTGAAGATCATCGACCAGCCATGGCAGCGTGTAGCCGAGAAGTTCGGTCGAGCGCTGCAGGCATCGGA
+AATGCTCCTTGCCCAGAAACAGACGACCGTCATAGGCGCGGATAATCGCGTTTCAGCGGCGTCGACGACA
+ATCCGCGTGCCCCCGTTACCTTATAAGCGGTGCCCAGCATATAGGGTCGCCAGAGCACGGTCCGACCCAT
+GTCTGCCGCGATGGCCTCGATCCGCTGCGCCGCGAAGAAGGCGTAGCCGGACGAGAAGCCGAACCAGAAC
+TCGAGGGAACTAATAGCTCTTCGCCGTCCCAGTAATCGACCGCATCCGCGTTTCGGAAGGAACTGGCAAC
+CCGGCGCTTTGCCTTGTCACCTCCGTGCGCAGCGCCCGCGAAGACTGTCAGCTTGCCGCTGTCGGGATGC
+CTGGCATGGGTTTCAAGGTCAGTTCGGGAAAGTCTTGCCATTCTTCGGGTCTCCTTCTCCGTCCGCGTTA
+GCGGTCGGGGCTGACTGTCATGCGGCAGCATGGCTGCTCGCAATTGAGGAATCTTCCGGAGGTCCTGAGG
+ATTTCGCGGCGACGAACACAGAGAGGAATTCTCAATATCCGCTGAGGGATCCGAAATTCATGGCTCTGGT
+CACGAGGCGCATTCTCTGGGGGAACACACCGGAGGTGACCATGAACCCGCGATGCACGGCAAATCCAGCG
+CAAGAGCACGACAAAGATAGTCTTGCATCAGGCCCGGCTCTGCCGCCGCGCCGCTTTCGGGCCTTTCACC
+GCTTGAGCGACAGGGAGTTGAAATATCTGGGATTGGATCGCCAAAATCTGCCGATCTTCAATCCTGTTCA
+GGCCATTCGCCGAGACGACCTGTTCTAGCGCGATGCGGGCAGGTCTGGCGTATCATGCAAGCAGATCAGT
+GTTTGCATCCCCGTGGCGACATGTTTGCGGCGTTCTCCATCAACGCCCCATACATCGAGCTGGCAGATGG
+TCAGTGTGCGACCATTCTTGATCACGCGGCCGACAGCCTCGGTAAAATCTCCTTGCGCCGGGCTGATCAG
+GTTCAGTTTGAACTCGACCGTCAGGACCGTACTGCCTTCGGGGAAGAGGAGGAAATGAGCGTAACCGCCT
+GCGCTGTCGGCGATGGCCGATGTTCCGGCGGCATGGAAGTAGCCATGCTGCTGCGTGAGTTCTTGGCGGA
+ACGGGAGACCTCGAGCCGCTACATGATGGTCGAAGCCTTTGTCCAGATCGACAAGGAGGAGATCGACCCC
+ATTCTAAGCATAGCCACGAAAGCCGCCTGATCATGCCCTCAGGCCATCCGGATAATCATACCAGCTTGAC
+GGACGTGCCCCCCCGTCATTGCCTAGGCCGTTCCCAGGGGGCTCCATCGCCTTTCTCCCTCGGCACCACC
+AGTGCGCGACCGGAGTCCGGGTGAGGCAGCTTCAGCATCGGCAGGTCGTAGATGCGCTGCAGGCGGACGG
+GCTGCATGATGTCGGCGACAGGGCCGCTGTCGAGGATCTTGCCGGCCCGCAGCGCCACGAGATCGTCGCA
+GAAGCGCCCGGCAAGGTTCACGTCGTGCAGCACCATCACCACAGTGAGCCCCTGCCGGCGGTTGAGCCCG
+CGAAGGAGCGACAACACCTCGATCTGATGCGCGGGATCGAGCGCGGAGGTGGGCTCGTCCAGGAGGAGGC
+AACCCGCCCCCTGCGCGAGGAGCATGGCGATCCGGGCCCGCTGCCGCTCGCCGCCCGAAAGGGTCTCCAC
+GGGGCTTTCGGCCTGGTCGGCGAGGCCTGCCTGGCGCAGGGCGTCCTGCTGGCGGGCGCGGTCCTCGGCG
+CCGAAGCGGCCGAAGGCGCCGTGCCAGGGAAAGCGGCCGAGCGCCACCAGCTCGGCGACCGTCAGGCCGG
+GGACGTGGGGCGGCGTCTGCGGCAGATGCGCCAGTTGCCGGGCAAAGTCGCTGGCGGCATAGGCGGCCAG
+AGGTCGACCGCGAAACAGGACTTGCCCGGCGGAGGGCGCGAGCTGCCGCGTCATCAGGCGCATGAGGGTC
+GATTTCCCCGAGCCGTTAGGCCCGAGGATGCCGGTCACGGAGCCGCGGGCGATGCGGAGATCCAGCCCCT
+CAAGGAGTTGCTGACCGGCGATTTGCACGCTCGCCTGACGGAGGTCGAATTCTGGAGAGCTGTGGGTCAT
+GGATGTCCTTCGCCGTGACGGGGCAGGGAGCCTTCCGCTGCGCGGCATCAAGCGGCACGCTTGCGGAGTT
+GCCAGAGAAAGAAGGGGCCGCCCAGGAGCGCTGCGAGCAGGCCGGGCGAGATTGGCCAAGGCCAGGCCAG
+CAGCCCGCCCACCCATTGCGCAAGGACCATGACCGAGGCGCCGGTCGCGACCGAAGCGAGGGCCGCCGGC
+GCGGTGGCGCGGAACCCCATTGTCGCCACGAGATGGGGTACGATCAGGCCGACGAAGCTGATCGGACCGA
+GGGCGATCGTGCCCGCGGCAGCGGCAAGAGACGCGAGCGCAAGCCCCGCAGCGCGGGCGGGCGTCACGGC
+CAGCCCGCGCCCTGCGGCGACCGCCTCGTCGAGCGCGAGCAGGTCGAACCAGCGCCGCAGGAGGAGCGCC
+ACCGCCAGTACCGCGATCGCCACGCTCCAGGCCAGCAGAGCCTGGGCGAGGCTCGCGCTGCCGGTGGACC
+CGGAGAACCAGCTGAGGAGCGCTGCGCCTTTCGGCCCGCCCGAGGCCAGCACCAGCGTCAGAAGCGCCTG
+CGCCGTGCTGCCGAACCCCACGCCGATCAGCAGCAGACGCGAGGTCGCAAACCGGACCCGCGCGGCCAGC
+AGCGTCACCAGCGCCAGCGTCGCTCCTGCGCCTGTGGCCGTCAGGGCGAAGCGCGAGACGAGCCCGCTTT
+CCGGCAGGAAGACCATGGCCAGCGCGAAGGCAAGGCCCGCCCCATGCCCGACGCCGAGGAGGTCGGGGCT
+CGTCAGCGGGTTGCGCAGGAGGCGCTGGAGCAGAAGGCCCGAGAGCGCAAGACAGGCGCCTGCGCCGGCC
+GCGAGCAGCAGCGGCGGCAGGCGCCAGCGCAGGACGGCGGCCAGATCCCTGGCCGTGGTGAGGTGCAGGC
+CGGCTTCCGAGCGACCGATCAGCAGCGCGAGGGCGAGCAGGACAGGCACGGCAAGCGCCAAAGGAAGCAG
+TGCCCGCATCGGACGCCGGGGCCGGGCGAGCGCCGGCGGTTCGGGGCGCGCGGGAAGATCCGGGCTTCGC
+GATCCGAGCGACAGAAAAACGAGAAGCGGTCCAATGAAGAGGCCTGACGCCGCGCCGACCGGGACGTCCC
+CGGCAAGACCCGAGAGCAGCCGCGCCGTCTGGTCGGCAAGCAGCAGCAGGACCGCGCCCCAGAGTCCCGC
+GCGGGGCAGGTCGGGCCGGGAGCGACCCCCAGACCTGCCGCCCAGGCCGCGGGCGAGCGCGGGGCCCGCG
+AGCCCCACGAAGCCGATCAGGCCCACCGTCGCCACCACCGAAGCCGTGATCCAGGCCGCGGCGGCGAGCA
+GCAGGAGCTTGGTCCGGCGCACGGAGAGGCCGAGGCCCTCTGCGGTCTCCTCGCCCAGCATCAGAAGCTG
+GAGCGGCCGGTGCATCAGCCACAGCGCCCCCGCCACGGGGGCGGTCTGCGCGAGAAGGCCGAGGCCGGGT
+TGCCAGCCGGCCTGCGCCAGCGAGCCGGCCTGCCATGTCAGCAGCTCCTGCAGGAAATCGTGGTTGAAGA
+GGACGAGAAGCGCATGGGCGGCCGCGGCGCAGAGATTGACCATCACGCCGGCGAGCACCAGCGCCTGACT
+GTGCAGGCCGCGGCCCCATGCAACGGCCAGCACCAGGATCAGCGCCCCCGCGGCTCCGGTCAGGGCAAGG
+AGCCCCGGCGCGGCCTGCCAGAGAGCCGGAGCCAGCAGCAGCCCTGCGGCCAGTGCCAGCGAGGCGCCAC
+CCGAGATGCCGAGGAGCCCGGGTTCGGCCAGCGGGTTGGCGAAGATGCGCTGGCAGACCTCGCCCGCCAT
+CGAGAGAAGGAACCCCGCGAGAAGCGCCATGGCGAGGCGCGGCAGGCTGCTCTGGGTCAGCACGAGCCGG
+GCGAGCCCGTCGCCCGCCAGCGCCTCGGGCAAGAGGGGCAGCAGACCTTGCAGCGTGAGCGCGCCGGCGA
+GGAGAAGGAGAAGCGTGCGCGCCATGGATCAGCCTTGCATGAGGGCCGCGGCGACCGTTTCGGCCAGATG
+CCGGGCCGAGAGCAGCGCGCCCTGCGGATAGAAGCTGCCGATCCAGTGCGCACGCCCCGACGCGACGGCG
+GGCACCGCGCGCCAGAGGGCGCTCGCCCGCAGCATCCGCTCGGTCCGCGGCCGCATCGAGGCGATCTCGA
+CCAGCAGGATGGTGGCGTCTTCCAGCCGGATCAGCTCCTCGAGAGAGGCGCGGTAGGTGCCGAGCGCAGT
+GACCGGGCCCGTCCAGGCGTTGGCGAGGCCCATCCGCGCCAGCACCGCGTCGGGCAGGCTGCCACGACCG
+TAGAGGGTGAAGAGCCGCCCCGAGAGGTCGGGGACGCAGACGAGGACGGAGCCGCGGTCCGCCGGCACAC
+GCCGGTCCTCGGTCGTCAGGACCGCCTCCGTCCCGGCCACAAGCCGTGCAGCGCTGTCCGGCGCGAGGCC
+TGCGGTGGCGGCCATCTGGCGCGCGAGATCGGCGGCGAGATCGAGCCGGCTGCCATCCGTCTCGGTCGGC
+ACGATCTCCACCGGGGCGATTGCGGCGATGCGCGGCGTCATCATCAGCGCCGAGGCCGGCGCGATGATCC
+TGTCGGGCGCGAGCCGCGCCAGATATTCGAGGTTGATCTCCCAGAAGGGCCCGATGTCGACCACGCCCGG
+CGGCAGGTCGAACGGCATGCGGCTGGCGAAATAGCCGCTGTCCGAGATCGCGAGCGGCGGTCGGTCGAGC
+GCGATCAGCGTCTCGGCCGCTGCCCAGTCGATGACGGCCAGCCGTGGGCCGGCCGTCGCCCGCGCAGGGA
+CGGGGAGGGTCAGGGCCACAAGGCCCGCGAGGAGAGGACGGCGCGAGATCATGGGAGGACGACGGAGACG
+GCGGGCCGCCTCCGTCCGGATCCGTCAGAAGCCGATGGCGATCTTGGCCGTGACCATCCGCCGGTCGCCC
+TCGTAGCAGGAATAGGCGCTGGCGCAGGTGGTGAAGTACTCCTTGTCCGTCAGGTTCGTCACATTGAGCG
+CCAGCCGCGCGGTCTCGCTCAGCGCATAGCTCGCGCCGAGGTCGATCACCGTCCGGCCATCCACCTTGAT
+CGTATTGCCGTTGTCGCCGAAGCTCGTGCCCACATGGCGCAGCCCGCCGCCGAGCGAGAGGCCGTCCAGC
+GCGCCCGCGCCGAAGCTGTAGTTCAACCAGAGCGACGCCTGCGACTTCGGCACCAGCGCGGGGCGGTTGC
+CCTCGTTGCCGGCATTGTCCTCGGTGATCTCGACATCGCTGTAGCTGTAGTTCGCCGCAATGTCCCAGCC
+CGAGCCGAGCGAGGCCTTGCCCTCGACCTCGATCCCGCGCGAACGGATCTCGCCTGTGGCGATGTTGTAG
+CCGGTCGAGATGCCGCCCGGCCCCAGTTCGGGCGTGAGCACGTTCGACTTGGTGATGTCGAACAGCGCCA
+CTGTCAGCAGCGCGTCCGTGCCCGAGGGCTGATACTTCGCTCCCAGCTCCCATTGCTGGCCGCGGGTGGG
+ATCGAAGGTACGGCCGTCCGAGCCGAGGCCCGCGTTCGGCAGGAAGCTCTCGGAATAGCTGAGGTAGGGG
+ACGAGGCCCGAATCCGTCAGGTAGCTCACCCCCACCCGGCCCGAGAAATTGTCGAGATCGACCTCGCGCG
+CGGTTCCGGTCAGGTGGTCGTCGGTTCTGGTGCTGAGCCAGTCCTGACGCCCGCCCAGCGTGAAGAGGAA
+GCGATCCAGCCGGATTTCGTCCTGAACGTAGAGACCCGTCTGGCGATACTCTTCGGTGTAGTCATAGGCC
+ACGGTCGTGGGGGTGGGAACGTCCACGCCATAGACGGGCGCATAGGGATCGAGCGAGGGCGCGGTGCCGT
+TCCAGCGGCGCGCGTCCGTGTCGCTGCGCGAATGGTCGAGCCCGATCAGCAGCTTGTGCGAGAGCCGCCC
+GGTCTGGAACTCGCCCAGGAGGTTGGTGTCGACCGCAAGGCTGTCGAGGCTTTCCGAGAAGCGCCGCGCC
+TGCCGCGTGAGGCCGGTGGCATCCGCCCCGATCATGGCGATCATGTCGAGATCGAAGTCCACGCGCCCGT
+AACGCAGGTTCTGGCGCACCGTCCAGCCATTGTCCATCCGGTGGCTGAACTCGTAGCCCAGCGTCTTCTG
+GTCCTGCTCGCTCCGCGAGAAGTTCGGGTCGCCCACGAGGATGTCGGTCGGCGTGAAGAAGATCGCCGTG
+CCGCCCGAGCGGTCGCGCAGCGCCTGCGCCGTGACGGTCAGGCTGGTGGCGTCGGTGGGTGCCCAGGTGA
+TCGAGGGCGCCAGCATCAGCCGGTCGTCCTTCATCCGCGTGCCGTCGCCGTAGGAAAATTGCGTGTTCCC
+GTCGCGCGCCACGCCGACCAGCCGGTAGGAGAGCGTCTTGTCCTCGGTGAGCGCGCCCCCGAAATCGACC
+GCCGCCTGCGTCGTGGCGAAGCTGCCGTAGGAAAGTTCGGCCTCGCGCAGCGGTTCGGTGACCGGCCGCT
+TCGAGGTCTTGCCGACCACGCCGCCCGCATCGGACTGCCCATAGAGGGCCGAGGACGGCCCGCGCAGCAC
+TTCGATCGTCTCGAGCTGGTGCGGATCGGTGCGGAAATGGCTGTAGTTCGAGGCGATCTGGCGCAGCCCG
+TCGAGATAGGCGCTGGAGGACTGGCCGTTGAAGCCGCGCAGCATGATCCATTCGAAGCCCTTGGGGTCCG
+GGCCGTAGGTTTCGATGTTGACGCCCGGCACATAGCGCAGCGCCTCGGTGACCGAGCGGGCGCCCTGCGC
+CTCCAGCTGGCGCGGGCCGATCACGCTGACCGACTGCGGCACTTCCAGAACGGGCGTGCCGCTCTTGCTG
+GCCGTGCCGCTGGCGCCCGCGACGAAGCTCGTGGCCCCGTTGCCGTCGCCCGCCACCCGGATCCGCTCGA
+GCATCACGCCGGCCGAGCCGTCCGCCGCGCCCGCGGGGATGCGCTGGAAGACGTGGATCGTGCCCGCATT
+GGCGAAGCGCCACGAGAGGCCGGTGCCCGCAAGCAGCGTCTCCATCGCCGCCTCGACGCTCATCGCGCCC
+TGCACCGGATTGCCCCGCACCGCCACAGCGCCCTCGTCGGGCATCACGATCGAGAGCCCGGCCACGCGGC
+CGATGTCATTGACCGCCCGCGTCACGGGTTTCGCCGGAATGTCGAACCGGTGCGGCACGCCTTGCGCCAG
+CACGGGGAGCGCCGCTCCGCAGAGAAGCGCGGTCGTCAGCAGCCGGGCCATACGGCCGGTCCGCCAGGGG
+AGAAGAGACTGCCCTCGCATGGAATATCCTTTGTCCTTCGTCACGGTGAGCACGGATGGCGAAGGTTCGG
+GCTTTCCATGCACTCATCAGGTTCACGTCCCGGGGCGGGGATCACTGAACCGACGGGCGCATCTTTTTCT
+CGGATGGCCCCTAGGGGCGCAGGATCCGGACGGATCCGGGCAGGCGGGTGATGGTCAGCCCCACCGTGTC
+GCGCAACGACTCGAGCGCCGCCTCGGGATGATCGAGATCGAGGCTGCCGGACACCCGCCTGTCTCCGAGG
+TCGCGCGAGGCAATGAGGATGTGCCCCGGCAGATAGCGCTCCAGCGTGGCGACCAGATCGCCGAGCCGCA
+TCCGGTAGAAGGCGAACCTGCCGTCCTGCCAGCCCGATGCTTCGGCCAGGTCCACGGCTTCCACGGAAGG
+CCGACCCGGGCCGTCGACGCTGAACTGCTCGCCCGGGACCAGCGGCTGCTCGACCGGCAGACCGGGATAG
+CGGACGCTCACGCGGCCTTGCCTGAGGACGATCTGGCCGCCGTCCTCCAGCAGCCGGACGTCGAAGACGG
+TGCCATGCACGGTGACCTCGCCCTTGCCGAAGCGCACACGGAACGGTCGCGGCGATCTGGTGACCTCGAA
+CGAGGCCGCTCCGCGCAGCAGCCGCAGAAGGCGGTCGGGACCGTCCATGTCGACGCGGATCGCGCTGTCC
+GCGTCGAGGAGCACCCGGCTGCCGTCGGGCAACGAGACGCTGCGGCGCTCGCCCCGGGCGCTCGCGTAAT
+CCGCTCCGAGATCCTGCAGGAGATGGGGCTGGCGCAGCCAGAGGCCGCCAAGGCCGATCGCCAGGGCCAG
+CACCGCCACAGTTCCGCCGCGCAGAACGCGCCGCCGCCGGGCGCCCCGGTCCATCGCCGCCAGATAGACC
+GAGAGCGCCCCGGCCTCGGCTTCGGCAAGCCGCTCGCCGGGCGCGCGCGTCTCGCCCCAGAGCGCTTCGA
+CCTCGGCCCAGGCGGCGACATGCGCGGGATCCTCCTCGAGCCAGACCTGCAGTTCGCGCTTCGACAGCGC
+GCGGCCGCGCAGGCGGACAAAGAGGTCACGGGCTTTCGCGCGCTGCGGCTCGGTCGGGTGGCGATCCCCA
+GTCAAGCCCCGACCTCTGCGGCGGCGGCGCAGGCGGCGACGGCCTTGGCCATGTGCTTGGCCACCGCGCG
+CTCCGACATGCCGAAAGCTCCGGCGATTTCGGAAAAGCTCCGGCCATGGACGCGGTTGAGCAGGAAGATG
+TGCCGGGTCTTCTCCGGCAGGGCGAGCAGAGCCAGATCGATCCGCTGCAGCGCGTCGCGGGCGCCCATCG
+CGTCTTCCGCCGAGGGCGCATGCAGACCCTCGTCGCGTCGGGCGGCCTCGGCCAGCAGCCGCGCCCGGGC
+CTGCTCCGCGCGCAGGTGATCGACGGCCGCGTTGCGCGCGCAGCGACTGAGATAGGCCGCAGGCTCCCCG
+TTCAGCCGCGTGGCACGCTCCCACAGACGCAGGAAGATGTCATGGACGATGTCACGCGCGAGGCTCGCGC
+AGCCGATCCGGCGGGCGATCTGCCGCTCCATCCGCTCGCGTTCCGAGACGTAGAGCTGAAGGAGGTGTTC
+GGACTGCACTGTGCGGGCCTGACTGTGAAGAGACGCGGCACCTTAAGGCCGCATGGAACTCCCGACAATA
+TCGCTCGGCCATTCTGTCGTGGGCGTCCCGCGTTGCTTCTGCCGCCTGTCGGCAGATCCACTGGTCGGTC
+AGAACGCTCTGTGTCCCAACGATGGTGGTTAACGCTTCGGTGCTAACGACCACGCCATATGGGTCTGGAG
+CCTAAGACGCTCCACAATAAGCGGCGTCTCCGCCACAGCGCGGACGCTCGTTCAGACAGGACTTCGCATA
+GAACCCGAAAGACCACGGTGCCGATCTCAGGGGTGGCCATTCCTGCCTGGGGATGGACAGCGCTTAACCC
+CTCCTGTGCTCTGCGCCTGCCGCCACCTCGACGGTCACATGCTCCATCCCGGTCGTCTCGCGCACGCGGC
+CTTTCACGGCGCGGCGCACGTCGTCCGCCACCGCGCCCGGCGCGAGCTCGATCTCCAGCGTGGCCATGGG
+CCGCTCCTGAGTGATCGACCAGGCGTGGACGTGATAGGCGCGGGCCACTCCGGGCAGCGTGGCTTCGAGG
+TCGGTCGCGACGGCGCGGGCGTCGAAGCCCGCCGGCGCGCCTTCGAGCAGGATATGGCCGCTCTCGCGCA
+CCACGGACCACGCCGAGCGCAGGATGAGGAGAGCAACCAGCACGGACAGGATCGGGTCGATGGGGGTCCA
+GCCTGTCCAGATGATGATGAGCGAGGCCGCAATCGCCGCAACCGAGCCGAGCAGATCTCCCATGACGTGC
+AGGGCGGCGGCACGGACGTTGAGGTTGTCGCCCTCTGCGCGGCTGAGCACCCAGAAAGCCAGAACGTTCA
+CCACGAGTCCCCCCACGGCGACCCAGAGCATCAGCCCGCCCAGCACCCCGTGCGGGTCGCGCAGGCGCTG
+GATGGCCTCGAAGACGATCCACCCCGCGATGGCGAACAGCGTGACCCCGTTCACGAAGGCGGCCAGCACC
+GAGAAGCGGTCGAAGCCGTAGGTCCGCTTCCAATCCGCCGGTCGCCGCGCCAGCCGGAAGGCGAACCAAG
+CCAGCAGAAGCGAGGCGAAGTCGGTCAGCATGTGGCCCGCATCGGCCAGAAGCGCGAGCGATCCGGAGAT
+GAGCCCGCCGATGACCTCGGCCCCCATGAAGCCGCCCGTCAGGGCTGCGGCGATGAGGATGGCGCGTTCC
+TTGGAGCGGCGCGCCTCGGGCGTGTCATTGGCCGAGAGGGTCGGACCGTGCGAATGCCCCGCATGTCCAT
+GTCGATGTGCGTGCCCATGCCCGTGTGCATGATCGTGCCCGTGACTGTGATCGTGTCCCATCACCGCACC
+TCCGCCCGAAGGCCCTTGTCAGCCGGGCGCGTGACGTGCGCGTTTATCCCGTGGTGGAGTGTGGGGGCAT
+CGAAGCCCGGCAGGTCAGGGCTGCGGAGGTGGTGGTCGGTCATGGCAGTGCTCTTGATTCGTCTCGTCCC
+CATGGTAGATACGATCTACAGCCACTGTAGCTTCAAGGGGTGATCGCGATGCAGGGCCATTCCATCGGTG
+CGCTGTCCAAGCGCACGGGCGTAAATGTGACGACGATCCGCTACTATGAGGGGCGTGGTCTTTTGCCCGA
+TCCCGGCCGCACGGGCGGGGGGCAGCGCCGCTACGGCGATGCCGAGCTGGACCGGTTGTCCTTTATCGCC
+CATGCCCGGCAGCTTGGATTCGACCTCGACGCCATTGCCGAACTGATCGCGTTGCAGGAGACACCCCATG
+CTGCCCATGGCGACGCGCACCGCATCGCGAAGGAACGGATTATCGAAATCCGGGATCGGATCGCGCGGTT
+GCGGCGGCTGGAGGCTGAACTAGTGCGCGTCGTGAAGACCTGCGACGGTCAGTCCGATGGGCAACCCTGC
+CGGGTGCTGCATGCCCTGGCCGACCATCAGGCGTGCGAAGGCGAGCACTGAGACCTGCTTGGGGTCACAA
+AGAGGTTCTGAACGTGAACACGTCGCGTGTCAGGGTGAACGCCCGGCCGGAGCATGCGCCAAGCGGCCAT
+TGTGGACGACACTCGGTAGCTCTTATCGCTCTTCCCTATCGTAAACGGTTCCGCTCGAGCAGATAGCGGC
+CTGGAGGCTTGCCGACCATCTTTCGAAACATGGTCACGAAACTGCTGGCGCTTTCATAGCCGAGATCGAT
+GGCGATGGCCTGAACCGACTGACCAGCGCTCAGGCGCCGCAAGGCAAGCACGATATGCAACTGTCGGCGC
+CAGCGGCCGAAACTCATGCCCACCTCGTCGGCCAAAAGACGGCTCAGGCTGCGCTCGCTGAGCGCGACGC
+GGGAGGCCCACTCCGCGACGCTCGCGTGATCCGCGGGCGCCGCGATCAACAGGTCGGTGAGCTTCTTCAG
+GCGCGGATCGCCGGGGATGGGCAGGCAGAGATCCTCGACCGGTGCCACAGCCAGCTCATCGAAGAGAACG
+GACACGATCCGCCCATCCGGGCCGTCGACGTCATAGAGGTCCGGCAGAGCGTTTGCCCGCATCAGCAACT
+CGCGGAAAAACCGCGACACCGCGATCGTGCAGCAATCTTTCGGCAGGTTCGCGGAGTCGGGAGGATCAAT
+GAAAAGAGAGAGACACTCCACCTCGCCCGAGCCGAAAACGGAATGGGGCAGCCCGCTGGGAATCCACACG
+GCGCATTGCGGCGGTACGATCCAGACTGCGCCGTCGACCTCGCAATTGACGACGCCCCGCACCGTGAAAA
+GCAGTTGCGCCTTTTGGTGATGGTGCCGGGGCGATTGCTCCAGGGCGTCAAGGGTGGCGACCGCGTTGGC
+GGCCACCAACGCACGCGGGATCTCGTCGACATAGGCGAGCCAGTCGCGACGGACGTCCAGATACATCTCA
+GACCTCGGCATTTTCAGATCAGGCCGGATTGAAACATATCGTGGCAGGGTTGCGCAATGACGCCACGTGC
+CGGCTGGCGTATCTGGTGATCGCGCTCCGTTACTGGAGGGGCAGAGCTGACCTGCCAGACACATAGGCAC
+AGGAGTTTCCACGTGATCGACAATGCCCCGGTTAAGCTCGCGCTCGCATGGCTCATCCCGGCAGTTGGTG
+CCGCACTCTTTGTCACGATCCAGTGCTTTTCCTATCTGAACGTCTATGTCGGCAGCGGCGGGACGATGCA
+GGCCATGACGTTCGATCCCGCCTCCTTGTGGGGCGTGTCCATTTTCTATGGCGCCTGGGTCCTCCCGCCC
+TTGCTGGCGCTGGCCGCAAGGCGCGCGACCGACTGGGCGATGCTCGTCTTCGGCGGTCTGCTGTTCATCA
+TGAGCACGCTCGCTGGCGTCTTCGATGGCTTGCGCGATGGCGGCCATCTTGTGGGTCTGGAACTGCTGGC
+TGTCACGCTGCCGGGTGTGGTCGCGCTTCTCTTTACATGGCGGCACATTCGTTCGACCTGAAACCGTCCA
+TTCTCGCCGGGAGACGACACATGCCCTTGGATATCACGAATTTTCCGCTTGTCTGGATGAGCTATGACGA
+AGCGCCCGATCACAACCACGACGAGGATTTCGCGGCACTCGAGGCGTGCTTCAAACGCGGCGCACCGTTT
+GTGATCCTGAGCGATAATGCTCCGACCGAAGACGAACAGCACGACCATAGCCAGGAAGAAAGGAAGCGCA
+CTGCGCTGTGGATGAAGAAGCACAAGGCCGAATTGCGGACGCTGGTGCGGGCGATGATCGTGATTGAGCC
+GAGCGCCGGCAAGCGTCTGGCCTTCAAGACTTTCGGCGCGGTCTTTTCCAAATTCTGGGGTTTTCCGTTG
+CGGATTGCAGTGACTCGCAAAGAGGCGATGGACGTCGCCGAGAACCTGCTATCAGAGGGCGCGGGGTCTA
+CAACATTCTGAAGAACAGCTGCGTGGACCGCGCGACGATGGTTTTCTGAAGATTGCAAGTTTCGCTCGAG
+CTTTGGTCGATCGGGCTATGGCGCAGTGGCCCGCCCCCATGGGGTGGTACGGTTTTAAGTGCATGACAGG
+TCTCGGCGCCACGGTTGAGGTGGCCGGCGTAGAGGGTGCGGTTGGCGAAGCCGGCCACTGCACGGCCAGT
+GGCGACGGGGGACGGTGGCCCAGCGATGAATGCGGGCGCCTCGTGTTGTAATGCTGGCGCCAGGTCTTGA
+TCACGATCCGGGCTTCGGCCAGGCTGTAGAAGATCCGTCCGTTCAACGTCGCGGCCGTGGCCACCGCCCG
+CAAGATCGCGGCCCTGATCTGGCAGTTGCTGACGAAGGAGCCCCCGTATCGCTGGGCGCGTCCCGCCTTC
+GTGGCCGTGAAGATGCGCAAGCTGGAGTTGCGTGCCGTCGCCGCCAGGGCTCACGCGCCAGCGGGTCCCA
+GCCGCGACTACTGGATCAAGGAGATCCAGCATCGGGAAATCGAACTGGTCGCACAGGCCGAACTTGCTTA
+CGCGCAGATGGTCGGGGCATGGAAGGACAAGCCGCCTAAGCCGCAGGGAGGATGAGAAAGGGGCTGTTCA
+ACAACGTCCGTGTCGATGGCTACACGCCCATCCTCGAGGAAGAGGCCGAAGGCATCCCAGCGGTTCAGGA
+CGTAGCGGAACGCCTTCGCCAGATCGCTCTTGCCCGAGATATAGTCGAGGTTCTCCTCGGCCCAGACCTT
+GAATGCCTTGACCTTCGGGCGGCTGTGCGCCTGCCGGACAGCGTGGCGCTCGTCGGCACTGCGGCCGTTG
+ATCTGCGCTTCGATGTCGTAGAGCGCTCCGATCCGGTCCACCGCCTCACGGGCGATGTCCGAGCCGGTCT
+CTTTCTCGACCTCGAAGAAGGCCCTTCGCAGATGCGCCCAACAGGCTGCTTCCTAGAATGGGCCGCGCCG
+TTCCCCTCCGCAAGATAAAGATCCCTGAGGCCGGCGTTAGCATCGGCCTGCAGGATCCCATTGCCGGCCC
+CGAGGTGCTTTTGCGGGTGCTGGCCCTTGCGATCGGGCGAGAAGTGATAGGCCACGGCCGGTGGCGTGGC
+TCTCGACCAGGGCCGTTGGTCGCGGACATAGGCCCAGATCCGCCCCTCCTTCACGCCCTTGCCAAGCTCG
+CCCTTCATCGCTCTCTCTTTTTGCAACTGACACCCCCATGACGGGCGAGGGAAGGCGGATGTGACATCGA
+GGAGCGAGCATCCCCATGCGCAAACGGCTTGACCGGAACGGCCCCGTCACCGAAGTCCTGACCCTAATGC
+GGCGCCGGAAAGCGGACCCAGCCGGTGAAGGAATAGCGGTCGAGCTCGGGATAACCCGCCCAGACATCGC
+GGCCCAACGTGTCGGCGATGACCCGTGCATTGCGGAAGGCGCCAAAGCAGGACATGAGCTTGATCGGCCC
+CTCACGCTCGCGCCAGCCCTCGTCCACGAGATACCGGGCAAAGTTGCGGCCCGAGATCGGGCGTACGAAA
+TCGGGGGCTCCGTCGCCACTCACATCGACGCTGGCGAAGATGGTGTTGCCCGCGCCATGCCCGGCGATGG
+TGTCCACCGATTCCTCGCGCCCCGGCGCCATCAGCGGGCGGCCCTCGCCTTCGCCCTCGCCGAAATCCAG
+CCGCATCGCGTATTTGTACCCGCCCGGGCGCCTCTGGAATCCGTTGGCGCTGGTTTCGGCCTCGGGCTGC
+GGCGCCATCACCAGAAGGCGCTCGTTCTCGCCCACCGCGCCGCGCGTGTCGACCGCCGGGGTGATCAGGT
+GCAGTTCGTCCTCGCCGATGGGCACCGGAATGATCTTGGCGTTTATCTTGCCCAGATAGGCGCCCGACAT
+CAGGATCCCGCCACCCGCGCCGGCGCCAAAGCCCACCGCCATGCTGACGATGTTCCCGGTCGAGAAGAAC
+GGCTGCTGATAGGCGACCGAGGTGACCCCGGCCGAGGCGGCGGCCCCGGTCAGCCCGCCGATGGCGCCCG
+AGGTGATGAGGCCGACGCGGGTGATCGCCGCCTGCGACCAGCCCGCGTTCAGCGCCCCGCGCATCGCGAC
+CCGGCCCGCCGCGCCGCCCAGGCCCGCGCCGACCGCGCCCCCCACCGCGCCGCTCAGCAGGTCGATGCCG
+ACCCGCGCGCCGGTGATCTTCTGGCCCGAGATCGCGGCACTGGTCAGATCCCCCGCGACCGAGCCCACGG
+CACCCGCCAGCGCGCCCGCGCCGATGCTGGCGGCCACGCATTCGGTGCCAAAGACCGCCGCCGCGGCTGC
+GCCCGCGACCCCGCCGGTCAGCACGGTTGCGCCGATGCCGACGATGGCCCCGGCGATCAGCCCCACGATC
+TCTTCCCAGCTCTGGCCCAGCGGGTCGGAGTTCGCGATCGGGTTGCCCATGGCATAGGCGTACCGGTTCA
+TGGTGATGCGCGGATCGAGCGACAAGAAGCGCATGGTTTCCGGGTTGTACCAGCGCGCCCTGAGATAGGT
+CAGGTTGCTGACCGGGTCGGTGAACTGCGAATTCCAGTTGAAGCTGTTGGCGCGGTCGAGCGCGGATTGC
+GGTGTGACCGTGCCATAGGCCGAGATGGCCAGAGCGTTGCTGCTGGCCGAGGTGCGGTGCACATAGACCG
+ATTTCGACGCCGCCGCATAGGCGGTGACCGATCCGGCGCTGACCCGCGCGACGGGCATCTGTCCCGCCCA
+CATGAGCCCGTGCCATTCCGGCGTGCCCGACTGGGCATTCGCCGCCACGCTCACCATGGTCCCGGCCAGC
+GGATAGAACCTGTCCTCGGTGCTGCCGTCGATCACCGAGGCCAGCGCGCCCTGCGGACCATAGCTGTTGG
+ACATCGAGGGCCCCGAGGCCATGCCGACATTGGTCAGCCGGTCGAGCGGGTCGAAGCCATAGGTCGACCC
+GTCCACGTCCCTGACCATGCGGCCATTGGCGTCATAGGCGGCAGCGCCCGAGGTGATCTGGTTCAGAGCG
+TTGTAGGCAAAGCTCTCCTGCTGGCCGTTCCGGGTGCGGGTCAGCACATTGGCGGCGCCATCGTAGGCAT
+AGCTTACCTGGGTCGGCGACCCGCCGCCGGACGGGGCCAGCGTGATCCCCACCAGCTGCTTCAGGCCGTC
+ATAGCTCATCGTCTTCGCGACGTTCACCGAAGGATCGGTGTTCACAGCCGAGGCGAGCGTCAGCGACACC
+AGGTTCCGCCAGCCGTCGCGGGTGGCGGCGGCGCTCAGGACGCCGATGCCCGCGCCGTCGGTGACCGCGA
+CGCTGTCGTTTGCCCCGAATCCGTCATAGCCGAACTGCGTGGTCTGCGCCGTCGCGCCGCCCAGCACCTG
+TTTCAACAACACGCCGTTGGCGTGGTTGGCCGTGCCCCAGGTGTTGCTCAGTGTGACCCCGCCCATGGTC
+TGCGCGATGATCTGGTTCAGGGTGTTGTACGAATAGCTTGCCGCGGTGCCATCGGGCAGGGTCATCGACA
+CCACCCGGCTGGTGGCGTCCTTGGTCAGCGACAGCGTCTTGCCATCGGGATAGGTCACGGACGAGGCCGT
+GCCGTCCAGAGAGTAGGCATAGCGCAAGGTGCCGCTCGGATCGGTGATATGGTCGATCCTGCCATTCGAA
+AGATAGGCGAAGGTGCGCGTCTGCCCGTTTGTGGTCTCGCTCAGCACCTGGCCTGCGGCGTCGTAGGCAT
+AGGTCGTCTGGGTGCCGTCATAGCGGGTGCGGCTTTGCAGGGCGCTGTCGGTCGTGTAGCTCAGCCGTTC
+GATCTGCCCGGCCTGGTTCCGGATCTCGATCAGGTTGCCGACCGGATCATAGGTCAGCGTCTCGCTGACA
+ACGAGGGGCTGCGCCGCGCCGTTATAGCTGACGTTGCGGGTGACAAGGATCGGATTGCCGTTCAGGTCGC
+GCTGCGTGGTGGTGCAGCGCGTCGCCTGCAACGCGGCGGTCGCGGGGGTGCCGGTGAAATCCACAACTTC
+GGAATTGCCGTCCGGCGTATAGGCGAAGGTCTTGACCGAATTCTGCACAACGTTGCCGCCGGTGATGCTG
+AAATGCGTTTCGGTCACCACTTGGCCAAAGCCGTCATAGGCCGAGGTCACGCGCTGCACCTGGCCCGCCT
+GGGGTGAGCCGCTGTCGGCATGGGTGTCGGTTTGGATCGTGTTGCCCAGCCCGTCACGGGTGATGACCGT
+GCGAAGATCGCCGTTCATCGAGGTGCTGACCGTTCGGGCCGCGTCATCGAAGATGGTCGTGCTCTGATTG
+CCCAGGGCATCGGCCAGGGCGATCTGACGTCCCAGCGCGTCATAGCTGATCGTCAGGGTCTGTTCGGTGG
+CGTCGGTCTCGCTCGCCTTCAGATCCAGCGCATTGAAACTCACGCGGCGCAGGGTACGCGACAGGCTGGG
+CGTCGATTGGGTTGGATCGCCATTGTCCATCATCAGGACGGCGCGCCCCTTTGCATCGTAGGTCGTGCAG
+AGGACATAGCCGTTGGACTGGGTCACGGTGCTGGTGTTGGTGCCGCCGCCACCGTTTCCGGCCAGAGTGT
+AGGCATGGGTCGTGACATCGCCCAGCGGGTCGGTTTCCTGCATCAGGCGCGCCAGCGGGTCGTAGGCATA
+GCTGCGCCGCGCGCCGCCGGGTTTGGTCTGGCTCAGGCAGGGTCCGCCCGGCAGGCGCATGTCGAAGACC
+GCGACCCGGGTGTGGCCGTTGGCGTCAGTCGTGTCGACGGTCAGCTGATGCGACGCGGCATCGTAGCTGT
+AGGAGGTCTGTTCGCCGACCGAAGCGACCGACCCCTCGGGACCGCTGTAGCCCTGGGCCCAGGTCAGGGT
+CCAGCCGGTCTGGCAGCCCCGGGGATCGAACTGGAAGGTCTTGGTCTTGTAGGGGGCGAAACTGCCCGCG
+CCCGCCGCCTGGGTAGAGACGGTGGTGGCGGCGATGGATTTCTGGTCGGCCGTCAGCCCATAGTCGATCC
+GCGTCGTCTGGCCGGTGACCGCATCGACGTAGTCGGTTCGCTGCGGCATCTCGCCTCCCCACGCGACCTG
+GAGAAAGCTGTGCGTCCGCTGGCCGGTCAGCCGGGGTCTGCCGCTGCTCAGGTCGTACTGGCTGCTCGAC
+GTGATCTTTCCATAAAGATCATAGGCGACATCTGCCTGCGAATTGTCGGACCACGTGCCGCCCGCCGCGT
+CATAGACGCTGTGCACCGTCGTCACCGGTTTGTTCATGTTCACGCTTCGCGCATGGGCGTCGGTGACGAT
+GTCGTAGGTATAGGAGGTGCGGTGCGCCTCTTGCGCATGGCCGTTTGCGTCCACCAGATAGGCATGCTCC
+GTCAGCGGGCAGTGCAGGTAGTTGAAGAACACCCGGTTGGCGGCAATGAGTGCGCCGCCCGCGTCGCGGC
+GCTGTTCCAGCACGTCGTACTGGTAGGCGGTGTTGTTGCTGTCCATGAGCCCGTCCGAGGCCGTTCCCAT
+CCGGTACCCCGCGGTTGCCCCGGTATAGGTATTGCCGCCCGATGCGGTGCCATAGCTGTAGTCGCTCCGG
+TCCAGGAACGCGCCGCCCGGTCCGGTCCGGGTCATCGACTGCACGGCCGGGCGGGTGCCGGAATTCCCTC
+CGGCGTCGATGTAGCGGAGGCCGGTGTAGGCCAGCGTCGTTGTCATCCCGGTGGGATAGGTGATCGCGCC
+GACGACCGTCGTGCCCGAGGCCGAGGCATAGCTGAAGGCGGTGACCGCGCCGATCTGGTTGGTGACATGC
+TGTACACCCTGGCTCGAAAACGCCACGGTCACGCTCGATCCGTCGGGCAGGGTCAGCACGATCGTGCCGC
+CGGAATAGCCGAACGTGACAACCTGGCCGAAACTGTCGGTGATGCTGGCTAGGCTGTTCTGGAACACGTC
+GCCCAGCGGGTTGGTATAGGCATAGCGCAGCATGTTGCCGTAAAGGTCGGCATGCGCGATCAGCTTGCCC
+GTGGCGTCGAAATAGCTGATCGATCCGTCGTCATAGCGCAGCATGAACCCGTATGTCCCGCCGCCGCCCG
+GAACGGGCTGCGGCGGGACGACGGTCTGGAACAGGCGCCCATGGTCGTTCAGATAACGCAGGCCGGATTG
+ATAGCCCGAACTGTCGGTCCAGCTGGGGTCAATGACAAAGGTCTTGCCCTCGACCGTCAGCGATTGCCCG
+GCGGCGACGAAGGGCAGCCCCCAGCCCCAGCCCTGCGGCAGGCCCAGCTGGCCCGACGCCCCCGCGGAAT
+AGCCCAGCGTCAGCGACAGGCCGATGGCGTCGGTGATCCCGCGCAACTGCACCAGCGGCAGCGACACCAC
+CAGCGACCCGGTATTCCTGTTGATGTATTCGTTGCTTTGCAGCGACTGGTTATAGGCCTGCGAGCCCTGA
+TATTGCGACGACGTCATGACATGCTCCCTGGGTCCGGTTTCACGCCTTGGGGCGCCCGGCTATGGAAAAC
+GGGGCCGCGGCCTACGGACAGGCCGCAGCGATTGTCAGAATGTCGGTGGGATGCGCGCGATCAGTTGTGC
+GCGCCGGGCTCGAAAATCATGTAGAGGGGGCCCTGGCTGCCGGAATCCCATGTCAACTTGGTCGAGTTGC
+ACAGGTGCCCGGTCGAGCAGATGTAGGTGTCGGGCGAGGCGTTGTCGATTTCGATATGGTTCGAGCTGAA
+GATCGGATGCGACATGTGCGCCTGCACCGAGCCGGAATAGCCGCCCGCCGAGGCCGAATAGCTCAGGATC
+CAGGTCGAGGTATCGGTGGCGCAGGTATCGCCGCCCGACGACGAGCCTTTTTCCTCGACATAGCCCACGG
+AAACGCAGGAAACGCCTGCCTGGCTGGCCACGACCGAAGCATCGTGGCCGATATCGTTCATGCAATGATC
+CGCGCTGCCACCGGCGGTGAAGCTGAAGGTAATGGGTTGCGCGGGCGTGACCGCGAGATAGACGCAGGCG
+TTCATATTCGCGCCGGCCCCCGCAAGGGCGGCGGTCCCGGTCATGACCATCAATGCGCAACCGGCGGCAA
+GAAATAGCACTCTCATGGGACTCTCCACTTACTGGACGCCGGCCCGAAATCAGTCCGGCGATACAACCAC
+GAGTTGCATTCCGCTTCGATTCGCACAACAATTATTCGTGAAGTGCGGCGGCTCTGTTGCACAATTCGGG
+TAAAAGGCGTGCTTCCCCTTTCCCCGGACGGACCTATCCTTTGGCCTCTGTTATGGGCGTGCCGAGTGCG
+GTGAAGCCGTTGAGGACGGCAACCCTGACCTGGAATTCGGCGACCTGACGGTCGAACTCGCGCGCGGAGA
+GGCGCTGGCTCAAGAGCTTGGCGCGGTGCATCTTGGTCTCAGCGCAGCTTCTGCGGTGATACCCGCTCCA
+TCGTCGCCAGATGGTCCTGCCGAGCCGATTCGAGGTCCGCAGGATCTCGTTGCGGGCCATGGCCCCAGCG
+GTGTCGGGCTTCCATGGTTCGGCGTTCTTGCGCGGTGGGATGACGCAATCGGCACCGCCGAGATCGTCCG
+CGCCACCTGACGTCAGGGGAACAGGCAGTCACGCCTCTAGGTGACTTTCTGCAACCACGCGGTTGTCGCT
+GGGCGTGAGATTGCCCTAAATTGGCTTTGAAGTGCAGTAACTCGTAGAATCTCCAACTTGGGGGAGATGG
+ATTGTTATACTACAGGATGCACATGAAGATGGCGGAGATGTTTTCTTCGCTCAAAATTTACGGCACATTC
+AGGCCTGAGGATGGGGTTTATGTAATTCTCATTCCTGGCACAATTGGAATCGCAGTTATCGGGATAATCA
+GCTCATTCATTTTTGTGCCAAGAGGGCTGCAATTTCTGTTACTTCCGCCATTCCCCGCAGGCGCTGCCAT
+TTACCTGTTTATGTGCCACAGGAAAGCGAACCGGAAGTGAAATCATGGCAACCAGTTCTGTGACCGGTTG
+GTTGGCGTTCAGGCCGATCGACAAATTTTAACGTTCAACCCTCGAAATAGAGCCGCCTCATCTCAAGTCC
+GGTCGGATCCATACGTTGATGAACCCCGTATCCAGCGCAACGAATGGTTCGAGTTCAATTTCAATGCGCG
+AAGCCTCCCAGCAACCAAGATAATGGAATATAAGCTTGTTCTGACGGTGCAGCGCCGTCGAAACTTCCGA
+TCCATTGATTAATACGATCGCGACATTATTCTCCGGCACGTTCGTTTTGTCACTTACGTCGACGCCGTAC
+TCCTTGAGCGAACGATCGACGCGGGTGTACTGGCCCACGACGCAGATCGTGCCGGTTTCGGACAGACGAA
+CTCTGGTTGCCCCCGCCTCCGCCTCCGTCGCCAGCCAGTCGAGGAGAGCCGCGGCCGAAGTCATTTTGGG
+CGCGGTGACCTGCGCGTGCGCAGCCAGCGGGAATATGCCGCCCGCTACAACGGCGGCACAACAGCACTTT
+ATCAAATGGCGCAACCGAGACCTTTCCCCACATGCCATCACATCATCTTCCGCCGTGAGAGCTCGGCTCA
+ACCACCTGGCCAGCCATCGTGGCATATAGTTCATTGGGATCCTCGCACGAAAATGCCGCCGACCACGCCG
+AAGTCAAGGCGCTTGACGAGCTTGTGGGTTTGGCCGGATCGTTACCCGAGGTCGCATGGAGAATGATCTC
+GCGGGCACCTCTTCTGACCGCTCCTGCCAGCATGTCGTAACGGCGGGCGAGGTGTGCCATCTTCTCGGCC
+CGCGCCTCGCTCTCCTCCTGCCGGTCGATCCGCACCATCTCGTTGATGGAACGCTGGACGTCGGCTTCGA
+GGTGCGCAAGCCGGCTGGCGATCTTGCCCTTGGTGAAGTTGCAGTCGCGGTTGTTGAACGCCTTGAACTT
+GCTCCCGTCGATGGCAACGCAGTCGCCCTTCAGCACGCCGATCCGGCAGCAGAGCTCGATGAATTGCGCG
+CAGGTCTTGCGGATGGCAACGGCGTTGTCGCGCCGGAAGTCGGCGATGGTCTTGTGGTCGGGCACATCAC
+TTCGACGTTCCAGCCAGCCTCCCGCTCCAGGCGGCGGCTCGACGGGATACGGTTGAGGTATCAATATATG
+AACAGCTTGAGCAAAACTGCCGGGTGATACCCCGGCCGACCGGTGCGTGCCGTAGCCGATCGGACGAAGC
+CGAGCGAAGGAAGTTCCAACTCCCCGACGAAAAGATCGACGACACGGGCGAGGGCGTCCTCGCTGATCCA
+ATCCTCAAGCCGGTCCGGGAACAGCAACGTCTGGCTGCGCTCGACCCCCTCGATGAATCCCGCCATCCCG
+AACCCCTGTCGACCTCGGAAAGTCTACCACACACAGGAGTTTCCACACAGCCTCGGCCGGCCTTGCCTAG
+CGTCCTGCTTGCCGGCCCCCACATCGCGCCGGTGTATCGACCCAGCGGAATCTGCACAGGTCAATCCGCT
+AAGGCGAATGATTAAGCGGGAGTGTTCATGTCCAGCGCCAGATGCGGGCGGCGATAAGGATTTGGGATCC
+GCATCAAATGTCCTCCAGCACCATTGAGGTATCCGCGCCCGCGCCGCCTCCCAACCGACAATTAATTGGC
+GCGTTGATCTGCCTCGGCGGCGCCAATGGTTCTCAGCGTTTCACCCAGCTCAGGAGCTGAAAAGTAGTAT
+TCGGATGAAAGGCGGAATGCCGTGACCCAAGGCTGCGGCTTATGATATATGAAATCGAACCTGATATTCT
+CATCGGGTGCGCTTAACTTAGAAAGCGAAATGTCCGCTGGAATTACAAAGCATGTTTGATATGCGTAAAC
+GTGGAATTCGTATCCCACATGGCAGGCCTGCGCTCTTGGTCCAGAAAAGTTAAGGTGTGCCTCTGCAACG
+CGTTCCGAGAAATAGCCGGAGTGCGAAAAAACTCTTTGATCCGCTTTTCGCGCAAGAAAATGATCCAGCG
+CCACCAAGAATGGGGAGGCAATCAGCATCGTGATTGCGATTTGTTTTGTGGTCGGCGCTGAAAGATTAAT
+CATTCATGCGACCGCAAAGATAACATGTTAATCGGGGGTGTGTTCTCCTAAGGTGACAAAACTGTTGTTT
+GGGCCTCAAGGATTCCTTGCGGAGCAGGTGCAGCGGATCGGCGAAGCCTTCGATCCGCGCCTCACGGATG
+CGACATAACCGGCTCGGCGAGAAGGGCGAGGCGCCCGCGGCGCCGGGACGAGAGGGTATCATGGCTCCGG
+TCACCTCCGCTTGCGGACGGAACTGGAGCCGTGGACCGGCAACGCCGGGGTCACGCCCAGATCCCTCGAG
+GCCAATGCCGCGCGGGTTCTCTCCGGGCAATCCGGCGAGGTAAGCCGCGACCTGCGACCGCGATATATCG
+GCGAGCCTGCGATCGAGCTTTGCCAGTTCATCCGTGAGGCGGGCGCGCAGCCGCTCGCAAGGATGGAACG
+TCGGCTCGGGGCTGATGATGCAGGGCAGCAGGTCGCGCATTGCCTCGACCGTGAGCCCGGCATCGGCCAG
+TTGTCGGATCATGCAAGCCTGCTCCAGATCAGCGGGGCTACCCGCGAGCTTCTCGGCTGGCACCTGTCGC
+GCTCGGGCAAGGCCTCCACGGCCGCGAGCCCGCTGGAACATGCGCTGATCAACCGGTTCGGCACACTCGG
+CCGTCCTCGGCACGACAGGGCACGACCGGACAGCTCAGCGCATAGTCGTCCTTGGAGGGCGGCTGCGTGG
+CGGTCATGAGACCCTGCATTCCGGTGCCCGCCGTCACCATGTCGGTCGCGGTGCCGCCGGTCACGCAACC
+GGAGAGCGTCAGCGCCGCCGCCAGAGCGGTTACGGTCTTAGCGATCTTCGTCATTCCTTAACCTTACTCG
+TTGATTTTATTACATAATTATCATTATCGGCTCGACGGTTGTAAGCGCAAAGTAGAATTGTCGCATCCAA
+GCAAAGTAGAACTGTCGCCTCTTCCTGTCGGGACAATGGAGGATCGGCGGCATGGGATGGGTGCTGATGA
+GCGAGCGCGAACTGAACCGCATCGAGATCCTGTCGAAGGTGCTCGATCGGAGGATGACGACGACGGAAGC
+CTCGGTTCTGCTGGCGATCGGCCCGCGTCAGGTGCAGCGTCTGCTGCGACGGTTGCGCGAGGACGGCGCG
+GCGGCAACGCGGCACGGGTTGCGCGGGCGACCGTCGAACCACCGCCTCTCGCCGGGATTGCGGGACCTTG
+CGCTGGCCCTCGTGCGGGAGACCTACGTCGATTTCGGCCCCACGCTCGCGGCCGAGAAGCTGGCCGAGCG
+CGACGGCCTGCATGTGTCGCGGGAGACGCTGCGGAAGTGGATGGTCGAGGATGGGCTCTGGCTGTCGCGT
+CCTCAGCGCCGGAGGTTTCACCAGCCGCGGCTGCGGCGCGAGCACCTGGGCGAACTGGTTCAGATAGACG
+GGTCCGATCATCATTGGTTCGAGGATCGCGCACCAGCCTGCACGCTGCTCGTCTTCATCGACGACGCGAC
+GAGCCGGCTGATGGAGATGCGCTTCGTGCCCTCCGAGAGCACCTTCGCCTATTTCGCGGCGCTGGAGTGC
+TACCTGACGCGGCACGGCAGGCCCACGGCTTTCTACTCCGACAAGCATTCGGTCTTCCGCGTGGCGAGGC
+AGGACGCGCGGACCGGCCATGGCATGACGCAGTTCGGCCGGGCGCTGGCCGAGTTGAACATCGAGATCCT
+CTGCGCCAACTCCTCGCAGGCCAAGGGCCGGGTCGAGCGGGCGAACCGCACCTTGCAGGACCGGCTGGTC
+AAGGAGATGCGGCTTGGGCAGGGCATTCCAGCGACATGGGAGGGCCGGGAACGCCTTCCTGCCCGGCTTC
+ATCGAGCGGCACAACGCGCAGTTCGCCGGACGATCCCGGCCGTACCGAGGGCCGAGAAGCGGTTCGTCAG
+CGCGATACGGATATGGATTTCAGCGGCCCGGCGGTCCGGTCATCAACCGCTCAACGCCTTCGGCACGGCC
+GGGATCGTCCGCGGGGCGTGAAGTCGAAGGGGGAAGGGGCGAGCGTGCCTCAAGCCGCTGTTGTGCAACA
+ACGCCGGTCCGGGTCGGAGCCCGGCCGGGTGCGGAGCGGCTGCAACGGACCGTGCCATAAAGGCCACGCC
+ACGGGGCTATTCGCGGGATCTGCCGGGCGCTCTTGTCTTGCCGTCCCCCGGGGCCTACCTTCGCCGCATG
+TTGACGCTCCTTCATATGGCCGGAGTCCGGGCCTTCTGCGGTTCGCCGCTCACGCATGCTCTGCCCCGGG
+CAGAGGCGGTCAACCGCTGACGCCTCTTCCCGGGGCGCGTCGTCTTCCCAGATCCGGATCTGCCAGGCGG
+ACATCGTCCGCAAGGAGCCCTCATGCTTCCCCGTCCGAAATCCCGGCGCCCGAGGGCGCGGGGCGCGTCC
+TGCATGGGTCCGGCCCCGCGCCGGGCCGGAATGCCCGGGCCGCGCTGACCGGCTGAGGCGCGCGGCCTGA
diff --git a/ngs-sdk/language/c++/ReferenceSequence.cpp b/ngs-sdk/language/c++/ReferenceSequence.cpp
index 939f154..42403e9 100644
--- a/ngs-sdk/language/c++/ReferenceSequence.cpp
+++ b/ngs-sdk/language/c++/ReferenceSequence.cpp
@@ -36,6 +36,16 @@ namespace ngs
         assert ( ref != 0 );
     }
 
+    ReferenceSequence & ReferenceSequence :: operator = ( ReferenceSequenceRef ref )
+            throw ()
+    {
+        assert ( ref != 0 );
+        ReferenceSequenceRef new_ref = ref -> Duplicate ();
+        this -> self -> Release ();
+        this -> self = new_ref;
+        return * this;
+    }
+
     ReferenceSequence & ReferenceSequence :: operator = ( const ReferenceSequence & obj )
         throw ( ErrorMsg )
     {
@@ -60,4 +70,4 @@ namespace ngs
         this -> self = 0;
     }
 
-} // namespace ngs
\ No newline at end of file
+} // namespace ngs
diff --git a/ngs-sdk/language/python/Makefile b/ngs-sdk/language/python/Makefile
index 33368e0..567f6db 100644
--- a/ngs-sdk/language/python/Makefile
+++ b/ngs-sdk/language/python/Makefile
@@ -51,7 +51,6 @@ ngs-bind-python: $(ILIBDIR) $(OBJDIR) $(ILIBDIR)/$(LPFX)ngs-bind-python.$(LIBX)
 BIND_SRC =                  \
 	AlignmentItf            \
 	AlignmentIteratorItf    \
-	ErrorMsg                \
 	FragmentItf             \
 	FragmentIteratorItf     \
 	PackageItf				\
diff --git a/ngs-sdk/language/python/py_AlignmentIteratorItf.cpp b/ngs-sdk/language/python/py_AlignmentIteratorItf.cpp
index 11b4e41..addb0c3 100644
--- a/ngs-sdk/language/python/py_AlignmentIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_AlignmentIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/AlignmentItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( Alignment )
+PY_RES_TYPE PY_NGS_AlignmentIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::AlignmentItf* >(pRef) -> nextAlignment();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_AlignmentItf.cpp b/ngs-sdk/language/python/py_AlignmentItf.cpp
index 91d53ca..57b5457 100644
--- a/ngs-sdk/language/python/py_AlignmentItf.cpp
+++ b/ngs-sdk/language/python/py_AlignmentItf.cpp
@@ -36,29 +36,604 @@ GEN_PY_FUNC_GET_STRING_BY_PARAMS_2_CAST ( Alignment, FragmentBases,     Fragment
 GEN_PY_FUNC_GET_STRING_BY_PARAMS_2_CAST ( Alignment, FragmentQualities, Fragment, uint64_t, offset, uint64_t, length )
 */
 
-GEN_PY_FUNC_GET_STRING                  ( Alignment, AlignmentId )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ReferenceSpec )
-GEN_PY_FUNC_GET                         ( Alignment, MappingQuality, int32_t )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ReferenceBases )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ReadGroup )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ReadId )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ClippedFragmentBases )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, ClippedFragmentQualities )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, AlignedFragmentBases )
-GEN_PY_FUNC_GET                         ( Alignment, AlignmentCategory, uint32_t )
-GEN_PY_FUNC_GET                         ( Alignment, AlignmentPosition, int64_t )
-GEN_PY_FUNC_GET                         ( Alignment, AlignmentLength, uint64_t )
-GEN_PY_FUNC_GET                         ( Alignment, IsReversedOrientation, bool )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( Alignment, SoftClip, int32_t, uint32_t, edge )
-GEN_PY_FUNC_GET                         ( Alignment, TemplateLength, uint64_t )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_1      ( Alignment, ShortCigar, bool, clipped )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_1      ( Alignment, LongCigar, bool, clipped )
-GEN_PY_FUNC_GET                         ( Alignment, RNAOrientation, char )
+PY_RES_TYPE PY_NGS_AlignmentGetAlignmentId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getAlignmentId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetReferenceSpec ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getReferenceSpec ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetMappingQuality ( void* pRef, int32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int32_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getMappingQuality ();
+        assert (pRet != NULL);
+        *pRet = (int32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetReferenceBases ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getReferenceBases ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetReadGroup ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getReadGroup ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetReadId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getReadId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetClippedFragmentBases ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getClippedFragmentBases ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetClippedFragmentQualities ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getClippedFragmentQualities ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetAlignedFragmentBases ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getAlignedFragmentBases ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetAlignmentCategory ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getAlignmentCategory ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetAlignmentPosition ( void* pRef, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getAlignmentPosition ();
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetAlignmentLength ( void* pRef, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getAlignmentLength ();
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetIsReversedOrientation ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getIsReversedOrientation ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetSoftClip ( void* pRef, uint32_t edge, int32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int32_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getSoftClip ( edge );
+        assert (pRet != NULL);
+        *pRet = (int32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetTemplateLength ( void* pRef, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getTemplateLength ();
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetShortCigar ( void* pRef, int clipped, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getShortCigar ( clipped != 0 );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetLongCigar ( void* pRef, int clipped, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getLongCigar ( clipped != 0 );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetRNAOrientation ( void* pRef, char* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        char res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getRNAOrientation ();
+        assert (pRet != NULL);
+        *pRet = (char) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
 //GEN_PY_FUNC_GET                         ( Alignment, HasMate, bool ) // TODO: decide what to do with non-standard names
-GEN_PY_FUNC_GET_EXPLICIT_NAMES          ( Alignment, bool, PY_NGS_AlignmentHasMate, hasMate )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, MateAlignmentId )
-GEN_PY_FUNC_GET                         ( Alignment, MateAlignment, ngs::AlignmentItf* )
-GEN_PY_FUNC_GET_STRING                  ( Alignment, MateReferenceSpec )
-GEN_PY_FUNC_GET                         ( Alignment, MateIsReversedOrientation, bool )
+PY_RES_TYPE PY_NGS_AlignmentHasMate ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::AlignmentItf* >(pRef) -> hasMate ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetMateAlignmentId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getMateAlignmentId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetMateAlignment ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getMateAlignment ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetMateReferenceSpec ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getMateReferenceSpec ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_AlignmentGetMateIsReversedOrientation ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::AlignmentItf* >(pRef) -> getMateIsReversedOrientation ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
 
 
diff --git a/ngs-sdk/language/python/py_ErrorMsg.cpp b/ngs-sdk/language/python/py_ErrorMsg.cpp
deleted file mode 100644
index 20d98bf..0000000
--- a/ngs-sdk/language/python/py_ErrorMsg.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#include "py_ErrorMsg.hpp"
\ No newline at end of file
diff --git a/ngs-sdk/language/python/py_ErrorMsg.hpp b/ngs-sdk/language/python/py_ErrorMsg.hpp
index 3f65c20..bc7e3d4 100644
--- a/ngs-sdk/language/python/py_ErrorMsg.hpp
+++ b/ngs-sdk/language/python/py_ErrorMsg.hpp
@@ -24,40 +24,9 @@
 *
 */
 
-#ifndef _Included_py_ngs_itf_ErrorMsg
-#define _Included_py_ngs_itf_ErrorMsg
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "py_ngs_defs.h"
-
-#ifdef __cplusplus
-}
-#endif
-
 #include <string.h>
-
-#include <assert.h>
-#include <stdint.h>
-
 #include <ngs/itf/ErrorMsg.hpp>
 
-namespace ngs
-{
-    class StringItf;
-    
-    class AlignmentItf;
-    class FragmentItf;
-    class ReadItf;
-    class ReadGroupItf;
-    class ReferenceItf;
-    class PileupItf;
-    class PileupEventItf;
-    class ReadGroupItf;
-    class StatisticsItf;
-}
-
 namespace
 {
     template < typename T >
@@ -69,33 +38,6 @@ namespace
         return ( T ) pRef;
     }
 
-    template <typename T> struct c_type
-    {
-        typedef T type_c;
-        typedef T type_cpp;
-        //static type_cpp& cast_to_cpp (type_c& x) { return (type_cpp) x; }
-    };
-
-#define MAP_CPP_TO_C_TYPE( cpp_t, c_t )\
-    template <> struct c_type<cpp_t>\
-    {\
-        typedef c_t   type_c;\
-        typedef cpp_t type_cpp;\
-    };
-
-    MAP_CPP_TO_C_TYPE ( bool,                 int )
-    MAP_CPP_TO_C_TYPE ( ngs::StringItf*,      void* )
-    MAP_CPP_TO_C_TYPE ( ngs::AlignmentItf*,   void* )
-    MAP_CPP_TO_C_TYPE ( ngs::FragmentItf*,    void* )
-    MAP_CPP_TO_C_TYPE ( ngs::PileupItf*,      void* )
-    MAP_CPP_TO_C_TYPE ( ngs::PileupEventItf*, void* )
-    MAP_CPP_TO_C_TYPE ( ngs::ReadItf*,        void* )
-    MAP_CPP_TO_C_TYPE ( ngs::ReadGroupItf*,   void* )
-    MAP_CPP_TO_C_TYPE ( ngs::ReferenceItf*,   void* )
-    MAP_CPP_TO_C_TYPE ( ngs::StatisticsItf*,  void* )
-
-#undef MAP_CPP_TO_C_TYPE
-
     template < typename E >
     PY_RES_TYPE ExceptionHandler (E& x, void** ppNGSStrError)
     {
@@ -119,253 +61,4 @@ namespace
 
         return PY_RES_ERROR;
     }
-
-    template < typename TRef, typename TVal_cpp, typename TVal_c >
-    PY_RES_TYPE PY_NGS_GetValue(void* pRef, TVal_c* pRet, void** ppNGSStrError, TVal_cpp (TRef::*pfn)() const)
-    {
-        PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
-        try
-        {
-            TVal_cpp res = (CheckedCast< TRef* >(pRef) ->* pfn)();
-            assert(pRet != NULL);
-            *pRet = (TVal_c)res;
-            ret = PY_RES_OK;
-        }
-        catch ( ngs::ErrorMsg & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( std::exception & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( ... )
-        {
-            ret = ExceptionHandler ( ppNGSStrError );
-        }
-
-        return ret;
-    }
-
-    template < typename TRef, typename TVal_cpp, typename TVal_c, typename T1 >
-    PY_RES_TYPE PY_NGS_GetValueByParams1(void* pRef, T1 p1, TVal_c* pRet, void** ppNGSStrError, TVal_cpp (TRef::*pfn)(T1) const)
-    {
-        PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
-        try
-        {
-            TVal_cpp res = (CheckedCast< TRef* >(pRef) ->* pfn)( p1 );
-            assert(pRet != NULL);
-            *pRet = (TVal_c)res;
-            ret = PY_RES_OK;
-        }
-        catch ( ngs::ErrorMsg & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( std::exception & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( ... )
-        {
-            ret = ExceptionHandler ( ppNGSStrError );
-        }
-
-        return ret;
-    }
-
-    template < typename TRef, typename TVal_cpp, typename TVal_c, typename T1, typename T2 >
-    PY_RES_TYPE PY_NGS_GetValueByParams2(void* pRef, T1 p1, T2 p2, TVal_c* pRet, void** ppNGSStrError, TVal_cpp (TRef::*pfn)(T1, T2) const)
-    {
-        PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
-        try
-        {
-            TVal_cpp res = (CheckedCast< TRef* >(pRef) ->* pfn)( p1, p2 );
-            assert(pRet != NULL);
-            *pRet = (TVal_c)res;
-            ret = PY_RES_OK;
-        }
-        catch ( ngs::ErrorMsg & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( std::exception & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( ... )
-        {
-            ret = ExceptionHandler ( ppNGSStrError );
-        }
-
-        return ret;
-    }
-
-    template < typename TRef, typename TVal_cpp, typename TVal_c, typename T1, typename T2, typename T3 >
-    PY_RES_TYPE PY_NGS_GetValueByParams3(void* pRef, T1 p1, T2 p2, T3 p3, TVal_c* pRet, void** ppNGSStrError, TVal_cpp (TRef::*pfn)(T1, T2, T3) const)
-    {
-        PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
-        try
-        {
-            TVal_cpp res = (CheckedCast< TRef* >(pRef) ->* pfn)( p1, p2, p3 );
-            assert(pRet != NULL);
-            *pRet = (TVal_c)res;
-            ret = PY_RES_OK;
-        }
-        catch ( ngs::ErrorMsg & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( std::exception & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( ... )
-        {
-            ret = ExceptionHandler ( ppNGSStrError );
-        }
-
-        return ret;
-    }
-
-    template < typename TRef, typename TVal_cpp, typename TVal_c, typename T1, typename T2, typename T3, typename T4, typename T5 >
-    PY_RES_TYPE PY_NGS_GetValueByParams5(void* pRef, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, TVal_c* pRet, void** ppNGSStrError, TVal_cpp (TRef::*pfn)(T1, T2, T3, T4, T5) const)
-    {
-        PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
-        try
-        {
-            TVal_cpp res = (CheckedCast< TRef* >(pRef) ->* pfn)( p1, p2, p3, p4, p5 );
-            assert(pRet != NULL);
-            *pRet = (TVal_c)res;
-            ret = PY_RES_OK;
-        }
-        catch ( ngs::ErrorMsg & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( std::exception & x )
-        {
-            ret = ExceptionHandler ( x, ppNGSStrError );
-        }
-        catch ( ... )
-        {
-            ret = ExceptionHandler ( ppNGSStrError );
-        }
-
-        return ret;
-    }
-}
-
-/////////////////// Macros generating getters for any type of values ///////////////////////
-#define GEN_PY_FUNC_GET( object_name, func_sub_name, value_type )\
-PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValue <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, pRet, ppNGSStrError, & ngs::object_name##Itf::get##func_sub_name );\
-}
-
-// TODO: this function is for special cases when Itf method names do not adhere common pattern.
-#define GEN_PY_FUNC_GET_EXPLICIT_NAMES( object_name, value_type, generated_function_name, itf_function_name )\
-PY_RES_TYPE generated_function_name(void* pRef, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValue <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, pRet, ppNGSStrError, & ngs::object_name##Itf::itf_function_name );\
-}
-
-// TODO: this function is for special cases when Itf method names do not adhere common pattern.
-#define GEN_PY_FUNC_GET_EXPLICIT_NAMES_1( object_name, value_type, generated_function_name, itf_function_name, param_type1, p1 ) \
-PY_RES_TYPE generated_function_name(void* pRef, c_type<param_type1>::type_c p1, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams1 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), pRet, ppNGSStrError, & ngs::object_name##Itf::itf_function_name ); \
-}
-
-#define GEN_PY_FUNC_GET_BY_PARAMS_1( object_name, func_sub_name, value_type, param_type1, p1 )\
-PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<param_type1>::type_c p1, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams1 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), pRet, ppNGSStrError, & ngs::object_name##Itf::get##func_sub_name );\
-}
-
-// TODO: this function is for special cases when Itf method names do not adhere common pattern.
-#define GEN_PY_FUNC_GET_BY_PARAMS_1_EXPLICIT_NAMES( object_name, value_type, param_type1, p1, generated_function_name, itf_function_name )\
-PY_RES_TYPE generated_function_name(void* pRef, c_type<param_type1>::type_c p1, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams1 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), pRet, ppNGSStrError, & ngs::object_name##Itf::itf_function_name );\
-}
-
-#define GEN_PY_FUNC_GET_BY_PARAMS_2( object_name, func_sub_name, value_type, param_type1, p1, param_type2, p2 )\
-PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<param_type1>::type_c p1, c_type<param_type2>::type_c p2, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams2 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), (c_type<param_type2>::type_cpp)(p2), pRet, ppNGSStrError, & ngs::object_name##Itf::get##func_sub_name );\
-}
-
-// TODO: this function is for special cases when Itf method names do not adhere common pattern.
-#define GEN_PY_FUNC_GET_BY_PARAMS_2_EXPLICIT_NAMES( object_name, value_type, param_type1, p1, param_type2, p2, generated_function_name, itf_function_name )\
-PY_RES_TYPE generated_function_name(void* pRef, c_type<param_type1>::type_c p1, c_type<param_type2>::type_c p2, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams2 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), (c_type<param_type2>::type_cpp)(p2), pRet, ppNGSStrError, & ngs::object_name##Itf::itf_function_name );\
 }
-
-
-#define GEN_PY_FUNC_GET_BY_PARAMS_3( object_name, func_sub_name, value_type, param_type1, p1, param_type2, p2, param_type3, p3 )\
-PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<param_type1>::type_c p1, c_type<param_type2>::type_c p2, c_type<param_type3>::type_c p3, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams3 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), (c_type<param_type2>::type_cpp)(p2), (c_type<param_type3>::type_cpp)(p3), pRet, ppNGSStrError, & ngs::object_name##Itf::get##func_sub_name );\
-}
-
-
-#define GEN_PY_FUNC_GET_BY_PARAMS_5( object_name, func_sub_name, value_type, param_type1, p1, param_type2, p2, param_type3, p3, param_type4, p4, param_type5, p5 )\
-PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<param_type1>::type_c p1, c_type<param_type2>::type_c p2, c_type<param_type3>::type_c p3, c_type<param_type4>::type_c p4, c_type<param_type5>::type_c p5, c_type<value_type>::type_c* pRet, void** ppNGSStrError)\
-{\
-    return PY_NGS_GetValueByParams5 <ngs::object_name##Itf, value_type, c_type<value_type>::type_c> ( pRef, (c_type<param_type1>::type_cpp)(p1), (c_type<param_type2>::type_cpp)(p2), (c_type<param_type3>::type_cpp)(p3), (c_type<param_type4>::type_cpp)(p4), (c_type<param_type5>::type_cpp)(p5), pRet, ppNGSStrError, & ngs::object_name##Itf::get##func_sub_name );\
-}
-
-/////////////////// Specialized macros to generate getters returning Strings ////////////////
-
-#define GEN_PY_FUNC_GET_STRING( object_name, func_sub_name ) GEN_PY_FUNC_GET( object_name, func_sub_name, ngs::StringItf* )
-#define GEN_PY_FUNC_GET_STRING_BY_PARAMS_1( object_name, func_sub_name, param_type1, p1 ) GEN_PY_FUNC_GET_BY_PARAMS_1( object_name, func_sub_name, ngs::StringItf*, param_type1, p1 )
-#define GEN_PY_FUNC_GET_STRING_BY_PARAMS_2( object_name, func_sub_name, param_type1, p1, param_type2, p2 ) GEN_PY_FUNC_GET_BY_PARAMS_2( object_name, func_sub_name, ngs::StringItf*, param_type1, p1, param_type2, p2 )
-
-/////////////////// Specialized macros to generate getters returning Strings and reinterpretting pRef as different type ///////////////
-
-//#define GEN_PY_FUNC_GET_STRING_CAST( object_name, func_sub_name, object_reinterpret_name )\
-//PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, void** pRet, void** ppNGSStrError)\
-//{\
-//    return PY_NGS_GetValue <ngs::object_reinterpret_name##Itf, ngs::StringItf*, c_type<ngs::StringItf*>::type_c> ( pRef, pRet, ppNGSStrError, & ngs::object_reinterpret_name##Itf::get##func_sub_name );\
-//}
-//
-//#define GEN_PY_FUNC_GET_STRING_BY_PARAMS_2_CAST( object_name, func_sub_name, object_reinterpret_name, param_type1, p1, param_type2, p2 )\
-//PY_RES_TYPE PY_NGS_##object_name##Get##func_sub_name(void* pRef, c_type<param_type1>::type_c p1, c_type<param_type2>::type_c p2, void** pRet, void** ppNGSStrError)\
-//{\
-//    return PY_NGS_GetValueByParams2 <ngs::object_reinterpret_name##Itf> ( pRef, (c_type<param_type1>::type_cpp)(p1), (c_type<param_type2>::type_cpp)(p2), pRet, ppNGSStrError, & ngs::object_reinterpret_name##Itf::get##func_sub_name );\
-//}
-
-///////////////// Separate macro to generate iterator-next functions /////////////////////
-
-#define GEN_PY_ITERATOR_NEXT_IMPL(object_name, generated_function_name)\
-PY_RES_TYPE generated_function_name ( void* pRef, int* pRet, void** ppNGSStrError )\
-{\
-    PY_RES_TYPE ret = PY_RES_ERROR;\
-    try\
-    {\
-        bool res = CheckedCast< ngs::object_name##Itf* >(pRef) -> next##object_name();\
-        assert(pRet != NULL);\
-        *pRet = (int)res;\
-        ret = PY_RES_OK;\
-    }\
-    catch ( ngs::ErrorMsg & x )\
-    {\
-        ret = ExceptionHandler ( x, ppNGSStrError );\
-    }\
-    catch ( std::exception & x )\
-    {\
-        ret = ExceptionHandler ( x, ppNGSStrError );\
-    }\
-    catch ( ... )\
-    {\
-        ret = ExceptionHandler ( ppNGSStrError );\
-    }\
-    return ret;\
-}
-
-#define GEN_PY_ITERATOR_NEXT(object_name) GEN_PY_ITERATOR_NEXT_IMPL(object_name, PY_NGS_##object_name##IteratorNext )
-#define GEN_PY_ITERATOR_NEXT_EXPLICIT_NAMES(object_name, generated_function_name) GEN_PY_ITERATOR_NEXT_IMPL(object_name, generated_function_name )
-
-#endif /* _Included_py_ngs_itf_ErrorMsg */
diff --git a/ngs-sdk/language/python/py_FragmentIteratorItf.cpp b/ngs-sdk/language/python/py_FragmentIteratorItf.cpp
index 7bf9240..e2c81a5 100644
--- a/ngs-sdk/language/python/py_FragmentIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_FragmentIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/FragmentItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( Fragment )
+PY_RES_TYPE PY_NGS_FragmentIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::FragmentItf* >(pRef) -> nextFragment();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_FragmentItf.cpp b/ngs-sdk/language/python/py_FragmentItf.cpp
index ebec164..abc5402 100644
--- a/ngs-sdk/language/python/py_FragmentItf.cpp
+++ b/ngs-sdk/language/python/py_FragmentItf.cpp
@@ -29,8 +29,133 @@
 
 #include <ngs/itf/FragmentItf.hpp>
 
-GEN_PY_FUNC_GET_STRING                  ( Fragment, FragmentId )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2      ( Fragment, FragmentBases,     uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2      ( Fragment, FragmentQualities, uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_EXPLICIT_NAMES          ( Fragment, bool, PY_NGS_FragmentIsPaired, isPaired )
-GEN_PY_FUNC_GET_EXPLICIT_NAMES          ( Fragment, bool, PY_NGS_FragmentIsAligned, isAligned )
\ No newline at end of file
+PY_RES_TYPE PY_NGS_FragmentGetFragmentId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::FragmentItf* >(pRef) -> getFragmentId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_FragmentGetFragmentBases ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::FragmentItf* >(pRef) -> getFragmentBases ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_FragmentGetFragmentQualities ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::FragmentItf* >(pRef) -> getFragmentQualities ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_FragmentIsPaired ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::FragmentItf* >(pRef) -> isPaired ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_FragmentIsAligned ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::FragmentItf* >(pRef) -> isAligned ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_PileupEventIteratorItf.cpp b/ngs-sdk/language/python/py_PileupEventIteratorItf.cpp
index 7d1f94e..8142251 100644
--- a/ngs-sdk/language/python/py_PileupEventIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_PileupEventIteratorItf.cpp
@@ -29,7 +29,31 @@
 
 #include <ngs/itf/PileupEventItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( PileupEvent )
+PY_RES_TYPE PY_NGS_PileupEventIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::PileupEventItf* >(pRef) -> nextPileupEvent();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
 
 PY_RES_TYPE PY_NGS_PileupEventIteratorReset ( void* pRef, int* pRet, void** ppNGSStrError )
 {
diff --git a/ngs-sdk/language/python/py_PileupEventItf.cpp b/ngs-sdk/language/python/py_PileupEventItf.cpp
index 61d9c2c..5625f1b 100644
--- a/ngs-sdk/language/python/py_PileupEventItf.cpp
+++ b/ngs-sdk/language/python/py_PileupEventItf.cpp
@@ -29,15 +29,315 @@
 
 #include <ngs/itf/PileupEventItf.hpp>
 
-GEN_PY_FUNC_GET                         ( PileupEvent, MappingQuality,         int32_t )
-GEN_PY_FUNC_GET_STRING                  ( PileupEvent, AlignmentId )
-GEN_PY_FUNC_GET                         ( PileupEvent, AlignmentPosition,      int64_t )
-GEN_PY_FUNC_GET                         ( PileupEvent, FirstAlignmentPosition, int64_t )
-GEN_PY_FUNC_GET                         ( PileupEvent, LastAlignmentPosition,  int64_t )
-GEN_PY_FUNC_GET                         ( PileupEvent, EventType,              uint32_t )
-GEN_PY_FUNC_GET                         ( PileupEvent, AlignmentBase,          char )
-GEN_PY_FUNC_GET                         ( PileupEvent, AlignmentQuality,       char )
-GEN_PY_FUNC_GET_STRING                  ( PileupEvent, InsertionBases )
-GEN_PY_FUNC_GET_STRING                  ( PileupEvent, InsertionQualities )
-GEN_PY_FUNC_GET                         ( PileupEvent, EventRepeatCount,       uint32_t )
-GEN_PY_FUNC_GET                         ( PileupEvent, EventIndelType,         uint32_t )
+PY_RES_TYPE PY_NGS_PileupEventGetMappingQuality ( void* pRef, int32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int32_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getMappingQuality ();
+        assert (pRet != NULL);
+        *pRet = (int32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetAlignmentId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getAlignmentId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetAlignmentPosition ( void* pRef, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getAlignmentPosition ();
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetFirstAlignmentPosition ( void* pRef, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getFirstAlignmentPosition ();
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetLastAlignmentPosition ( void* pRef, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getLastAlignmentPosition ();
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetEventType ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getEventType ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetAlignmentBase ( void* pRef, char* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        char res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getAlignmentBase ();
+        assert (pRet != NULL);
+        *pRet = (char) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetAlignmentQuality ( void* pRef, char* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        char res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getAlignmentQuality ();
+        assert (pRet != NULL);
+        *pRet = (char) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetInsertionBases ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getInsertionBases ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetInsertionQualities ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getInsertionQualities ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetEventRepeatCount ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getEventRepeatCount ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupEventGetEventIndelType ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::PileupEventItf* >(pRef) -> getEventIndelType ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_PileupIteratorItf.cpp b/ngs-sdk/language/python/py_PileupIteratorItf.cpp
index 2116522..949a54a 100644
--- a/ngs-sdk/language/python/py_PileupIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_PileupIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/PileupItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( Pileup )
+PY_RES_TYPE PY_NGS_PileupIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::PileupItf* >(pRef) -> nextPileup();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_PileupItf.cpp b/ngs-sdk/language/python/py_PileupItf.cpp
index 1348ff9..8ea5fc0 100644
--- a/ngs-sdk/language/python/py_PileupItf.cpp
+++ b/ngs-sdk/language/python/py_PileupItf.cpp
@@ -29,7 +29,107 @@
 
 #include <ngs/itf/PileupItf.hpp>
 
-GEN_PY_FUNC_GET_STRING                  ( Pileup, ReferenceSpec )
-GEN_PY_FUNC_GET                         ( Pileup, ReferencePosition, int64_t )
-GEN_PY_FUNC_GET                         ( Pileup, ReferenceBase,     char )
-GEN_PY_FUNC_GET                         ( Pileup, PileupDepth,       uint32_t )
+PY_RES_TYPE PY_NGS_PileupGetReferenceSpec ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::PileupItf* >(pRef) -> getReferenceSpec ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupGetReferencePosition ( void* pRef, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::PileupItf* >(pRef) -> getReferencePosition ();
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupGetReferenceBase ( void* pRef, char* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        char res = CheckedCast< ngs::PileupItf* >(pRef) -> getReferenceBase ();
+        assert (pRet != NULL);
+        *pRet = (char) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_PileupGetPileupDepth ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::PileupItf* >(pRef) -> getPileupDepth ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReadCollectionItf.cpp b/ngs-sdk/language/python/py_ReadCollectionItf.cpp
index 561390d..9e051cb 100644
--- a/ngs-sdk/language/python/py_ReadCollectionItf.cpp
+++ b/ngs-sdk/language/python/py_ReadCollectionItf.cpp
@@ -29,18 +29,393 @@
 
 #include <ngs/itf/ReadCollectionItf.hpp>
 
-GEN_PY_FUNC_GET_STRING                  ( ReadCollection, Name )
-GEN_PY_FUNC_GET                         ( ReadCollection, ReadGroups,     ngs::ReadGroupItf* )
-GEN_PY_FUNC_GET_EXPLICIT_NAMES_1        ( ReadCollection, bool, PY_NGS_ReadCollectionHasReadGroup, hasReadGroup, char const*, spec )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, ReadGroup,      ngs::ReadGroupItf*, char const*, spec )
-GEN_PY_FUNC_GET                         ( ReadCollection, References,     ngs::ReferenceItf* )
-GEN_PY_FUNC_GET_EXPLICIT_NAMES_1        ( ReadCollection, bool, PY_NGS_ReadCollectionHasReference, hasReference, char const*, spec )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, Reference,      ngs::ReferenceItf*, char const*, spec )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, Alignment,      ngs::AlignmentItf*, char const*, alignmentId )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, Alignments,     ngs::AlignmentItf*, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, AlignmentCount, uint64_t, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_3             ( ReadCollection, AlignmentRange, ngs::AlignmentItf*, uint64_t, first, uint64_t, count, uint32_t, categories  )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, Read,           ngs::ReadItf*, char const*, readId )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, Reads,          ngs::ReadItf*, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_1             ( ReadCollection, ReadCount,      uint64_t, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_3             ( ReadCollection, ReadRange,      ngs::ReadItf*, uint64_t, first, uint64_t, count, uint32_t, categories )
+PY_RES_TYPE PY_NGS_ReadCollectionGetName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReadGroups ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReadGroupItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReadGroups ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionHasReadGroup ( void* pRef, char const* spec, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> hasReadGroup ( spec );
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReadGroup ( void* pRef, char const* spec, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReadGroupItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReadGroup ( spec );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReferences ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReferenceItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReferences ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionHasReference ( void* pRef, char const* spec, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> hasReference ( spec );
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReference ( void* pRef, char const* spec, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReferenceItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReference ( spec );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetAlignment ( void* pRef, char const* alignmentId, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getAlignment ( alignmentId );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetAlignments ( void* pRef, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getAlignments ( categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetAlignmentCount ( void* pRef, uint32_t categories, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getAlignmentCount ( categories );
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetAlignmentRange ( void* pRef, uint64_t first, uint64_t count, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getAlignmentRange ( first, count, categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetRead ( void* pRef, char const* readId, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReadItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getRead ( readId );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReads ( void* pRef, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReadItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReads ( categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReadCount ( void* pRef, uint32_t categories, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReadCount ( categories );
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadCollectionGetReadRange ( void* pRef, uint64_t first, uint64_t count, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::ReadItf* res = CheckedCast< ngs::ReadCollectionItf* >(pRef) -> getReadRange ( first, count, categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp b/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp
index ad00313..9bb0ab6 100644
--- a/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_ReadGroupIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/ReadGroupItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( ReadGroup )
+PY_RES_TYPE PY_NGS_ReadGroupIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::ReadGroupItf* >(pRef) -> nextReadGroup();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReadGroupItf.cpp b/ngs-sdk/language/python/py_ReadGroupItf.cpp
index 1c40d61..7649326 100644
--- a/ngs-sdk/language/python/py_ReadGroupItf.cpp
+++ b/ngs-sdk/language/python/py_ReadGroupItf.cpp
@@ -29,10 +29,60 @@
 
 #include <ngs/itf/ReadGroupItf.hpp>
 
-GEN_PY_FUNC_GET_STRING           ( ReadGroup, Name )
+PY_RES_TYPE PY_NGS_ReadGroupGetName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadGroupItf* >(pRef) -> getName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
 
 #if READ_GROUP_SUPPORTS_READS
     GEN_PY_FUNC_GET_BY_PARAMS1   ( ReadGroup, Read, ngs::ReadItf*, char const*, readId )
     GEN_PY_FUNC_GET_BY_PARAMS1   ( ReadGroup, Reads, ngs::ReadItf*, uint32_t, categories )
 #endif
-    GEN_PY_FUNC_GET              ( ReadGroup, Statistics, ngs::StatisticsItf* )
+PY_RES_TYPE PY_NGS_ReadGroupGetStatistics ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::StatisticsItf* res = CheckedCast< ngs::ReadGroupItf* >(pRef) -> getStatistics ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReadIteratorItf.cpp b/ngs-sdk/language/python/py_ReadIteratorItf.cpp
index e81f195..52feadb 100644
--- a/ngs-sdk/language/python/py_ReadIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_ReadIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/ReadItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( Read )
+PY_RES_TYPE PY_NGS_ReadIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::ReadItf* >(pRef) -> nextRead();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReadItf.cpp b/ngs-sdk/language/python/py_ReadItf.cpp
index 6b8afe1..22bb4f1 100644
--- a/ngs-sdk/language/python/py_ReadItf.cpp
+++ b/ngs-sdk/language/python/py_ReadItf.cpp
@@ -35,11 +35,211 @@ GEN_PY_FUNC_GET_STRING_BY_PARAMS_2_CAST ( Read, FragmentBases,     Fragment, uin
 GEN_PY_FUNC_GET_STRING_BY_PARAMS_2_CAST ( Read, FragmentQualities, Fragment, uint64_t, offset, uint64_t, length )
 GEN_PY_ITERATOR_NEXT_EXPLICIT_NAMES     ( Fragment, PY_NGS_ReadNextFragment )*/
 
-GEN_PY_FUNC_GET_STRING                      ( Read, ReadId )
-GEN_PY_FUNC_GET                             ( Read, NumFragments, uint32_t )
-GEN_PY_FUNC_GET_BY_PARAMS_1_EXPLICIT_NAMES  ( Read, bool, uint32_t, fragIdx, PY_NGS_ReadFragmentIsAligned, fragmentIsAligned)
-GEN_PY_FUNC_GET                             ( Read, ReadCategory, uint32_t )
-GEN_PY_FUNC_GET_STRING                      ( Read, ReadGroup )
-GEN_PY_FUNC_GET_STRING                      ( Read, ReadName )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2          ( Read, ReadBases, uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2          ( Read, ReadQualities, uint64_t, offset, uint64_t, length )
+PY_RES_TYPE PY_NGS_ReadGetReadId ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadId ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetNumFragments ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::ReadItf* >(pRef) -> getNumFragments ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadFragmentIsAligned ( void* pRef, uint32_t fragIdx, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::ReadItf* >(pRef) -> fragmentIsAligned ( fragIdx );
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetReadCategory ( void* pRef, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadCategory ();
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetReadGroup ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadGroup ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetReadName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetReadBases ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadBases ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReadGetReadQualities ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReadItf* >(pRef) -> getReadQualities ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReferenceIteratorItf.cpp b/ngs-sdk/language/python/py_ReferenceIteratorItf.cpp
index 265f91d..e723d4c 100644
--- a/ngs-sdk/language/python/py_ReferenceIteratorItf.cpp
+++ b/ngs-sdk/language/python/py_ReferenceIteratorItf.cpp
@@ -29,4 +29,28 @@
 
 #include <ngs/itf/ReferenceItf.hpp>
 
-GEN_PY_ITERATOR_NEXT ( Reference )
+PY_RES_TYPE PY_NGS_ReferenceIteratorNext ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR;
+    try
+    {
+        bool res = CheckedCast< ngs::ReferenceItf* >(pRef) -> nextReference();
+        assert(pRet != NULL);
+        *pRet = (int)res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReferenceItf.cpp b/ngs-sdk/language/python/py_ReferenceItf.cpp
index 3b0d4a6..8ea1966 100644
--- a/ngs-sdk/language/python/py_ReferenceItf.cpp
+++ b/ngs-sdk/language/python/py_ReferenceItf.cpp
@@ -29,17 +29,367 @@
 
 #include <ngs/itf/ReferenceItf.hpp>
 
-GEN_PY_FUNC_GET_STRING             ( Reference, CommonName )
-GEN_PY_FUNC_GET_STRING             ( Reference, CanonicalName )
-GEN_PY_FUNC_GET                    ( Reference, IsCircular,             bool )
-GEN_PY_FUNC_GET                    ( Reference, Length,                 uint64_t )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2 ( Reference, ReferenceBases,         uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2 ( Reference, ReferenceChunk,         uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_BY_PARAMS_1        ( Reference, Alignment,              ngs::AlignmentItf*, char const*, alignmentId )
-GEN_PY_FUNC_GET_BY_PARAMS_1        ( Reference, Alignments,             ngs::AlignmentItf*, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_3        ( Reference, AlignmentSlice,         ngs::AlignmentItf*, int64_t, start, uint64_t, length, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_5        ( Reference, FilteredAlignmentSlice, ngs::AlignmentItf*, int64_t, start, uint64_t, length, uint32_t, categories, uint32_t, filters, int32_t, map_qual )
-GEN_PY_FUNC_GET_BY_PARAMS_1        ( Reference, Pileups,                ngs::PileupItf*, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_3        ( Reference, FilteredPileups,        ngs::PileupItf*, uint32_t, categories, uint32_t, filters, int32_t, map_qual )
-GEN_PY_FUNC_GET_BY_PARAMS_3        ( Reference, PileupSlice,            ngs::PileupItf*, int64_t, start, uint64_t, length, uint32_t, categories )
-GEN_PY_FUNC_GET_BY_PARAMS_5        ( Reference, FilteredPileupSlice,    ngs::PileupItf*, int64_t, start, uint64_t, length, uint32_t, categories, uint32_t, filters, int32_t, map_qual )
+PY_RES_TYPE PY_NGS_ReferenceGetCommonName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getCommonName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetCanonicalName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getCanonicalName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetIsCircular ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getIsCircular ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetLength ( void* pRef, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getLength ();
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetReferenceBases ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getReferenceBases ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetReferenceChunk ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getReferenceChunk ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetAlignment ( void* pRef, char const* alignmentId, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getAlignment ( alignmentId );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetAlignments ( void* pRef, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getAlignments ( categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetAlignmentSlice ( void* pRef, int64_t start, uint64_t length, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getAlignmentSlice ( start, length, categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetFilteredAlignmentSlice ( void* pRef, int64_t start, uint64_t length, uint32_t categories, uint32_t filters, int32_t map_qual, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::AlignmentItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getFilteredAlignmentSlice ( start, length, categories, filters, map_qual );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetPileups ( void* pRef, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::PileupItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getPileups ( categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetFilteredPileups ( void* pRef, uint32_t categories, uint32_t filters, int32_t map_qual, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::PileupItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getFilteredPileups ( categories, filters, map_qual );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetPileupSlice ( void* pRef, int64_t start, uint64_t length, uint32_t categories, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::PileupItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getPileupSlice ( start, length, categories );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceGetFilteredPileupSlice ( void* pRef, int64_t start, uint64_t length, uint32_t categories, uint32_t filters, int32_t map_qual, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::PileupItf* res = CheckedCast< ngs::ReferenceItf* >(pRef) -> getFilteredPileupSlice ( start, length, categories, filters, map_qual );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_ReferenceSequenceItf.cpp b/ngs-sdk/language/python/py_ReferenceSequenceItf.cpp
index 66213b1..e9f86c8 100644
--- a/ngs-sdk/language/python/py_ReferenceSequenceItf.cpp
+++ b/ngs-sdk/language/python/py_ReferenceSequenceItf.cpp
@@ -29,8 +29,133 @@
 
 #include <ngs/itf/ReferenceSequenceItf.hpp>
 
-GEN_PY_FUNC_GET_STRING             ( ReferenceSequence, CanonicalName )
-GEN_PY_FUNC_GET                    ( ReferenceSequence, IsCircular,     bool )
-GEN_PY_FUNC_GET                    ( ReferenceSequence, Length,         uint64_t )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2 ( ReferenceSequence, ReferenceBases, uint64_t, offset, uint64_t, length )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_2 ( ReferenceSequence, ReferenceChunk, uint64_t, offset, uint64_t, length )
+PY_RES_TYPE PY_NGS_ReferenceSequenceGetCanonicalName ( void* pRef, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceSequenceItf* >(pRef) -> getCanonicalName ();
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceSequenceGetIsCircular ( void* pRef, int* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        bool res = CheckedCast< ngs::ReferenceSequenceItf* >(pRef) -> getIsCircular ();
+        assert (pRet != NULL);
+        *pRet = (int) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceSequenceGetLength ( void* pRef, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::ReferenceSequenceItf* >(pRef) -> getLength ();
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceSequenceGetReferenceBases ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceSequenceItf* >(pRef) -> getReferenceBases ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_ReferenceSequenceGetReferenceChunk ( void* pRef, uint64_t offset, uint64_t length, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::ReferenceSequenceItf* >(pRef) -> getReferenceChunk ( offset, length );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_StatisticsItf.cpp b/ngs-sdk/language/python/py_StatisticsItf.cpp
index 1d53f13..825b2a2 100644
--- a/ngs-sdk/language/python/py_StatisticsItf.cpp
+++ b/ngs-sdk/language/python/py_StatisticsItf.cpp
@@ -29,9 +29,159 @@
 
 #include <ngs/itf/StatisticsItf.hpp>
 
-GEN_PY_FUNC_GET_BY_PARAMS_1                ( Statistics, ValueType, uint32_t, char const*, path )
-GEN_PY_FUNC_GET_STRING_BY_PARAMS_1         ( Statistics, AsString, char const*, path )
-GEN_PY_FUNC_GET_BY_PARAMS_1                ( Statistics, AsI64,     int64_t, char const*, path )
-GEN_PY_FUNC_GET_BY_PARAMS_1                ( Statistics, AsU64,     uint64_t, char const*, path )
-GEN_PY_FUNC_GET_BY_PARAMS_1                ( Statistics, AsDouble,  double, char const*, path )
-GEN_PY_FUNC_GET_BY_PARAMS_1_EXPLICIT_NAMES ( Statistics, ngs::StringItf*, char const*, path, PY_NGS_StatisticsGetNextPath, nextPath )
+PY_RES_TYPE PY_NGS_StatisticsGetValueType ( void* pRef, char const* path, uint32_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint32_t res = CheckedCast< ngs::StatisticsItf* >(pRef) -> getValueType ( path );
+        assert (pRet != NULL);
+        *pRet = (uint32_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_StatisticsGetAsString ( void* pRef, char const* path, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        void* res = CheckedCast< ngs::StatisticsItf* >(pRef) -> getAsString ( path );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_StatisticsGetAsI64 ( void* pRef, char const* path, int64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        int64_t res = CheckedCast< ngs::StatisticsItf* >(pRef) -> getAsI64 ( path );
+        assert (pRet != NULL);
+        *pRet = (int64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_StatisticsGetAsU64 ( void* pRef, char const* path, uint64_t* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        uint64_t res = CheckedCast< ngs::StatisticsItf* >(pRef) -> getAsU64 ( path );
+        assert (pRet != NULL);
+        *pRet = (uint64_t) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_StatisticsGetAsDouble ( void* pRef, char const* path, double* pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        double res = CheckedCast< ngs::StatisticsItf* >(pRef) -> getAsDouble ( path );
+        assert (pRet != NULL);
+        *pRet = (double) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
+PY_RES_TYPE PY_NGS_StatisticsGetNextPath ( void* pRef, char const* path, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::StringItf* res = CheckedCast< ngs::StatisticsItf* >(pRef) -> nextPath ( path );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
diff --git a/ngs-sdk/language/python/py_StringItf.cpp b/ngs-sdk/language/python/py_StringItf.cpp
index 729ffa2..39217ae 100644
--- a/ngs-sdk/language/python/py_StringItf.cpp
+++ b/ngs-sdk/language/python/py_StringItf.cpp
@@ -29,7 +29,32 @@
 
 #include <ngs/itf/StringItf.hpp>
 
-GEN_PY_FUNC_GET_BY_PARAMS_2_EXPLICIT_NAMES ( String, ngs::StringItf*, size_t, offset, size_t, size, PY_NGS_StringGetSubstring, substr )
+PY_RES_TYPE PY_NGS_StringGetSubstring ( void* pRef, size_t offset, size_t size, void** pRet, void** ppNGSStrError )
+{
+    PY_RES_TYPE ret = PY_RES_ERROR; // TODO: use xt_* codes
+    try
+    {
+        ngs::StringItf* res = CheckedCast< ngs::StringItf* >(pRef) -> substr ( offset, size );
+        assert (pRet != NULL);
+        *pRet = (void*) res;
+        ret = PY_RES_OK;
+    }
+    catch ( ngs::ErrorMsg & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( std::exception & x )
+    {
+        ret = ExceptionHandler ( x, ppNGSStrError );
+    }
+    catch ( ... )
+    {
+        ret = ExceptionHandler ( ppNGSStrError );
+    }
+
+    return ret;
+}
+
 
 PY_RES_TYPE PY_NGS_StringGetData ( void* pRef, char const** pRet )
 {
diff --git a/ngs-sdk/win/stdbool.h b/ngs-sdk/ngs/win/stdbool.h
similarity index 100%
rename from ngs-sdk/win/stdbool.h
rename to ngs-sdk/ngs/win/stdbool.h
diff --git a/ngs-sdk/setup/package.prl b/ngs-sdk/setup/package.prl
index 73cf8bc..6348b29 100644
--- a/ngs-sdk/setup/package.prl
+++ b/ngs-sdk/setup/package.prl
@@ -1,6 +1,6 @@
 ################################################################################
 sub PACKAGE      { 'ngs-sdk' }
-sub VERSION      { '1.2.3' }
+sub VERSION      { '1.2.4' }
 sub PACKAGE_TYPE { 'L' }
 sub PACKAGE_NAME { 'NGS-SDK' }
 sub PACKAGE_NAMW { 'NGS' }
diff --git a/ngs-sdk/win/.gitignore b/ngs-sdk/win/.gitignore
deleted file mode 100644
index 8a9d35c..0000000
--- a/ngs-sdk/win/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.user
diff --git a/ngs-sdk/win/build.xml b/ngs-sdk/win/build.xml
new file mode 100644
index 0000000..d7aa347
--- /dev/null
+++ b/ngs-sdk/win/build.xml
@@ -0,0 +1,67 @@
+<project name="NGS-SDK" default="runtests" basedir=".">
+
+    <description>
+        Ant script for NGS-SDK
+    </description>
+	
+    <property name="Platform"       value="x64" />
+    <property name="Configuration"  value="Debug" />
+    <property name="Output"         value="${basedir}\..\..\..\OUTDIR\" />
+    <property name="MSVS"           value="2013" />
+	
+    <target name="help">
+  		<echo message="">
+Apache Ant script for automated testing of NGS-SDK on Windows
+
+Usage (in the directory of this file, build.xml):
+  ant [options] target1 target2 ... 
+  
+Example:
+  ant -DConfiguration=Debug -Platform=Win32 help std
+  
+Supported targets:
+	help        - print this text and exit
+    clean       - remove all build artefacts
+    build       - regular build
+    runtests    - build and run unit tests
+
+Options:
+    -DConfiguration=Debug or -DConfiguration=Release (default)  
+    -DPlatform=Win32 or -DPlatform=x64 (default)  
+    -DOutput=path   folder to create outputs in (default: ../../../OUTDIR/)
+    -DMSVS=version  MSVS toolset, 2010 or 2013 (default: 2013)
+  		</echo>
+    </target>
+    
+    <target name="clean">
+        <exec executable="msbuild.exe" failonerror="true">
+            <arg value="vs${MSVS}\ngs-sdk.sln"/>
+            <arg value="/t:clean"/>
+            <arg value="/m"/>
+            <arg value="/p:Platform=${Platform}"/>
+            <arg value="/p:Configuration=${Configuration}"/>
+            <arg value="/p:NGS_OUTDIR=${Output}\ngs-sdk\"/>
+        </exec>
+    </target>
+
+    <target name="build">
+        <exec executable="msbuild.exe" failonerror="true">
+            <arg value="vs${MSVS}\ngs-sdk.sln"/>
+            <arg value="/m"/>
+            <arg value="/p:Platform=${Platform}"/>
+            <arg value="/p:Configuration=${Configuration}"/>
+            <arg value="/p:NGS_OUTDIR=${Output}\ngs-sdk\"/>
+        </exec>
+    </target>
+    
+    <target name="runtests" depends="build">
+        <exec executable="msbuild.exe" failonerror="true">
+            <arg value="vs${MSVS}\ngs-sdk.sln"/>
+            <arg value="/p:Platform=${Platform}"/>
+            <arg value="/p:Configuration=${Configuration}"/>
+            <arg value="/p:NGS_OUTDIR=${Output}\ngs-sdk\"/>
+            <arg value="/p:Autorun=true"/>
+        </exec>
+    </target>
+    
+</project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libadapter.files b/ngs-sdk/win/libadapter.files
new file mode 100644
index 0000000..d52a9fb
--- /dev/null
+++ b/ngs-sdk/win/libadapter.files
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\AlignmentItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\defs.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ErrorMsg.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\FragmentItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\PileupEventItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\PileupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ReadCollectionItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ReadGroupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ReadItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\Refcount.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ReferenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\ReferenceSequenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\StatisticsItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\adapter\StringItf.hpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\AlignmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ErrBlock.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ErrorMsg.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\FragmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\PileupEventItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\PileupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ReadCollectionItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ReadGroupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ReadItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\Refcount.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ReferenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\ReferenceSequenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\StatisticsItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\adapter\StringItf.cpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libadapter.vcxproj b/ngs-sdk/win/libadapter.vcxproj
deleted file mode 100644
index c3014e7..0000000
--- a/ngs-sdk/win/libadapter.vcxproj
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  
-    <PropertyGroup Label="Globals">
-        <ProjectGuid>{B9096FEF-5B55-4308-A81F-3B52CA968BE9}</ProjectGuid>
-        <ProjectName>libngs-adapt-c++</ProjectName>
-    </PropertyGroup>
-    
-    <Import Project="lib-project.props" />
-  
-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-    <ImportGroup Label="ExtensionTargets" />
-    
-    <ItemGroup>
-        <ClInclude Include="..\ngs\adapter\AlignmentItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\defs.h" />
-        <ClInclude Include="..\ngs\adapter\ErrorMsg.hpp" />
-        <ClInclude Include="..\ngs\adapter\FragmentItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\PileupEventItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\PileupItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\ReadCollectionItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\ReadGroupItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\ReadItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\Refcount.hpp" />
-        <ClInclude Include="..\ngs\adapter\ReferenceItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\ReferenceSequenceItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\StatisticsItf.hpp" />
-        <ClInclude Include="..\ngs\adapter\StringItf.hpp" />
-    </ItemGroup>
-    <ItemGroup>
-        <ClCompile Include="..\adapter\AlignmentItf.cpp" />
-        <ClCompile Include="..\adapter\ErrBlock.cpp" />
-        <ClCompile Include="..\adapter\ErrorMsg.cpp" />
-        <ClCompile Include="..\adapter\FragmentItf.cpp" />
-        <ClCompile Include="..\adapter\PileupEventItf.cpp" />
-        <ClCompile Include="..\adapter\PileupItf.cpp" />
-        <ClCompile Include="..\adapter\ReadCollectionItf.cpp" />
-        <ClCompile Include="..\adapter\ReadGroupItf.cpp" />
-        <ClCompile Include="..\adapter\ReadItf.cpp" />
-        <ClCompile Include="..\adapter\Refcount.cpp" />
-        <ClCompile Include="..\adapter\ReferenceItf.cpp" />
-        <ClCompile Include="..\adapter\ReferenceSequenceItf.cpp" />
-        <ClCompile Include="..\adapter\StatisticsItf.cpp" />
-        <ClCompile Include="..\adapter\StringItf.cpp" />
-    </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libdispatch.files b/ngs-sdk/win/libdispatch.files
new file mode 100644
index 0000000..594d0a9
--- /dev/null
+++ b/ngs-sdk/win/libdispatch.files
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\AlignmentItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\AlignmentItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\defs.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ErrBlock.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ErrBlock.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ErrorMsg.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\FragmentItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\FragmentItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\PackageItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\PileupEventItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\PileupEventItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\PileupItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\PileupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadCollectionItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadCollectionItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadGroupItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadGroupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReadItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\Refcount.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\Refcount.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReferenceItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReferenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReferenceSequenceItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\ReferenceSequenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\StatisticsItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\StatisticsItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\StringItf.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\StringItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\VTable.h" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\ngs\itf\VTable.hpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\AlignmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ErrBlock.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ErrorMsg.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\FragmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PackageItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PileupEventItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PileupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadCollectionItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadGroupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\Refcount.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReferenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReferenceSequenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\StatisticsItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\StringItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\VTable.cpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libdispatch.vcxproj b/ngs-sdk/win/libdispatch.vcxproj
deleted file mode 100644
index 00965da..0000000
--- a/ngs-sdk/win/libdispatch.vcxproj
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  
-    <PropertyGroup Label="Globals">
-        <ProjectGuid>{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}</ProjectGuid>
-        <ProjectName>libngs-disp</ProjectName>
-    </PropertyGroup>
-    
-    <Import Project="lib-project.props" />
-  
-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-    <ImportGroup Label="ExtensionTargets" />
-  
-    <ItemGroup>
-        <ClInclude Include="..\ngs\itf\AlignmentItf.h" />
-        <ClInclude Include="..\ngs\itf\AlignmentItf.hpp" />
-        <ClInclude Include="..\ngs\itf\defs.h" />
-        <ClInclude Include="..\ngs\itf\ErrBlock.h" />
-        <ClInclude Include="..\ngs\itf\ErrBlock.hpp" />
-        <ClInclude Include="..\ngs\itf\ErrorMsg.hpp" />
-        <ClInclude Include="..\ngs\itf\FragmentItf.h" />
-        <ClInclude Include="..\ngs\itf\FragmentItf.hpp" />
-        <ClInclude Include="..\ngs\itf\PackageItf.hpp" />
-        <ClInclude Include="..\ngs\itf\PileupEventItf.h" />
-        <ClInclude Include="..\ngs\itf\PileupEventItf.hpp" />
-        <ClInclude Include="..\ngs\itf\PileupItf.h" />
-        <ClInclude Include="..\ngs\itf\PileupItf.hpp" />
-        <ClInclude Include="..\ngs\itf\ReadCollectionItf.h" />
-        <ClInclude Include="..\ngs\itf\ReadCollectionItf.hpp" />
-        <ClInclude Include="..\ngs\itf\ReadGroupItf.h" />
-        <ClInclude Include="..\ngs\itf\ReadGroupItf.hpp" />
-        <ClInclude Include="..\ngs\itf\ReadItf.h" />
-        <ClInclude Include="..\ngs\itf\ReadItf.hpp" />
-        <ClInclude Include="..\ngs\itf\Refcount.h" />
-        <ClInclude Include="..\ngs\itf\Refcount.hpp" />
-        <ClInclude Include="..\ngs\itf\ReferenceItf.h" />
-        <ClInclude Include="..\ngs\itf\ReferenceItf.hpp" />
-        <ClInclude Include="..\ngs\itf\ReferenceSequenceItf.h" />
-        <ClInclude Include="..\ngs\itf\ReferenceSequenceItf.hpp" />
-        <ClInclude Include="..\ngs\itf\StatisticsItf.h" />
-        <ClInclude Include="..\ngs\itf\StatisticsItf.hpp" />
-        <ClInclude Include="..\ngs\itf\StringItf.h" />
-        <ClInclude Include="..\ngs\itf\StringItf.hpp" />
-        <ClInclude Include="..\ngs\itf\VTable.h" />
-        <ClInclude Include="..\ngs\itf\VTable.hpp" />
-    </ItemGroup>
-    <ItemGroup>
-        <ClCompile Include="..\dispatch\AlignmentItf.cpp" />
-        <ClCompile Include="..\dispatch\ErrBlock.cpp" />
-        <ClCompile Include="..\dispatch\ErrorMsg.cpp" />
-        <ClCompile Include="..\dispatch\FragmentItf.cpp" />
-        <ClCompile Include="..\dispatch\PackageItf.cpp" />
-        <ClCompile Include="..\dispatch\PileupEventItf.cpp" />
-        <ClCompile Include="..\dispatch\PileupItf.cpp" />
-        <ClCompile Include="..\dispatch\ReadCollectionItf.cpp" />
-        <ClCompile Include="..\dispatch\ReadGroupItf.cpp" />
-        <ClCompile Include="..\dispatch\ReadItf.cpp" />
-        <ClCompile Include="..\dispatch\Refcount.cpp" />
-        <ClCompile Include="..\dispatch\ReferenceItf.cpp" />
-        <ClCompile Include="..\dispatch\ReferenceSequenceItf.cpp" />
-        <ClCompile Include="..\dispatch\StatisticsItf.cpp" />
-        <ClCompile Include="..\dispatch\StringItf.cpp" />
-        <ClCompile Include="..\dispatch\VTable.cpp" />
-    </ItemGroup>
-  
-</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libngs-c++.files b/ngs-sdk/win/libngs-c++.files
new file mode 100644
index 0000000..7b879b9
--- /dev/null
+++ b/ngs-sdk/win/libngs-c++.files
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Alignment.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\AlignmentIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Fragment.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\FragmentIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Pileup.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupEvent.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupEventIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Read.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadCollection.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadGroup.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadGroupIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Reference.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReferenceIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReferenceSequence.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Statistics.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\StringRef.cpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libngs-c++.vcxproj b/ngs-sdk/win/libngs-c++.vcxproj
deleted file mode 100644
index 3d855cc..0000000
--- a/ngs-sdk/win/libngs-c++.vcxproj
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  
-    <PropertyGroup Label="Globals">
-        <ProjectGuid>{A8AC88D2-FADA-4458-A251-DB2E039678A4}</ProjectGuid>
-        <ProjectName>libngs-bind-c++</ProjectName>
-    </PropertyGroup>
-    
-   <Import Project="lib-project.props" />
-  
-    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-    <ImportGroup Label="ExtensionTargets" />
-
-    <ItemGroup>
-        <ClCompile Include="..\language\c++\Alignment.cpp" />
-        <ClCompile Include="..\language\c++\AlignmentIterator.cpp" />
-        <ClCompile Include="..\language\c++\Fragment.cpp" />
-        <ClCompile Include="..\language\c++\FragmentIterator.cpp" />
-        <ClCompile Include="..\language\c++\Pileup.cpp" />
-        <ClCompile Include="..\language\c++\PileupEvent.cpp" />
-        <ClCompile Include="..\language\c++\PileupEventIterator.cpp" />
-        <ClCompile Include="..\language\c++\PileupIterator.cpp" />
-        <ClCompile Include="..\language\c++\Read.cpp" />
-        <ClCompile Include="..\language\c++\ReadCollection.cpp" />
-        <ClCompile Include="..\language\c++\ReadGroup.cpp" />
-        <ClCompile Include="..\language\c++\ReadGroupIterator.cpp" />
-        <ClCompile Include="..\language\c++\ReadIterator.cpp" />
-        <ClCompile Include="..\language\c++\Reference.cpp" />
-        <ClCompile Include="..\language\c++\ReferenceIterator.cpp" />
-        <ClCompile Include="..\language\c++\ReferenceSequence.cpp" />
-        <ClCompile Include="..\language\c++\Statistics.cpp" />
-        <ClCompile Include="..\language\c++\StringRef.cpp" />
-    </ItemGroup>
-  
-</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libtest_engine.files b/ngs-sdk/win/libtest_engine.files
new file mode 100644
index 0000000..d0f236f
--- /dev/null
+++ b/ngs-sdk/win/libtest_engine.files
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\test\test_engine\test_engine.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\AlignmentItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\PileupEventItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\PileupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\ReadCollectionItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\ReadGroupItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\ReadItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\ReferenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\ReferenceSequenceItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\StatisticsItf.hpp" />
+    <ClInclude Include="$(NGS_ROOT)ngs-sdk\test\test_engine\test_engine.hpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libtest_engine.vcxproj b/ngs-sdk/win/libtest_engine.vcxproj
deleted file mode 100644
index 50b7461..0000000
--- a/ngs-sdk/win/libtest_engine.vcxproj
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <Import Project="lib-project.props" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets" />
-  <ItemGroup>
-    <ClCompile Include="..\test\test_engine\test_engine.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\test\test_engine\AlignmentItf.hpp" />
-    <ClInclude Include="..\test\test_engine\PileupEventItf.hpp" />
-    <ClInclude Include="..\test\test_engine\PileupItf.hpp" />
-    <ClInclude Include="..\test\test_engine\ReadCollectionItf.hpp" />
-    <ClInclude Include="..\test\test_engine\ReadGroupItf.hpp" />
-    <ClInclude Include="..\test\test_engine\ReadItf.hpp" />
-    <ClInclude Include="..\test\test_engine\ReferenceItf.hpp" />
-    <ClInclude Include="..\test\test_engine\ReferenceSequenceItf.hpp" />
-    <ClInclude Include="..\test\test_engine\StatisticsItf.hpp" />
-    <ClInclude Include="..\test\test_engine\test_engine.hpp" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-sdk.files b/ngs-sdk/win/ngs-sdk.files
new file mode 100644
index 0000000..5e43f60
--- /dev/null
+++ b/ngs-sdk/win/ngs-sdk.files
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\AlignmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ErrBlock.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ErrorMsg.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\FragmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PackageItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PileupEventItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\PileupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadCollectionItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadGroupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReadItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\Refcount.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReferenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\ReferenceSequenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\StatisticsItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\StringItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\dispatch\VTable.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Alignment.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\AlignmentIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Fragment.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\FragmentIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Pileup.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupEvent.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupEventIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\PileupIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Read.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadCollection.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadGroup.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadGroupIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReadIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Reference.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReferenceIterator.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\ReferenceSequence.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\Statistics.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\c++\StringRef.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_AlignmentIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_AlignmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ErrorMsg.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_FragmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_Package.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_PileupEventIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_PileupEventItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_PileupIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_PileupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReadCollectionItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReadGroupIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReadGroupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReadIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReadItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_Refcount.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReferenceIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReferenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_ReferenceSequenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_StatisticsItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\java\jni_String.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_AlignmentIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_AlignmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_FragmentIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_FragmentItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_PackageItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_PileupEventIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_PileupEventItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_PileupIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_PileupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReadCollectionItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReadGroupIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReadGroupItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReadIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReadItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_Refcount.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReferenceIteratorItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReferenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_ReferenceSequenceItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_StatisticsItf.cpp" />
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\language\python\py_StringItf.cpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-sdk.vcxproj b/ngs-sdk/win/ngs-sdk.vcxproj
deleted file mode 100644
index 1f640f5..0000000
--- a/ngs-sdk/win/ngs-sdk.vcxproj
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <Import Project="ngs-common.props" />
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{A6A46CB4-760E-4F16-9499-BC712E99FB5D}</ProjectGuid>
-    <ProjectName>libngs-sdk</ProjectName>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <TargetExt>.dll</TargetExt>
-    <OutDir>$(NGS_TARGET)\bin\</OutDir>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ItemDefinitionGroup>
-    <ClCompile>
-      <PreprocessorDefinitions>_LIBRARY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>..\language\java;..\language\python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessToFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</PreprocessToFile>
-    </ClCompile>
-    <Link>
-      <NoEntryPoint>false</NoEntryPoint>
-    </Link>
-    <ProjectReference>
-      <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
-    </ProjectReference>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets" />
-  <ItemGroup>
-    <ClCompile Include="..\dispatch\AlignmentItf.cpp" />
-    <ClCompile Include="..\dispatch\ErrBlock.cpp" />
-    <ClCompile Include="..\dispatch\ErrorMsg.cpp" />
-    <ClCompile Include="..\dispatch\FragmentItf.cpp" />
-    <ClCompile Include="..\dispatch\PackageItf.cpp" />
-    <ClCompile Include="..\dispatch\PileupEventItf.cpp" />
-    <ClCompile Include="..\dispatch\PileupItf.cpp" />
-    <ClCompile Include="..\dispatch\ReadCollectionItf.cpp" />
-    <ClCompile Include="..\dispatch\ReadGroupItf.cpp" />
-    <ClCompile Include="..\dispatch\ReadItf.cpp" />
-    <ClCompile Include="..\dispatch\Refcount.cpp" />
-    <ClCompile Include="..\dispatch\ReferenceItf.cpp" />
-    <ClCompile Include="..\dispatch\ReferenceSequenceItf.cpp" />
-    <ClCompile Include="..\dispatch\StatisticsItf.cpp" />
-    <ClCompile Include="..\dispatch\StringItf.cpp" />
-    <ClCompile Include="..\dispatch\VTable.cpp" />
-    <ClCompile Include="..\language\c++\Alignment.cpp" />
-    <ClCompile Include="..\language\c++\AlignmentIterator.cpp" />
-    <ClCompile Include="..\language\c++\Fragment.cpp" />
-    <ClCompile Include="..\language\c++\FragmentIterator.cpp" />
-    <ClCompile Include="..\language\c++\Pileup.cpp" />
-    <ClCompile Include="..\language\c++\PileupEvent.cpp" />
-    <ClCompile Include="..\language\c++\PileupEventIterator.cpp" />
-    <ClCompile Include="..\language\c++\PileupIterator.cpp" />
-    <ClCompile Include="..\language\c++\Read.cpp" />
-    <ClCompile Include="..\language\c++\ReadCollection.cpp" />
-    <ClCompile Include="..\language\c++\ReadGroup.cpp" />
-    <ClCompile Include="..\language\c++\ReadGroupIterator.cpp" />
-    <ClCompile Include="..\language\c++\ReadIterator.cpp" />
-    <ClCompile Include="..\language\c++\Reference.cpp" />
-    <ClCompile Include="..\language\c++\ReferenceIterator.cpp" />
-    <ClCompile Include="..\language\c++\ReferenceSequence.cpp" />
-    <ClCompile Include="..\language\c++\Statistics.cpp" />
-    <ClCompile Include="..\language\c++\StringRef.cpp" />
-    <ClCompile Include="..\language\java\jni_AlignmentIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_AlignmentItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ErrorMsg.cpp" />
-    <ClCompile Include="..\language\java\jni_FragmentItf.cpp" />
-    <ClCompile Include="..\language\java\jni_Package.cpp" />
-    <ClCompile Include="..\language\java\jni_PileupEventIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_PileupEventItf.cpp" />
-    <ClCompile Include="..\language\java\jni_PileupIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_PileupItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReadCollectionItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReadGroupIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReadGroupItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReadIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReadItf.cpp" />
-    <ClCompile Include="..\language\java\jni_Refcount.cpp" />
-    <ClCompile Include="..\language\java\jni_ReferenceIteratorItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReferenceItf.cpp" />
-    <ClCompile Include="..\language\java\jni_ReferenceSequenceItf.cpp" />
-    <ClCompile Include="..\language\java\jni_StatisticsItf.cpp" />
-    <ClCompile Include="..\language\java\jni_String.cpp" />
-    <ClCompile Include="..\language\python\py_AlignmentIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_AlignmentItf.cpp" />
-    <ClCompile Include="..\language\python\py_ErrorMsg.cpp" />
-    <ClCompile Include="..\language\python\py_FragmentIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_FragmentItf.cpp" />
-    <ClCompile Include="..\language\python\py_PackageItf.cpp" />
-    <ClCompile Include="..\language\python\py_PileupEventIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_PileupEventItf.cpp" />
-    <ClCompile Include="..\language\python\py_PileupIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_PileupItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReadCollectionItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReadGroupIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReadGroupItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReadIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReadItf.cpp" />
-    <ClCompile Include="..\language\python\py_Refcount.cpp" />
-    <ClCompile Include="..\language\python\py_ReferenceIteratorItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReferenceItf.cpp" />
-    <ClCompile Include="..\language\python\py_ReferenceSequenceItf.cpp" />
-    <ClCompile Include="..\language\python\py_StatisticsItf.cpp" />
-    <ClCompile Include="..\language\python\py_StringItf.cpp" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-test.files b/ngs-sdk/win/ngs-test.files
new file mode 100644
index 0000000..d8d43c5
--- /dev/null
+++ b/ngs-sdk/win/ngs-test.files
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(NGS_ROOT)ngs-sdk\test\ngs-test\main.cpp" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/vs2010/.gitignore b/ngs-sdk/win/vs2010/.gitignore
new file mode 100644
index 0000000..98bbf52
--- /dev/null
+++ b/ngs-sdk/win/vs2010/.gitignore
@@ -0,0 +1,4 @@
+*.user
+*.sdf
+*.suo
+*.opensdf
\ No newline at end of file
diff --git a/ngs-sdk/win/vs2010/ipch/libadapter-2137bad9/libngs-adapt-c++-4ff9a6f5.ipch b/ngs-sdk/win/vs2010/ipch/libadapter-2137bad9/libngs-adapt-c++-4ff9a6f5.ipch
new file mode 100644
index 0000000..f2237f9
Binary files /dev/null and b/ngs-sdk/win/vs2010/ipch/libadapter-2137bad9/libngs-adapt-c++-4ff9a6f5.ipch differ
diff --git a/ngs-sdk/win/lib-project.props b/ngs-sdk/win/vs2010/lib-project.props
similarity index 57%
copy from ngs-sdk/win/lib-project.props
copy to ngs-sdk/win/vs2010/lib-project.props
index d5834bf..a117aa2 100644
--- a/ngs-sdk/win/lib-project.props
+++ b/ngs-sdk/win/vs2010/lib-project.props
@@ -9,5 +9,12 @@
     </PropertyGroup>
     
     <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+    <ImportGroup Label="ExtensionTargets" />
+    <ItemDefinitionGroup>
+        <ClCompile>
+            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+        </ClCompile>
+    </ItemDefinitionGroup>
     
 </Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/vs2010/libadapter.vcxproj b/ngs-sdk/win/vs2010/libadapter.vcxproj
new file mode 100644
index 0000000..94f8ae2
--- /dev/null
+++ b/ngs-sdk/win/vs2010/libadapter.vcxproj
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B9096FEF-5B55-4308-A81F-3B52CA968BE9}</ProjectGuid>
+    <ProjectName>libngs-adapt-c++</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libadapter.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libadapter.vcxproj.filters b/ngs-sdk/win/vs2010/libadapter.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/libadapter.vcxproj.filters
copy to ngs-sdk/win/vs2010/libadapter.vcxproj.filters
diff --git a/ngs-sdk/win/vs2010/libdispatch.vcxproj b/ngs-sdk/win/vs2010/libdispatch.vcxproj
new file mode 100644
index 0000000..3045015
--- /dev/null
+++ b/ngs-sdk/win/vs2010/libdispatch.vcxproj
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}</ProjectGuid>
+    <ProjectName>libngs-disp</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libdispatch.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libdispatch.vcxproj.filters b/ngs-sdk/win/vs2010/libdispatch.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/libdispatch.vcxproj.filters
copy to ngs-sdk/win/vs2010/libdispatch.vcxproj.filters
diff --git a/ngs-sdk/win/vs2010/libngs-c++.vcxproj b/ngs-sdk/win/vs2010/libngs-c++.vcxproj
new file mode 100644
index 0000000..a932bb7
--- /dev/null
+++ b/ngs-sdk/win/vs2010/libngs-c++.vcxproj
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A8AC88D2-FADA-4458-A251-DB2E039678A4}</ProjectGuid>
+    <ProjectName>libngs-bind-c++</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libngs-c++.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libngs-c++.vcxproj.filters b/ngs-sdk/win/vs2010/libngs-c++.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/libngs-c++.vcxproj.filters
copy to ngs-sdk/win/vs2010/libngs-c++.vcxproj.filters
diff --git a/ngs-sdk/win/vs2010/libtest_engine.vcxproj b/ngs-sdk/win/vs2010/libtest_engine.vcxproj
new file mode 100644
index 0000000..81f3d67
--- /dev/null
+++ b/ngs-sdk/win/vs2010/libtest_engine.vcxproj
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libtest_engine.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libtest_engine.vcxproj.filters b/ngs-sdk/win/vs2010/libtest_engine.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/libtest_engine.vcxproj.filters
copy to ngs-sdk/win/vs2010/libtest_engine.vcxproj.filters
diff --git a/ngs-sdk/win/ngs-common.props b/ngs-sdk/win/vs2010/ngs-common.props
similarity index 84%
copy from ngs-sdk/win/ngs-common.props
copy to ngs-sdk/win/vs2010/ngs-common.props
index ddfa645..b15bfef 100644
--- a/ngs-sdk/win/ngs-common.props
+++ b/ngs-sdk/win/vs2010/ngs-common.props
@@ -1,16 +1,24 @@
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
-    <Import Condition="Exists('$(ProjectDir)..\Makefile.config.win')" Project="$(ProjectDir)..\Makefile.config.win" />
+    <PropertyGroup Label="Configuration">
+        <PlatformToolset>v100</PlatformToolset>
+    </PropertyGroup>
 
     <PropertyGroup Label="Globals">
         <Platform Condition="'$(Platform)' == ''">x64</Platform>
         <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
     
-        <NGS_ROOT Condition="'$(NGS_ROOT)' == ''">$(ProjectDir)..\..\</NGS_ROOT>
-        <NGS_OUTDIR Condition="'$(NGS_OUTDIR)' == ''">$(NGS_ROOT)..\OUTDIR\</NGS_OUTDIR>
-        <NGS_TARGET Condition="'$(NGS_TARGET)' == ''">$(NGS_OUTDIR)win\cl\$(Platform)\$(Configuration)\</NGS_TARGET>    
+        <NGS_ROOT Condition="'$(NGS_ROOT)' == ''">$(ProjectDir)..\..\..\</NGS_ROOT>
+        <NGS_OUTDIR Condition="'$(NGS_OUTDIR)' == ''">$(NGS_ROOT)..\OUTDIR\ngs-sdk\</NGS_OUTDIR>
+        <NGS_TARGET Condition="'$(NGS_TARGET)' == ''">$(NGS_OUTDIR)win\$(PlatformToolset)\$(Platform)\$(Configuration)\</NGS_TARGET>    
     </PropertyGroup>
   
+    <ItemDefinitionGroup>
+        <ClCompile>
+            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+        </ClCompile>
+    </ItemDefinitionGroup>
+  
     <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 
     <PropertyGroup Label="Configuration">
@@ -34,10 +42,9 @@
             <CompileAsManaged>false</CompileAsManaged>
             <MinimalRebuild>true</MinimalRebuild>
             <DisableLanguageExtensions>false</DisableLanguageExtensions>
-            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
             <DisableSpecificWarnings>4996;4101;4251;4290</DisableSpecificWarnings>
              <StringPooling>true</StringPooling>
-            <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)..;$(ProjectDir)..\ngs\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+            <AdditionalIncludeDirectories>$(NGS_ROOT)\ngs-sdk;$(NGS_ROOT)\ngs-sdk\ngs\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
         </ClCompile>
     </ItemDefinitionGroup>
     
diff --git a/ngs-sdk/win/ngs-sdk.sln b/ngs-sdk/win/vs2010/ngs-sdk.sln
similarity index 100%
copy from ngs-sdk/win/ngs-sdk.sln
copy to ngs-sdk/win/vs2010/ngs-sdk.sln
diff --git a/ngs-sdk/win/vs2010/ngs-sdk.vcxproj b/ngs-sdk/win/vs2010/ngs-sdk.vcxproj
new file mode 100644
index 0000000..e483ac2
--- /dev/null
+++ b/ngs-sdk/win/vs2010/ngs-sdk.vcxproj
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  <Import Project="ngs-common.props" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A6A46CB4-760E-4F16-9499-BC712E99FB5D}</ProjectGuid>
+    <ProjectName>libngs-sdk</ProjectName>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <TargetExt>.dll</TargetExt>
+    <OutDir>$(NGS_TARGET)\bin\</OutDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>_LIBRARY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(NGS_ROOT)ngs-sdk\language\java;$(NGS_ROOT)ngs-sdk\language\python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessToFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</PreprocessToFile>
+    </ClCompile>
+    <Link>
+      <NoEntryPoint>false</NoEntryPoint>
+    </Link>
+    <ProjectReference>
+      <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  
+  <ImportGroup Label="ExtensionTargets" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+    
+  <Import Project="..\ngs-sdk.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-sdk.vcxproj.filters b/ngs-sdk/win/vs2010/ngs-sdk.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/ngs-sdk.vcxproj.filters
copy to ngs-sdk/win/vs2010/ngs-sdk.vcxproj.filters
diff --git a/ngs-sdk/win/ngs-test.vcxproj b/ngs-sdk/win/vs2010/ngs-test.vcxproj
similarity index 59%
copy from ngs-sdk/win/ngs-test.vcxproj
copy to ngs-sdk/win/vs2010/ngs-test.vcxproj
index 4266c3b..2b073ca 100644
--- a/ngs-sdk/win/ngs-test.vcxproj
+++ b/ngs-sdk/win/vs2010/ngs-test.vcxproj
@@ -1,38 +1,33 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
   <Import Project="ngs-common.props" />
-  
   <PropertyGroup Label="Globals">
     <ProjectGuid>{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}</ProjectGuid>
   </PropertyGroup>
-  
   <PropertyGroup>
     <ConfigurationType>Application</ConfigurationType>
     <TargetExt>.exe</TargetExt>
     <OutDir>$(NGS_TARGET)\bin\</OutDir>
   </PropertyGroup>
-  
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  
   <ItemGroup>
     <ProjectReference Include="libadapter.vcxproj">
       <Project>{b9096fef-5b55-4308-a81f-3b52ca968be9}</Project>
@@ -47,14 +42,15 @@
       <Project>{fb574d6f-8684-45ae-a0af-b52ba67e9fde}</Project>
     </ProjectReference>
   </ItemGroup>
-  
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  
   <ImportGroup Label="ExtensionTargets" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
   
-  <ItemGroup>
-      <ClCompile Include="..\test\ngs-test\main.cpp" />
-  </ItemGroup>
+  <Import Project="..\ngs-test.files" />
   
   <Target Name="AfterBuild" Condition="'$(Autorun)'=='true'">
     <Exec Command="$(OutDir)$(TargetName)$(TargetExt)" WorkingDirectory="$(ProjectDir)\" />
diff --git a/ngs-sdk/win/ngs-test.vcxproj.filters b/ngs-sdk/win/vs2010/ngs-test.vcxproj.filters
similarity index 100%
copy from ngs-sdk/win/ngs-test.vcxproj.filters
copy to ngs-sdk/win/vs2010/ngs-test.vcxproj.filters
diff --git a/ngs-sdk/win/vs2013/.gitignore b/ngs-sdk/win/vs2013/.gitignore
new file mode 100644
index 0000000..98bbf52
--- /dev/null
+++ b/ngs-sdk/win/vs2013/.gitignore
@@ -0,0 +1,4 @@
+*.user
+*.sdf
+*.suo
+*.opensdf
\ No newline at end of file
diff --git a/ngs-sdk/win/lib-project.props b/ngs-sdk/win/vs2013/lib-project.props
similarity index 57%
rename from ngs-sdk/win/lib-project.props
rename to ngs-sdk/win/vs2013/lib-project.props
index d5834bf..a117aa2 100644
--- a/ngs-sdk/win/lib-project.props
+++ b/ngs-sdk/win/vs2013/lib-project.props
@@ -9,5 +9,12 @@
     </PropertyGroup>
     
     <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+    <ImportGroup Label="ExtensionTargets" />
+    <ItemDefinitionGroup>
+        <ClCompile>
+            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+        </ClCompile>
+    </ItemDefinitionGroup>
     
 </Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/vs2013/libadapter.vcxproj b/ngs-sdk/win/vs2013/libadapter.vcxproj
new file mode 100644
index 0000000..a638948
--- /dev/null
+++ b/ngs-sdk/win/vs2013/libadapter.vcxproj
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B9096FEF-5B55-4308-A81F-3B52CA968BE9}</ProjectGuid>
+    <ProjectName>libngs-adapt-c++</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libadapter.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libadapter.vcxproj.filters b/ngs-sdk/win/vs2013/libadapter.vcxproj.filters
similarity index 97%
rename from ngs-sdk/win/libadapter.vcxproj.filters
rename to ngs-sdk/win/vs2013/libadapter.vcxproj.filters
index 4045d51..4d9e3e0 100644
--- a/ngs-sdk/win/libadapter.vcxproj.filters
+++ b/ngs-sdk/win/vs2013/libadapter.vcxproj.filters
@@ -1,101 +1,101 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\ngs\adapter\AlignmentItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ErrorMsg.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\FragmentItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\PileupEventItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\PileupItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ReadCollectionItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ReadGroupItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ReadItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\Refcount.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ReferenceItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\ReferenceSequenceItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\StatisticsItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\StringItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\ngs\adapter\defs.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\adapter\AlignmentItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ErrorMsg.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\FragmentItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\PileupEventItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\PileupItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ReadCollectionItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ReadGroupItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ReadItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\Refcount.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ReferenceItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ReferenceSequenceItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\StatisticsItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\StringItf.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\adapter\ErrBlock.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\ngs\adapter\AlignmentItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ErrorMsg.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\FragmentItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\PileupEventItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\PileupItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ReadCollectionItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ReadGroupItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ReadItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\Refcount.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ReferenceItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\ReferenceSequenceItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\StatisticsItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\StringItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\ngs\adapter\defs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\adapter\AlignmentItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ErrorMsg.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\FragmentItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\PileupEventItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\PileupItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ReadCollectionItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ReadGroupItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ReadItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\Refcount.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ReferenceItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ReferenceSequenceItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\StatisticsItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\StringItf.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\adapter\ErrBlock.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/vs2013/libdispatch.vcxproj b/ngs-sdk/win/vs2013/libdispatch.vcxproj
new file mode 100644
index 0000000..0095838
--- /dev/null
+++ b/ngs-sdk/win/vs2013/libdispatch.vcxproj
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}</ProjectGuid>
+    <ProjectName>libngs-disp</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libdispatch.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libdispatch.vcxproj.filters b/ngs-sdk/win/vs2013/libdispatch.vcxproj.filters
similarity index 100%
rename from ngs-sdk/win/libdispatch.vcxproj.filters
rename to ngs-sdk/win/vs2013/libdispatch.vcxproj.filters
diff --git a/ngs-sdk/win/vs2013/libngs-c++.vcxproj b/ngs-sdk/win/vs2013/libngs-c++.vcxproj
new file mode 100644
index 0000000..49b427b
--- /dev/null
+++ b/ngs-sdk/win/vs2013/libngs-c++.vcxproj
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A8AC88D2-FADA-4458-A251-DB2E039678A4}</ProjectGuid>
+    <ProjectName>libngs-bind-c++</ProjectName>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libngs-c++.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libngs-c++.vcxproj.filters b/ngs-sdk/win/vs2013/libngs-c++.vcxproj.filters
similarity index 100%
rename from ngs-sdk/win/libngs-c++.vcxproj.filters
rename to ngs-sdk/win/vs2013/libngs-c++.vcxproj.filters
diff --git a/ngs-sdk/win/vs2013/libtest_engine.vcxproj b/ngs-sdk/win/vs2013/libtest_engine.vcxproj
new file mode 100644
index 0000000..d226360
--- /dev/null
+++ b/ngs-sdk/win/vs2013/libtest_engine.vcxproj
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="lib-project.props" />
+  <Import Project="..\libtest_engine.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/libtest_engine.vcxproj.filters b/ngs-sdk/win/vs2013/libtest_engine.vcxproj.filters
similarity index 96%
rename from ngs-sdk/win/libtest_engine.vcxproj.filters
rename to ngs-sdk/win/vs2013/libtest_engine.vcxproj.filters
index e46c04c..f90d4ec 100644
--- a/ngs-sdk/win/libtest_engine.vcxproj.filters
+++ b/ngs-sdk/win/vs2013/libtest_engine.vcxproj.filters
@@ -1,50 +1,50 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\test\test_engine\test_engine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\test\test_engine\AlignmentItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\PileupEventItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\PileupItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\ReadCollectionItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\ReadGroupItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\ReadItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\ReferenceItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\ReferenceSequenceItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\StatisticsItf.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\test\test_engine\test_engine.hpp">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\test_engine\test_engine.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\test\test_engine\AlignmentItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\PileupEventItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\PileupItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\ReadCollectionItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\ReadGroupItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\ReadItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\ReferenceItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\ReferenceSequenceItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\StatisticsItf.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\test\test_engine\test_engine.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-common.props b/ngs-sdk/win/vs2013/ngs-common.props
similarity index 68%
rename from ngs-sdk/win/ngs-common.props
rename to ngs-sdk/win/vs2013/ngs-common.props
index ddfa645..f2ee1b8 100644
--- a/ngs-sdk/win/ngs-common.props
+++ b/ngs-sdk/win/vs2013/ngs-common.props
@@ -1,16 +1,43 @@
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
-    <Import Condition="Exists('$(ProjectDir)..\Makefile.config.win')" Project="$(ProjectDir)..\Makefile.config.win" />
+    <ItemGroup Label="ProjectConfigurations">
+        <ProjectConfiguration Include="Debug|Win32">
+            <Configuration>Debug</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Debug|x64">
+            <Configuration>Debug</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|Win32">
+            <Configuration>Release</Configuration>
+            <Platform>Win32</Platform>
+        </ProjectConfiguration>
+        <ProjectConfiguration Include="Release|x64">
+            <Configuration>Release</Configuration>
+            <Platform>x64</Platform>
+        </ProjectConfiguration>
+    </ItemGroup>
+  
+    <PropertyGroup Label="Configuration">
+        <PlatformToolset>v120</PlatformToolset>
+    </PropertyGroup>
 
     <PropertyGroup Label="Globals">
         <Platform Condition="'$(Platform)' == ''">x64</Platform>
         <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
     
-        <NGS_ROOT Condition="'$(NGS_ROOT)' == ''">$(ProjectDir)..\..\</NGS_ROOT>
-        <NGS_OUTDIR Condition="'$(NGS_OUTDIR)' == ''">$(NGS_ROOT)..\OUTDIR\</NGS_OUTDIR>
-        <NGS_TARGET Condition="'$(NGS_TARGET)' == ''">$(NGS_OUTDIR)win\cl\$(Platform)\$(Configuration)\</NGS_TARGET>    
+        <NGS_ROOT Condition="'$(NGS_ROOT)' == ''">$(ProjectDir)..\..\..\</NGS_ROOT>
+        <NGS_OUTDIR Condition="'$(NGS_OUTDIR)' == ''">$(NGS_ROOT)..\OUTDIR\ngs-sdk\</NGS_OUTDIR>
+        <NGS_TARGET Condition="'$(NGS_TARGET)' == ''">$(NGS_OUTDIR)win\$(PlatformToolset)\$(Platform)\$(Configuration)\</NGS_TARGET>    
     </PropertyGroup>
   
+    <ItemDefinitionGroup>
+        <ClCompile>
+            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+        </ClCompile>
+    </ItemDefinitionGroup>
+  
     <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 
     <PropertyGroup Label="Configuration">
@@ -34,10 +61,9 @@
             <CompileAsManaged>false</CompileAsManaged>
             <MinimalRebuild>true</MinimalRebuild>
             <DisableLanguageExtensions>false</DisableLanguageExtensions>
-            <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
             <DisableSpecificWarnings>4996;4101;4251;4290</DisableSpecificWarnings>
-             <StringPooling>true</StringPooling>
-            <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)..;$(ProjectDir)..\ngs\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+            <StringPooling>true</StringPooling>
+            <AdditionalIncludeDirectories>$(NGS_ROOT)\ngs-sdk;$(NGS_ROOT)\ngs-sdk\ngs\win;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
         </ClCompile>
     </ItemDefinitionGroup>
     
@@ -66,4 +92,4 @@
         </Link>
     </ItemDefinitionGroup>
     
-</Project>
\ No newline at end of file
+</Project>
diff --git a/ngs-sdk/win/ngs-sdk.sln b/ngs-sdk/win/vs2013/ngs-sdk.sln
similarity index 98%
rename from ngs-sdk/win/ngs-sdk.sln
rename to ngs-sdk/win/vs2013/ngs-sdk.sln
index 8f12834..7b956fd 100644
--- a/ngs-sdk/win/ngs-sdk.sln
+++ b/ngs-sdk/win/vs2013/ngs-sdk.sln
@@ -1,125 +1,125 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-adapt-c++", "libadapter.vcxproj", "{B9096FEF-5B55-4308-A81F-3B52CA968BE9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-disp", "libdispatch.vcxproj", "{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-bind-c++", "libngs-c++.vcxproj", "{A8AC88D2-FADA-4458-A251-DB2E039678A4}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest_engine", "libtest_engine.vcxproj", "{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ngs-test", "ngs-test.vcxproj", "{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeaderFiles", "HeaderFiles", "{3F19C31D-C662-4909-84F1-FCB983178DEE}"
-	ProjectSection(SolutionItems) = preProject
-		..\ngs\Alignment.hpp = ..\ngs\Alignment.hpp
-		..\ngs\AlignmentIterator.hpp = ..\ngs\AlignmentIterator.hpp
-		..\ngs\defs.h = ..\ngs\defs.h
-		..\ngs\ErrorMsg.hpp = ..\ngs\ErrorMsg.hpp
-		..\ngs\Fragment.hpp = ..\ngs\Fragment.hpp
-		..\ngs\FragmentIterator.hpp = ..\ngs\FragmentIterator.hpp
-		..\ngs\Pileup.hpp = ..\ngs\Pileup.hpp
-		..\ngs\PileupEvent.hpp = ..\ngs\PileupEvent.hpp
-		..\ngs\PileupEventIterator.hpp = ..\ngs\PileupEventIterator.hpp
-		..\ngs\PileupIterator.hpp = ..\ngs\PileupIterator.hpp
-		..\ngs\Read.hpp = ..\ngs\Read.hpp
-		..\ngs\ReadCollection.hpp = ..\ngs\ReadCollection.hpp
-		..\ngs\ReadGroup.hpp = ..\ngs\ReadGroup.hpp
-		..\ngs\ReadGroupIterator.hpp = ..\ngs\ReadGroupIterator.hpp
-		..\ngs\ReadIterator.hpp = ..\ngs\ReadIterator.hpp
-		..\ngs\Reference.hpp = ..\ngs\Reference.hpp
-		..\ngs\ReferenceIterator.hpp = ..\ngs\ReferenceIterator.hpp
-		..\ngs\ReferenceSequence.hpp = ..\ngs\ReferenceSequence.hpp
-		..\ngs\Statistics.hpp = ..\ngs\Statistics.hpp
-		..\ngs\StringRef.hpp = ..\ngs\StringRef.hpp
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inl", "inl", "{D3CE4594-5886-4BD8-97A0-69449C45820E}"
-	ProjectSection(SolutionItems) = preProject
-		..\ngs\inl\Alignment.hpp = ..\ngs\inl\Alignment.hpp
-		..\ngs\inl\AlignmentIterator.hpp = ..\ngs\inl\AlignmentIterator.hpp
-		..\ngs\inl\Fragment.hpp = ..\ngs\inl\Fragment.hpp
-		..\ngs\inl\FragmentIterator.hpp = ..\ngs\inl\FragmentIterator.hpp
-		..\ngs\inl\Pileup.hpp = ..\ngs\inl\Pileup.hpp
-		..\ngs\inl\PileupEvent.hpp = ..\ngs\inl\PileupEvent.hpp
-		..\ngs\inl\PileupEventIterator.hpp = ..\ngs\inl\PileupEventIterator.hpp
-		..\ngs\inl\PileupIterator.hpp = ..\ngs\inl\PileupIterator.hpp
-		..\ngs\inl\Read.hpp = ..\ngs\inl\Read.hpp
-		..\ngs\inl\ReadCollection.hpp = ..\ngs\inl\ReadCollection.hpp
-		..\ngs\inl\ReadGroup.hpp = ..\ngs\inl\ReadGroup.hpp
-		..\ngs\inl\ReadGroupIterator.hpp = ..\ngs\inl\ReadGroupIterator.hpp
-		..\ngs\inl\ReadIterator.hpp = ..\ngs\inl\ReadIterator.hpp
-		..\ngs\inl\Reference.hpp = ..\ngs\inl\Reference.hpp
-		..\ngs\inl\ReferenceIterator.hpp = ..\ngs\inl\ReferenceIterator.hpp
-		..\ngs\inl\ReferenceSequence.hpp = ..\ngs\inl\ReferenceSequence.hpp
-		..\ngs\inl\Statistics.hpp = ..\ngs\inl\Statistics.hpp
-		..\ngs\inl\StringRef.hpp = ..\ngs\inl\StringRef.hpp
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-sdk", "ngs-sdk.vcxproj", "{A6A46CB4-760E-4F16-9499-BC712E99FB5D}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|Win32.Build.0 = Debug|Win32
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|x64.ActiveCfg = Debug|x64
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|x64.Build.0 = Debug|x64
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|Win32.ActiveCfg = Release|Win32
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|Win32.Build.0 = Release|Win32
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|x64.ActiveCfg = Release|x64
-		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|x64.Build.0 = Release|x64
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|Win32.Build.0 = Debug|Win32
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|x64.ActiveCfg = Debug|x64
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|x64.Build.0 = Debug|x64
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|Win32.ActiveCfg = Release|Win32
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|Win32.Build.0 = Release|Win32
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|x64.ActiveCfg = Release|x64
-		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|x64.Build.0 = Release|x64
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|Win32.Build.0 = Debug|Win32
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|x64.ActiveCfg = Debug|x64
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|x64.Build.0 = Debug|x64
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|Win32.ActiveCfg = Release|Win32
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|Win32.Build.0 = Release|Win32
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|x64.ActiveCfg = Release|x64
-		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|x64.Build.0 = Release|x64
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|Win32.Build.0 = Debug|Win32
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|x64.ActiveCfg = Debug|x64
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|x64.Build.0 = Debug|x64
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|Win32.ActiveCfg = Release|Win32
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|Win32.Build.0 = Release|Win32
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|x64.ActiveCfg = Release|x64
-		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|x64.Build.0 = Release|x64
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|Win32.ActiveCfg = Debug|Win32
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|Win32.Build.0 = Debug|Win32
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|x64.ActiveCfg = Debug|x64
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|x64.Build.0 = Debug|x64
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|Win32.ActiveCfg = Release|Win32
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|Win32.Build.0 = Release|Win32
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|x64.ActiveCfg = Release|x64
-		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|x64.Build.0 = Release|x64
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|Win32.Build.0 = Debug|Win32
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|x64.ActiveCfg = Debug|x64
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|x64.Build.0 = Debug|x64
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|Win32.ActiveCfg = Release|Win32
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|Win32.Build.0 = Release|Win32
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|x64.ActiveCfg = Release|x64
-		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{D3CE4594-5886-4BD8-97A0-69449C45820E} = {3F19C31D-C662-4909-84F1-FCB983178DEE}
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-adapt-c++", "libadapter.vcxproj", "{B9096FEF-5B55-4308-A81F-3B52CA968BE9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-disp", "libdispatch.vcxproj", "{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-bind-c++", "libngs-c++.vcxproj", "{A8AC88D2-FADA-4458-A251-DB2E039678A4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtest_engine", "libtest_engine.vcxproj", "{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ngs-test", "ngs-test.vcxproj", "{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeaderFiles", "HeaderFiles", "{3F19C31D-C662-4909-84F1-FCB983178DEE}"
+	ProjectSection(SolutionItems) = preProject
+		..\ngs\Alignment.hpp = ..\ngs\Alignment.hpp
+		..\ngs\AlignmentIterator.hpp = ..\ngs\AlignmentIterator.hpp
+		..\ngs\defs.h = ..\ngs\defs.h
+		..\ngs\ErrorMsg.hpp = ..\ngs\ErrorMsg.hpp
+		..\ngs\Fragment.hpp = ..\ngs\Fragment.hpp
+		..\ngs\FragmentIterator.hpp = ..\ngs\FragmentIterator.hpp
+		..\ngs\Pileup.hpp = ..\ngs\Pileup.hpp
+		..\ngs\PileupEvent.hpp = ..\ngs\PileupEvent.hpp
+		..\ngs\PileupEventIterator.hpp = ..\ngs\PileupEventIterator.hpp
+		..\ngs\PileupIterator.hpp = ..\ngs\PileupIterator.hpp
+		..\ngs\Read.hpp = ..\ngs\Read.hpp
+		..\ngs\ReadCollection.hpp = ..\ngs\ReadCollection.hpp
+		..\ngs\ReadGroup.hpp = ..\ngs\ReadGroup.hpp
+		..\ngs\ReadGroupIterator.hpp = ..\ngs\ReadGroupIterator.hpp
+		..\ngs\ReadIterator.hpp = ..\ngs\ReadIterator.hpp
+		..\ngs\Reference.hpp = ..\ngs\Reference.hpp
+		..\ngs\ReferenceIterator.hpp = ..\ngs\ReferenceIterator.hpp
+		..\ngs\ReferenceSequence.hpp = ..\ngs\ReferenceSequence.hpp
+		..\ngs\Statistics.hpp = ..\ngs\Statistics.hpp
+		..\ngs\StringRef.hpp = ..\ngs\StringRef.hpp
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inl", "inl", "{D3CE4594-5886-4BD8-97A0-69449C45820E}"
+	ProjectSection(SolutionItems) = preProject
+		..\ngs\inl\Alignment.hpp = ..\ngs\inl\Alignment.hpp
+		..\ngs\inl\AlignmentIterator.hpp = ..\ngs\inl\AlignmentIterator.hpp
+		..\ngs\inl\Fragment.hpp = ..\ngs\inl\Fragment.hpp
+		..\ngs\inl\FragmentIterator.hpp = ..\ngs\inl\FragmentIterator.hpp
+		..\ngs\inl\Pileup.hpp = ..\ngs\inl\Pileup.hpp
+		..\ngs\inl\PileupEvent.hpp = ..\ngs\inl\PileupEvent.hpp
+		..\ngs\inl\PileupEventIterator.hpp = ..\ngs\inl\PileupEventIterator.hpp
+		..\ngs\inl\PileupIterator.hpp = ..\ngs\inl\PileupIterator.hpp
+		..\ngs\inl\Read.hpp = ..\ngs\inl\Read.hpp
+		..\ngs\inl\ReadCollection.hpp = ..\ngs\inl\ReadCollection.hpp
+		..\ngs\inl\ReadGroup.hpp = ..\ngs\inl\ReadGroup.hpp
+		..\ngs\inl\ReadGroupIterator.hpp = ..\ngs\inl\ReadGroupIterator.hpp
+		..\ngs\inl\ReadIterator.hpp = ..\ngs\inl\ReadIterator.hpp
+		..\ngs\inl\Reference.hpp = ..\ngs\inl\Reference.hpp
+		..\ngs\inl\ReferenceIterator.hpp = ..\ngs\inl\ReferenceIterator.hpp
+		..\ngs\inl\ReferenceSequence.hpp = ..\ngs\inl\ReferenceSequence.hpp
+		..\ngs\inl\Statistics.hpp = ..\ngs\inl\Statistics.hpp
+		..\ngs\inl\StringRef.hpp = ..\ngs\inl\StringRef.hpp
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libngs-sdk", "ngs-sdk.vcxproj", "{A6A46CB4-760E-4F16-9499-BC712E99FB5D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|Win32.Build.0 = Debug|Win32
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|x64.ActiveCfg = Debug|x64
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Debug|x64.Build.0 = Debug|x64
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|Win32.ActiveCfg = Release|Win32
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|Win32.Build.0 = Release|Win32
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|x64.ActiveCfg = Release|x64
+		{B9096FEF-5B55-4308-A81F-3B52CA968BE9}.Release|x64.Build.0 = Release|x64
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|Win32.Build.0 = Debug|Win32
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|x64.ActiveCfg = Debug|x64
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Debug|x64.Build.0 = Debug|x64
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|Win32.ActiveCfg = Release|Win32
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|Win32.Build.0 = Release|Win32
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|x64.ActiveCfg = Release|x64
+		{06FA485F-8AA9-4F3B-B1E3-D8CF1993637B}.Release|x64.Build.0 = Release|x64
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|Win32.Build.0 = Debug|Win32
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|x64.ActiveCfg = Debug|x64
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Debug|x64.Build.0 = Debug|x64
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|Win32.ActiveCfg = Release|Win32
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|Win32.Build.0 = Release|Win32
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|x64.ActiveCfg = Release|x64
+		{A8AC88D2-FADA-4458-A251-DB2E039678A4}.Release|x64.Build.0 = Release|x64
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|Win32.ActiveCfg = Debug|Win32
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|Win32.Build.0 = Debug|Win32
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|x64.ActiveCfg = Debug|x64
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Debug|x64.Build.0 = Debug|x64
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|Win32.ActiveCfg = Release|Win32
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|Win32.Build.0 = Release|Win32
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|x64.ActiveCfg = Release|x64
+		{FB574D6F-8684-45AE-A0AF-B52BA67E9FDE}.Release|x64.Build.0 = Release|x64
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|Win32.ActiveCfg = Debug|Win32
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|Win32.Build.0 = Debug|Win32
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|x64.ActiveCfg = Debug|x64
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Debug|x64.Build.0 = Debug|x64
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|Win32.ActiveCfg = Release|Win32
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|Win32.Build.0 = Release|Win32
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|x64.ActiveCfg = Release|x64
+		{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}.Release|x64.Build.0 = Release|x64
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|Win32.Build.0 = Debug|Win32
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|x64.ActiveCfg = Debug|x64
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Debug|x64.Build.0 = Debug|x64
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|Win32.ActiveCfg = Release|Win32
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|Win32.Build.0 = Release|Win32
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|x64.ActiveCfg = Release|x64
+		{A6A46CB4-760E-4F16-9499-BC712E99FB5D}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{D3CE4594-5886-4BD8-97A0-69449C45820E} = {3F19C31D-C662-4909-84F1-FCB983178DEE}
+	EndGlobalSection
+EndGlobal
diff --git a/ngs-sdk/win/vs2013/ngs-sdk.vcxproj b/ngs-sdk/win/vs2013/ngs-sdk.vcxproj
new file mode 100644
index 0000000..8eb4056
--- /dev/null
+++ b/ngs-sdk/win/vs2013/ngs-sdk.vcxproj
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="ngs-common.props" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A6A46CB4-760E-4F16-9499-BC712E99FB5D}</ProjectGuid>
+    <ProjectName>libngs-sdk</ProjectName>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <TargetExt>.dll</TargetExt>
+    <OutDir>$(NGS_TARGET)\bin\</OutDir>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>_LIBRARY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(NGS_ROOT)ngs-sdk\language\java;$(NGS_ROOT)ngs-sdk\language\python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessToFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</PreprocessToFile>
+    </ClCompile>
+    <Link>
+      <NoEntryPoint>false</NoEntryPoint>
+    </Link>
+    <ProjectReference>
+      <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  
+  <ImportGroup Label="ExtensionTargets" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
+    
+  <Import Project="..\ngs-sdk.files" />
+</Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-sdk.vcxproj.filters b/ngs-sdk/win/vs2013/ngs-sdk.vcxproj.filters
similarity index 97%
rename from ngs-sdk/win/ngs-sdk.vcxproj.filters
rename to ngs-sdk/win/vs2013/ngs-sdk.vcxproj.filters
index 1aaa8bb..3a00893 100644
--- a/ngs-sdk/win/ngs-sdk.vcxproj.filters
+++ b/ngs-sdk/win/vs2013/ngs-sdk.vcxproj.filters
@@ -1,244 +1,244 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="ngs-disp-sources">
-      <UniqueIdentifier>{a7faf64f-c98f-4335-914f-4b5a5b55c299}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="ngs-bind-c++ sources">
-      <UniqueIdentifier>{514f37fa-57ab-43fb-b59c-fa261430dfde}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="ngs-bind-java sources">
-      <UniqueIdentifier>{577b60af-a77c-4f5e-b720-42439623c791}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="ngs-bind-python sources">
-      <UniqueIdentifier>{577b60af-a77c-4f5e-b720-42439623c792}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\language\c++\Alignment.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\AlignmentIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\Fragment.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\FragmentIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\Pileup.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\PileupEvent.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\PileupEventIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\PileupIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\Read.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReadCollection.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReadGroup.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReadGroupIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReadIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\Reference.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReferenceIterator.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\ReferenceSequence.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\Statistics.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\c++\StringRef.cpp">
-      <Filter>ngs-bind-c++ sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\AlignmentItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\VTable.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ErrBlock.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ErrorMsg.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\FragmentItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\PackageItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\PileupEventItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\PileupItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ReadCollectionItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ReadGroupItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ReadItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\Refcount.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ReferenceItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\ReferenceSequenceItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\StatisticsItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\dispatch\StringItf.cpp">
-      <Filter>ngs-disp-sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_AlignmentIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_String.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_AlignmentItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ErrorMsg.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_FragmentItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_Package.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_PileupEventIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_PileupEventItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_PileupIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_PileupItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReadCollectionItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReadGroupIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReadGroupItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReadIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReadItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_Refcount.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReferenceIteratorItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReferenceItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_ReferenceSequenceItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\java\jni_StatisticsItf.cpp">
-      <Filter>ngs-bind-java sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_AlignmentIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_AlignmentItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ErrorMsg.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_FragmentIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_FragmentItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_PackageItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_PileupEventIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_PileupEventItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_PileupIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_PileupItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReadCollectionItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReadGroupIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReadGroupItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReadIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReadItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_Refcount.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReferenceIteratorItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReferenceItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_ReferenceSequenceItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_StatisticsItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\language\python\py_StringItf.cpp">
-      <Filter>ngs-bind-python sources</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="ngs-disp-sources">
+      <UniqueIdentifier>{a7faf64f-c98f-4335-914f-4b5a5b55c299}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ngs-bind-c++ sources">
+      <UniqueIdentifier>{514f37fa-57ab-43fb-b59c-fa261430dfde}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ngs-bind-java sources">
+      <UniqueIdentifier>{577b60af-a77c-4f5e-b720-42439623c791}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ngs-bind-python sources">
+      <UniqueIdentifier>{577b60af-a77c-4f5e-b720-42439623c792}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\language\c++\Alignment.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\AlignmentIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\Fragment.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\FragmentIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\Pileup.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\PileupEvent.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\PileupEventIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\PileupIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\Read.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReadCollection.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReadGroup.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReadGroupIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReadIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\Reference.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReferenceIterator.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\ReferenceSequence.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\Statistics.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\c++\StringRef.cpp">
+      <Filter>ngs-bind-c++ sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\AlignmentItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\VTable.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ErrBlock.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ErrorMsg.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\FragmentItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\PackageItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\PileupEventItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\PileupItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ReadCollectionItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ReadGroupItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ReadItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\Refcount.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ReferenceItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\ReferenceSequenceItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\StatisticsItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\dispatch\StringItf.cpp">
+      <Filter>ngs-disp-sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_AlignmentIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_String.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_AlignmentItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ErrorMsg.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_FragmentItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_Package.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_PileupEventIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_PileupEventItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_PileupIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_PileupItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReadCollectionItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReadGroupIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReadGroupItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReadIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReadItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_Refcount.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReferenceIteratorItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReferenceItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_ReferenceSequenceItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\java\jni_StatisticsItf.cpp">
+      <Filter>ngs-bind-java sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_AlignmentIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_AlignmentItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ErrorMsg.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_FragmentIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_FragmentItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_PackageItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_PileupEventIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_PileupEventItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_PileupIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_PileupItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReadCollectionItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReadGroupIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReadGroupItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReadIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReadItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_Refcount.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReferenceIteratorItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReferenceItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_ReferenceSequenceItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_StatisticsItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+    <ClCompile Include="..\language\python\py_StringItf.cpp">
+      <Filter>ngs-bind-python sources</Filter>
+    </ClCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/ngs-sdk/win/ngs-test.vcxproj b/ngs-sdk/win/vs2013/ngs-test.vcxproj
similarity index 59%
rename from ngs-sdk/win/ngs-test.vcxproj
rename to ngs-sdk/win/vs2013/ngs-test.vcxproj
index 4266c3b..df2b1f0 100644
--- a/ngs-sdk/win/ngs-test.vcxproj
+++ b/ngs-sdk/win/vs2013/ngs-test.vcxproj
@@ -1,38 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="ngs-common.props" />
-  
   <PropertyGroup Label="Globals">
     <ProjectGuid>{33E73C44-6EEB-4CAE-8DE6-2546E7DE2133}</ProjectGuid>
   </PropertyGroup>
-  
   <PropertyGroup>
     <ConfigurationType>Application</ConfigurationType>
     <TargetExt>.exe</TargetExt>
     <OutDir>$(NGS_TARGET)\bin\</OutDir>
   </PropertyGroup>
-  
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  
   <ItemGroup>
     <ProjectReference Include="libadapter.vcxproj">
       <Project>{b9096fef-5b55-4308-a81f-3b52ca968be9}</Project>
@@ -47,14 +24,15 @@
       <Project>{fb574d6f-8684-45ae-a0af-b52ba67e9fde}</Project>
     </ProjectReference>
   </ItemGroup>
-  
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  
   <ImportGroup Label="ExtensionTargets" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+  </ItemDefinitionGroup>
   
-  <ItemGroup>
-      <ClCompile Include="..\test\ngs-test\main.cpp" />
-  </ItemGroup>
+  <Import Project="..\ngs-test.files" />
   
   <Target Name="AfterBuild" Condition="'$(Autorun)'=='true'">
     <Exec Command="$(OutDir)$(TargetName)$(TargetExt)" WorkingDirectory="$(ProjectDir)\" />
diff --git a/ngs-sdk/win/ngs-test.vcxproj.filters b/ngs-sdk/win/vs2013/ngs-test.vcxproj.filters
similarity index 96%
rename from ngs-sdk/win/ngs-test.vcxproj.filters
rename to ngs-sdk/win/vs2013/ngs-test.vcxproj.filters
index f371d4c..4f0fb62 100644
--- a/ngs-sdk/win/ngs-test.vcxproj.filters
+++ b/ngs-sdk/win/vs2013/ngs-test.vcxproj.filters
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\test\ngs-test\main.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\ngs-test\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file

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



More information about the debian-med-commit mailing list