[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6209-g1dd3bef

aCaB acab at clamav.net
Thu May 20 00:09:16 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 1dd3befc2123df761d2432737fa41f76b8fc67a4
Author: aCaB <acab at clamav.net>
Date:   Thu May 20 02:07:22 2010 +0200

    merge --squash clamav-0.96.1

diff --git a/COPYING.llvm b/COPYING.llvm
index 2ee7e2b..6f44f79 100644
--- a/COPYING.llvm
+++ b/COPYING.llvm
@@ -1,5 +1,5 @@
-The files in libclamav/llvm/llvm are from the LLVM project, original license is
-in libclamav/llvm/llvm/LICENSE.TXT:
+The files in libclamav/c++/llvm are from the LLVM project, original license is
+in libclamav/c++/llvm/LICENSE.TXT:
 
 ==============================================================================
 LLVM Release License
diff --git a/ChangeLog b/ChangeLog
index 4049421..9fc89c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,291 @@
+Wed May 19 14:54:41 CEST 2010 (tk)
+----------------------------------
+ * V 0.96.1
+
+Wed May 19 12:21:02 CEST 2010 (acab)
+------------------------------------
+ * libclamav/7z/Archive/7z/7zIn.c: fix possible(?) null dereference reported
+		 		by clang (bb#1909)
+
+Wed May 19 12:19:27 CEST 2010 (acab)
+------------------------------------
+ * libclamav/pe_icons.c: properly round down when scaling (bb#2031)
+
+Wed May 19 13:15:06 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/pdf.c: bb #2016
+
+Wed May 19 00:03:19 CEST 2010 (tk)
+----------------------------------
+ * libclamav/readdb.c: properly reject .info files passed on cmdline (bb#2025)
+
+Tue May 18 23:35:43 CEST 2010 (tk)
+----------------------------------
+ * libclamav/matcher-bm.c: fix offset check (bb#2032)
+
+Tue May 18 20:20:15 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/fmap.c: fix bug introduced in clamav-0.96-51-g3e3b587.
+
+Mon May 17 19:03:51 CEST 2010 (acab)
+------------------------------------
+ * libclamav/pe.c: properly resume stringtable loop (bb#2027)
+                   Note: 0.96 is NOT affected as the min VI sig has got FL=53
+			3rd parties must avoid VI sigs with FL=51
+
+Fri May 14 17:16:19 EEST 2010 (edwin)
+-------------------------------------
+ * unit_tests: add bytecode.cvd load test
+
+Wed May 12 19:10:39 CEST 2010 (acab)
+------------------------------------
+ * docs/man: add clamav.milter.conf.5
+
+Mon May 10 14:11:51 CEST 2010 (acab)
+------------------------------------
+ * win32: simulate gai_strerror
+
+Mon May 10 03:43:43 CEST 2010 (acab)
+------------------------------------
+ * libclamav: Use mpool in win32 (well, sort of) as the mighty crt allocator
+	      chokes when loading about one milion signatures
+
+Sat May  8 00:18:13 CEST 2010 (acab)
+------------------------------------
+ * libclamav/fmap.c: make oof need stfu (bb#2000)
+
+Fri May 14 11:28:52 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/bytecode.c: handle global gep parameter correctly (bb #1955)
+
+Thu May 13 23:40:11 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/llvm: Update to LLVM 2.7 release.
+
+Thu May 13 23:35:55 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/bytecode*, unit_tests: add new unit tests for bytecode API and fix bugs.
+
+Thu May 13 12:41:24 EEST 2010 (edwin)
+------------------------------------
+ * libclamav/c++: Relax bounds checks. Was rejecting correct code.
+
+Tue May 11 21:33:49 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/filtering.c: fix handling of alternates and negated alternates (bb #2004)
+
+Tue May 11 15:31:40 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/readdb.c: read the entire .cbc files, fix loading of bytecode.cvd
+
+Wed May 12 14:21:23 CEST 2010 (tk)
+----------------------------------
+ * freshclam: fix handling of temporary files
+
+Tue May 11 22:44:06 CEST 2010 (tk)
+----------------------------------
+ * freshclam: add new option TestDatabases
+
+Mon May 10 17:00:16 CEST 2010 (tk)
+----------------------------------
+ * tools: make sure the libclamav version is high enough (bb#2013)
+
+Mon May 10 14:51:24 CEST 2010 (tk)
+----------------------------------
+ * sigtool/sigtool.c: fix error msg (bb#2002)
+
+Fri May  7 21:12:35 CEST 2010 (tk)
+----------------------------------
+ * clamdscan: respect ExcludePath in --fdpass mode (bb#1923)
+
+Fri Apr  9 17:01:07 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/llvm/test: Fix make check failure on x86-32 (bb #1942)
+
+Fri May  7 21:12:35 CEST 2010 (tk)
+----------------------------------
+ * clamdscan: respect ExcludePath in --fdpass mode (bb#1923)
+
+Fri May  7 15:45:55 CEST 2010 (tk)
+----------------------------------
+ * libclamav/readdb.c: add checks to enforce lsig compatibility with 0.95.x (bb#2008)
+
+Fri May  7 16:30:50 EEST 2010 (edwin)
+-------------------------------------
+ * clamscan/manager.c: don't closedir(NULL) (bb #2010)
+
+Fri May  7 13:06:48 EEST 2010 (edwin)
+-------------------------------------
+ * configure: darwin* IS thread safe (bb #1534)
+
+Fri May  7 10:48:48 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/configure: add check that correct libstdc++ version is used (bb #1971)
+
+Fri May  7 10:07:24 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/cache.c: support building without pthreads (bb #1897).
+
+Fri May  7 09:56:57 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/bytecode*: add match_offsets support.
+
+Wed May  5 21:28:04 CEST 2010 (tk)
+----------------------------------
+ * shared/output.c: workaround FreeBSD's file locking issue (bb#1918)
+
+Wed May  5 14:12:46 CEST 2010 (tk)
+----------------------------------
+ * freshclam/notify.c: fix warning message (bb#1972)
+		       Thanks to Gianluigi Tiesi
+
+Tue May  4 21:58:19 CEST 2010 (tk)
+----------------------------------
+ * libclamav: make lsigs working in cli_scanscript() (bb#1998)
+
+Tue May  4 19:37:58 CEST 2010 (acab)
+------------------------------------
+ * libclamav/fmap.c: nicely handle EINTR
+
+Tue May  4 18:47:31 CEST 2010 (acab)
+------------------------------------
+ * libclamav: no ERROR on void mapping (bb#1968)
+
+Tue May  4 16:47:57 CEST 2010 (tk)
+----------------------------------
+ * libclamav/matcher-ac.c: fix counting of subsig matches (bb#2001)
+
+Sun May  2 19:13:29 CEST 2010 (acab)
+------------------------------------
+ * clamav-milter: add VirusAction (bb#1867)
+
+Sat May  1 02:05:17 CEST 2010 (acab)
+------------------------------------
+ * m4: On solaris 8 bzlib.h uses FILE without including stdio.h (bb#1985)
+
+Fri Apr 30 12:45:47 CEST 2010 (tk)
+----------------------------------
+ * clamconf: warn about dbdir mismatch in clamd and freshclam (bb#1978)
+
+Thu Apr 29 09:49:10 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/configure: Mac OS X doesn't have -pthread (bb #1995)
+
+Thu Apr 29 09:45:29 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/llvm/include/llvm/ADT/SmallVector.h: Fix crash with -ftree-vectorize/-O3(bb #1984).
+
+Tue Apr 27 16:34:38 CEST 2010 (tk)
+----------------------------------
+ * libclamav: fix some limit settings (bb#1973)
+
+Mon Apr 26 18:18:47 EEST 2010 (edwin)
+-------------------------------------
+ * bytecode: min/max functionality level support.
+
+Mon Apr 26 16:12:50 CEST 2010 (tk)
+----------------------------------
+ * libclamav/others.c: bump f-level
+
+Mon Apr 26 16:06:56 CEST 2010 (tk)
+----------------------------------
+ * libclamav/matcher-ac.c: fix handling of VI/MACRO special offsets (bb#1957)
+
+Fri Apr 23 21:38:19 EEST 2010 (edwin)
+-------------------------------------
+ * configure: fix Apple-style universal build (bb #1988).
+
+Thu Apr 22 22:34:52 CEST 2010 (acab)
+------------------------------------
+ * libclamav/fmap.c: downgrade warning when the kernel doesn't want a map back
+
+Thu Apr 22 18:03:30 CEST 2010 (tk)
+----------------------------------
+ * libclamav: avoid loading duplicate databases (bb#1962)
+
+Mon Apr 19 17:12:06 EEST 2010 (edwin)
+-------------------------------------
+ * clamconf: print information about platform and build.
+
+Thu Apr 15 20:04:16 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/configure: disable gcc 3.4.6 by default, you can still use it with --enable-llvm (bb #1935).
+
+Thu Apr 15 16:27:00 CEST 2010 (tk)
+----------------------------------
+ * docs/man/freshclam.conf.5.in: document LogFileMaxSize (bb#1960)
+
+Wed Apr 14 21:44:18 CEST 2010 (tk)
+----------------------------------
+ * freshclam/manager.c: add support for X-HostID to allow custom UserAgent
+			strings in --submit-stats (bb#1905)
+			Thanks to Andreas Schulze
+
+Wed Apr 14 21:14:28 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/bytecode.c: fix cli_unlink warnings (bb #1956).
+
+Tue Apr 13 16:17:35 EEST 2010 (edwin)
+-------------------------------------
+ * clambc, clamd,clamdtop,libclamav,unit_tests: fix compiler warnings (bb #1872,
+					        bb #1934, bb #1935)
+
+Tue Apr 13 16:13:05 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++: allow building with gcc 3.4.6 (bb #1934).
+
+Tue Apr 13 13:12:47 EEST 2010 (edwin)
+-------------------------------------
+ * unit_tests/check_common.sh: fix make check on AIX (bb #1917).
+
+Mon Apr 12 18:02:06 CEST 2010 (tk)
+----------------------------------
+ * freshclam/manager.c: better handle daylight saving time changes (bb#1920)
+
+Sat Apr 10 16:36:11 CEST 2010 (acab)
+------------------------------------
+ * libclamav/pe.c: more relaxed vinfo parser - try to mimic winxp's
+
+Wed Apr  7 16:27:42 CEST 2010 (tk)
+----------------------------------
+ * sigtool: handle .idb files
+
+Wed Apr  7 12:42:19 CEST 2010 (tk)
+----------------------------------
+ * libclamav/matcher.c: return proper virus name in icon detector (bb#1933)
+
+Mon Apr  5 22:41:40 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/bytecode2llvm.cpp: Fix load of multiple unsigned bytecodes (bb #1924)
+
+Sat Apr  3 21:05:35 EEST 2010 (edwin)
+-------------------------------------
+ * contrib/split-tarball.sh: update to work with 0.96
+
+Sat Apr  3 20:30:39 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/Makefile.{am,in}: Fix unit test failure with non-English locale (bb #1922)
+
+Fri Apr  2 16:22:26 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/llvm/lib/Support/Allocator.cpp: Fix SpecificBumpPtrAllocator
+    destructor iteration. Thanks to Nicolas Capens.
+
+Fri Apr  2 16:19:26 EEST 2010 (edwin)
+-------------------------------------
+ * libclamav/c++/llvm/lib/ExecutionEngine/JIT/JIT.cpp:
+ Fix the previous PowerPC workaround to not crash when not using the JIT.
+
+Fri Apr  2 13:09:54 EEST 2010 (edwin)
+------------------------------------
+ * libclamav/c++/{bytecode2llvm.cpp,llvm/lib/ExecutionEngine/JIT/JIT.cpp,
+     llvm/lib/Target/PowerPC/PPCISelLowering.cpp}: Workaround LLVM JIT PowerPC relocation bug (bb #1921).
+    Based on Gary Benson's workaround for OpenJDK Shark / IcedTea.
+
+Fri Apr  2 13:07:50 EEST 2010 (edwin)
+-------------------------------------
+ * unit_tests: Fix matchwithread.cbc
+
 Wed Mar 31 19:30:59 CEST 2010 (tk)
 ----------------------------------
  * V 0.96
diff --git a/Makefile.am b/Makefile.am
index 28195a8..32ba6be 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,7 @@
 ACLOCAL_AMFLAGS=-I m4
 
 SUBDIRS = libltdl libclamav clamscan clamd clamdscan freshclam sigtool clamconf database docs etc clamav-milter test unit_tests clamdtop clambc
-EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.file COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in clamdscan/clamdscan.map
+EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.llvm COPYING.file COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in clamdscan/clamdscan.map
 
 bin_SCRIPTS=clamav-config
 
diff --git a/Makefile.in b/Makefile.in
index 1bedf5f..08ed280 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -60,6 +60,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/clamav-config.in $(srcdir)/libclamav.pc.in \
 	$(srcdir)/platform.h.in $(top_srcdir)/configure \
 	$(top_srcdir)/docs/man/clamav-milter.8.in \
+	$(top_srcdir)/docs/man/clamav-milter.conf.5.in \
 	$(top_srcdir)/docs/man/clamconf.1.in \
 	$(top_srcdir)/docs/man/clamd.8.in \
 	$(top_srcdir)/docs/man/clamd.conf.5.in \
@@ -74,12 +75,14 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	config/ltmain.sh config/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -89,10 +92,11 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = clamav-config.h
 CONFIG_CLEAN_FILES = clamav-config libclamav.pc platform.h \
-	docs/man/clamav-milter.8 docs/man/clamconf.1 docs/man/clamd.8 \
-	docs/man/clamd.conf.5 docs/man/clamdscan.1 docs/man/clamscan.1 \
-	docs/man/freshclam.1 docs/man/freshclam.conf.5 \
-	docs/man/sigtool.1 docs/man/clamdtop.1
+	docs/man/clamav-milter.8 docs/man/clamav-milter.conf.5 \
+	docs/man/clamconf.1 docs/man/clamd.8 docs/man/clamd.conf.5 \
+	docs/man/clamdscan.1 docs/man/clamscan.1 docs/man/freshclam.1 \
+	docs/man/freshclam.conf.5 docs/man/sigtool.1 \
+	docs/man/clamdtop.1
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -185,6 +189,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
@@ -337,7 +342,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = libltdl libclamav clamscan clamd clamdscan freshclam sigtool clamconf database docs etc clamav-milter test unit_tests clamdtop clambc
-EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.file COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in clamdscan/clamdscan.map
+EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.llvm COPYING.file COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in clamdscan/clamdscan.map
 bin_SCRIPTS = clamav-config
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libclamav.pc
@@ -409,6 +414,8 @@ platform.h: $(top_builddir)/config.status $(srcdir)/platform.h.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 docs/man/clamav-milter.8: $(top_builddir)/config.status $(top_srcdir)/docs/man/clamav-milter.8.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+docs/man/clamav-milter.conf.5: $(top_builddir)/config.status $(top_srcdir)/docs/man/clamav-milter.conf.5.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 docs/man/clamconf.1: $(top_builddir)/config.status $(top_srcdir)/docs/man/clamconf.1.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 docs/man/clamd.8: $(top_builddir)/config.status $(top_srcdir)/docs/man/clamd.8.in
diff --git a/NEWS b/NEWS
index a82b1e9..4bee821 100644
--- a/NEWS
+++ b/NEWS
@@ -1,41 +1,8 @@
-0.96
-----
+0.96.1
+------
 
-This release of ClamAV introduces new malware detection mechanisms and other
-significant improvements to the scan engine. The key features include:
-
-    - The Bytecode Interpreter: the interpreter built into LibClamAV allows
-      the signature writers to create and distribute very complex detection
-      routines and remotely enhance the scanner's functionality
-
-    - Heuristic improvements: improve the PE heuristics detection engine by
-      adding support of bogus icons and fake PE header information. In a
-      nutshell, ClamAV can now detect malware that tries to disguise itself
-      as a harmless application by using the most common Windows program icons.
-
-    - Signature Improvements: logical signature improvements to allow more
-      detailed matching and referencing groups of signatures. Additionally,
-      improvements to wildcard matching on word boundaries and newlines.
-
-    - Support for new archives: 7zip, InstallShield and CPIO. LibClamAV
-      can now transparently unpack and inspect their contents.
-
-    - Support for new executable file formats: 64-bit ELF files and OS X
-      Universal Binaries with Mach-O files. Additionally, the PE module
-      can now decompress and inspect executables packed with UPX 3.0.
-
-    - Support for DazukoFS in clamd
-
-    - Performance improvements: overall performance improvements and memory
-      optimizations for a better overall resource utilization experience.
-
-    - Native Windows Support: ClamAV will now build natively under Visual
-      Studio. This will allow 3rd Party application developers on Windows
-      to easily integrate LibClamAV into their applications.
-
-The complete list of changes is available in the ChangeLog file. For upgrade
-notes and tips please see: https://wiki.clamav.net/Main/UpgradeNotes096
+This is a bugfix release, please refer to the ChangeLog for the complete
+list of changes.
 
 --
 The ClamAV team (http://www.clamav.net/team)
-
diff --git a/README b/README
index 0284407..2659fc3 100644
--- a/README
+++ b/README
@@ -2,6 +2,16 @@ Note: This README/NEWS file refers to the source tarball. Some things described
 here may not be available in binary packages.
 --
 
+
+0.96.1
+------
+
+This is a bugfix release, please refer to the ChangeLog for the complete
+list of changes.
+
+--
+The ClamAV team (http://www.clamav.net/team)
+
 0.96
 ----
 
diff --git a/aclocal.m4 b/aclocal.m4
index d5efba1..2529df9 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -995,6 +995,7 @@ AC_SUBST([am__untar])
 
 m4_include([m4/acinclude.m4])
 m4_include([m4/argz.m4])
+m4_include([m4/ax_check_uname_syscall.m4])
 m4_include([m4/fdpassing.m4])
 m4_include([m4/lib-ld.m4])
 m4_include([m4/lib-link.m4])
diff --git a/clamav-config.h.in b/clamav-config.h.in
index 9503517..b78c02f 100644
--- a/clamav-config.h.in
+++ b/clamav-config.h.in
@@ -392,6 +392,9 @@
 /* Define to 1 if you have the <termios.h> header file. */
 #undef HAVE_TERMIOS_H
 
+/* Define this if uname(2) is POSIX */
+#undef HAVE_UNAME_SYSCALL
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
@@ -401,6 +404,9 @@
 /* This value is set to 1 to indicate that the system argz facility works */
 #undef HAVE_WORKING_ARGZ
 
+/* For internal use only - DO NOT DEFINE */
+#undef HAVE__INTERNAL__SHA_COLLECT
+
 /* "Full library version number" */
 #undef LIBCLAMAV_FULLVER
 
diff --git a/clamav-milter/Makefile.in b/clamav-milter/Makefile.in
index ebf540f..9d37b93 100644
--- a/clamav-milter/Makefile.in
+++ b/clamav-milter/Makefile.in
@@ -59,12 +59,14 @@ subdir = clamav-milter
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -161,6 +163,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clamav-milter/clamfi.c b/clamav-milter/clamfi.c
index f00c331..ba2223b 100644
--- a/clamav-milter/clamfi.c
+++ b/clamav-milter/clamfi.c
@@ -26,13 +26,16 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
+#include <sys/wait.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <errno.h>
 
 #include <libmilter/mfapi.h>
 
 #include "shared/optparser.h"
 #include "shared/output.h"
+#include "libclamav/others.h"
 
 #include "connpool.h"
 #include "netcode.h"
@@ -54,6 +57,7 @@ static char *rejectfmt = NULL;
 
 int addxvirus = 0; /* 0 - don't add | 1 - replace | 2 - add */
 char xvirushdr[255];
+char *viraction = NULL;
 enum {
     LOGINF_NONE,
     LOGINF_BASIC,
@@ -62,6 +66,7 @@ enum {
 
 #define CLAMFIBUFSZ 1424
 static const char *HDR_UNAVAIL = "UNKNOWN";
+static pthread_mutex_t virusaction_lock = PTHREAD_MUTEX_INITIALIZER;
 
 struct CLAMFI {
     const char *virusname;
@@ -213,7 +218,7 @@ sfsistat clamfi_header(SMFICTX *ctx, char *headerf, char *headerv) {
 
     if(!headerf) return SMFIS_CONTINUE; /* just in case */
 
-    if(loginfected == LOGINF_FULL) {
+    if(loginfected == LOGINF_FULL || viraction) {
 	if(!cf->msg_subj && !strcasecmp(headerf, "Subject"))
 	    cf->msg_subj = strdup(headerv ? headerv : "");
 	if(!cf->msg_date && !strcasecmp(headerf, "Date"))
@@ -321,7 +326,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) {
 	ret = CleanAction(ctx);
     } else if (len>7 && !strcmp(reply + len - 7, " FOUND\n")) {
 	cf->virusname = NULL;
-	if(loginfected || addxvirus || rejectfmt) {
+	if(loginfected || addxvirus || rejectfmt || viraction) {
 	    char *vir;
 
 	    reply[len-7] = '\0';
@@ -339,21 +344,74 @@ sfsistat clamfi_eom(SMFICTX *ctx) {
 		    add_x_header(ctx, msg, cf->scanned_count, cf->status_count);
 		}
 
-		if(loginfected) {
+		if(loginfected || viraction) {
 		    const char *from = smfi_getsymval(ctx, "{mail_addr}");
 		    const char *to = smfi_getsymval(ctx, "{rcpt_addr}");
 
 		    if(!from) from = HDR_UNAVAIL;
 		    if(!to) to = HDR_UNAVAIL;
-		    if(loginfected == LOGINF_FULL) {
+		    if(loginfected == LOGINF_FULL || viraction) {
 			const char *id = smfi_getsymval(ctx, "{i}");
 			const char *msg_subj = makesanehdr(cf->msg_subj);
 			const char *msg_date = makesanehdr(cf->msg_date);
 			const char *msg_id = makesanehdr(cf->msg_id);
 
 			if(!id) id = HDR_UNAVAIL;
-			logg("~Message %s from <%s> to <%s> with subject '%s' message-id '%s' date '%s' infected by %s\n", id, from, to, msg_subj, msg_id, msg_date, vir);
-		    } else logg("~Message from <%s> to <%s> infected by %s\n", from, to, vir);
+			
+			if(loginfected == LOGINF_FULL)
+			    logg("~Message %s from <%s> to <%s> with subject '%s' message-id '%s' date '%s' infected by %s\n", id, from, to, msg_subj, msg_id, msg_date, vir);
+
+			if(viraction) {
+			    char er[256];
+			    char *e_id = strdup(id);
+			    char *e_from = strdup(from);
+			    char *e_to = strdup(to);
+			    char *e_msg_subj = strdup(msg_subj);
+			    char *e_msg_date = strdup(msg_date);
+			    char *e_msg_id = strdup(msg_id);
+			    pid_t pid;
+
+			    logg("*VirusEvent: about to execute '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s'\n", viraction, vir, e_id, e_from, e_to, e_msg_subj, e_msg_id, e_msg_date);
+
+			    pthread_mutex_lock(&virusaction_lock);
+			    pid = fork();
+			    if(!pid) {
+				char * args[9]; /* avoid element is not computable at load time warns */
+				args[0]= viraction;
+				args[1] = vir;
+				args[2] = e_id;
+				args[3] = e_from;
+				args[4] = e_to;
+				args[5] = e_msg_subj;
+				args[6] = e_msg_id;
+				args[7] = e_msg_date;
+				args[8] = NULL;
+				exit(execvp(viraction, args));
+			    } else if(pid > 0) {
+				pthread_mutex_unlock(&virusaction_lock);
+				if(waitpid(pid, &ret, 0)<0)
+				    logg("!VirusEvent: waitpid() failed: %s\n", cli_strerror(errno, er, sizeof(er)));
+				else {
+				    if(WIFEXITED(ret))
+					logg("*VirusEvent: child exited with code %d\n", WEXITSTATUS(ret));
+				    else if(WIFSIGNALED(ret))
+					logg("*VirusEvent: child killed by signal %d\n", WTERMSIG(ret));
+				    else
+					logg("*VirusEvent: child lost\n");
+				}
+			    } else {
+				logg("!VirusEvent: fork failed: %s\n", cli_strerror(errno, er, sizeof(er)));
+			    }
+			    free(e_id);
+			    free(e_from);
+			    free(e_to);
+			    free(e_msg_subj);
+			    free(e_msg_date);
+			    free(e_msg_id);
+			}
+		    }
+		    if(loginfected == LOGINF_BASIC)
+			logg("~Message from <%s> to <%s> infected by %s\n", from, to, vir);
 		}
 	    }
 	}
@@ -457,6 +515,9 @@ int init_actions(struct optstruct *opts) {
 	return 1;
     }
 
+    if((opt = optget(opts, "VirusAction"))->enabled)
+	viraction = strdup(opt->strarg);
+
     if((opt = optget(opts, "OnFail"))->enabled) {
 	switch(parse_action(opt->strarg)) {
 	case 0:
diff --git a/clambc/Makefile.in b/clambc/Makefile.in
index aa68ab6..f319777 100644
--- a/clambc/Makefile.in
+++ b/clambc/Makefile.in
@@ -40,12 +40,14 @@ subdir = clambc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -103,6 +105,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clambc/bcrun.c b/clambc/bcrun.c
index 1a21706..abce4c8 100644
--- a/clambc/bcrun.c
+++ b/clambc/bcrun.c
@@ -33,6 +33,7 @@
 #include "shared/optparser.h"
 #include "shared/misc.h"
 #include "libclamav/dconf.h"
+#include "libclamav/others.h"
 
 #include <fcntl.h>
 #include <stdlib.h>
@@ -123,7 +124,7 @@ static void tracehook_ptr(struct cli_bc_ctx *ctx, const void *ptr)
     fprintf(stderr, "[trace] %p\n", ptr);
 }
 
-static uint8_t cli_debug_flag=0;
+static uint8_t debug_flag = 0;
 static void print_src(const char *file)
 {
   char buf[4096];
@@ -143,7 +144,7 @@ static void print_src(const char *file)
       }
     }
   } while (!found && (nread == sizeof(buf)));
-  if (cli_debug_flag)
+  if (debug_flag)
       printf("[clambc] Source code:");
   do {
     for (;i+1<nread;i++) {
@@ -237,9 +238,12 @@ int main(int argc, char *argv[])
     const struct optstruct *opt;
     unsigned funcid=0, i;
     struct cli_all_bc bcs;
-    unsigned int fd = -1;
+    int fd = -1;
     unsigned tracelevel;
 
+    if(check_flevel())
+	exit(1);
+
     opts = optparse(NULL, argc, argv, 1, OPT_CLAMBC, 0, NULL);
     if (!opts) {
 	fprintf(stderr, "ERROR: Can't parse command line options\n");
@@ -273,7 +277,7 @@ int main(int argc, char *argv[])
 
     if (optget(opts,"debug")->enabled) {
 	cl_debug();
-	cli_debug_flag=1;
+	debug_flag=1;
     }
     rc = cl_init(CL_INIT_DEFAULT);
     if (rc != CL_SUCCESS) {
@@ -309,21 +313,39 @@ int main(int argc, char *argv[])
 	exit(4);
     }
     fclose(f);
-    if (cli_debug_flag)
-    printf("[clambc] Bytecode loaded\n");
+    if (bc->state == bc_skip) {
+	fprintf(stderr,"bytecode load skipped\n");
+	exit(0);
+    }
+    if (debug_flag)
+	printf("[clambc] Bytecode loaded\n");
     if (optget(opts, "info")->enabled) {
 	cli_bytecode_describe(bc);
     } else if (optget(opts, "printsrc")->enabled) {
         print_src(opts->filename[0]);
     } else {
+	cli_ctx cctx;
+	struct cl_engine *engine = cl_engine_new();
 	fmap_t *map = NULL;
+	memset(&cctx, 0, sizeof(cctx));
+	if (!engine) {
+	    fprintf(stderr,"Unable to create engine\n");
+	    optfree(opts);
+	    exit(3);
+	}
+	rc = cl_engine_compile(engine);
+	if (rc) {
+	    fprintf(stderr,"Unable to compile engine: %s\n", cl_strerror(rc));
+	    optfree(opts);
+	    exit(4);
+	}
 	rc = cli_bytecode_prepare(&bcs, BYTECODE_ENGINE_MASK);
 	if (rc != CL_SUCCESS) {
 	    fprintf(stderr,"Unable to prepare bytecode: %s\n", cl_strerror(rc));
 	    optfree(opts);
 	    exit(4);
 	}
-	if (cli_debug_flag)
+	if (debug_flag)
 	    printf("[clambc] Bytecode prepared\n");
 
 	ctx = cli_bytecode_context_alloc();
@@ -331,6 +353,13 @@ int main(int argc, char *argv[])
 	    fprintf(stderr,"Out of memory\n");
 	    exit(3);
 	}
+	ctx->ctx = &cctx;
+	cctx.engine = engine;
+	cctx.fmap = cli_calloc(sizeof(fmap_t*), engine->maxreclevel+2);
+	if (!cctx.fmap) {
+	    fprintf(stderr,"Out of memory\n");
+	    exit(3);
+	}
 	memset(&dbg_state, 0, sizeof(dbg_state));
 	dbg_state.file = "<libclamav>";
 	dbg_state.line = 0;
@@ -347,7 +376,7 @@ int main(int argc, char *argv[])
 	    funcid = atoi(opts->filename[1]);
 	}
 	cli_bytecode_context_setfuncid(ctx, bc, funcid);
-	if (cli_debug_flag)
+	if (debug_flag)
 	    printf("[clambc] Running bytecode function :%u\n", funcid);
 
 	if (opts->filename[1]) {
@@ -371,6 +400,7 @@ int main(int argc, char *argv[])
 	    map = fmap(fd, 0, 0);
 	    if (!map) {
 		fprintf(stderr, "Unable to map input file %s\n", opt->strarg);
+		exit(5);
 	    }
 	    rc = cli_bytecode_context_setfile(ctx, map);
 	    if (rc != CL_SUCCESS) {
@@ -381,20 +411,23 @@ int main(int argc, char *argv[])
 	}
 	/* for testing */
 	ctx->hooks.match_counts = deadbeefcounts;
+	ctx->hooks.match_offsets = deadbeefcounts;
 	rc = cli_bytecode_run(&bcs, bc, ctx);
 	if (rc != CL_SUCCESS) {
 	    fprintf(stderr,"Unable to run bytecode: %s\n", cl_strerror(rc));
 	} else {
 	    uint64_t v;
-	    if (cli_debug_flag)
+	    if (debug_flag)
 		printf("[clambc] Bytecode run finished\n");
 	    v = cli_bytecode_context_getresult_int(ctx);
-	    if (cli_debug_flag)
+	    if (debug_flag)
 		printf("[clambc] Bytecode returned: 0x%llx\n", (long long)v);
 	}
 	cli_bytecode_context_destroy(ctx);
 	if (map)
 	    funmap(map);
+	cl_engine_free(engine);
+	free(cctx.fmap);
     }
     cli_bytecode_destroy(bc);
     cli_bytecode_done(&bcs);
@@ -402,7 +435,7 @@ int main(int argc, char *argv[])
     optfree(opts);
     if (fd != -1)
 	close(fd);
-    if (cli_debug_flag)
+    if (debug_flag)
 	printf("[clambc] Exiting\n");
     return 0;
 }
diff --git a/clamconf/Makefile.am b/clamconf/Makefile.am
index f4d0fe8..1ef0d66 100644
--- a/clamconf/Makefile.am
+++ b/clamconf/Makefile.am
@@ -28,6 +28,9 @@ clamconf_SOURCES = \
     clamconf.c
 
 DEFS = @DEFS@ -DCL_NOTHREADS
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
-LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav\
+	      -DBUILD_CPPFLAGS="\"$(CPPFLAGS)\"" -DBUILD_CFLAGS="\"$(CFLAGS)\""\
+	      -DBUILD_CXXFLAGS="\"$(CXXFLAGS)\"" -DBUILD_LDFLAGS="\"$(LDFLAGS)\""\
+	      -DBUILD_CONFIGURE_FLAGS="\"$(BUILD_CONFIGURE_FLAGS)\""
+LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@ @LIBCLAMAV_LIBS@
 CLEANFILES=*.gcda *.gcno
diff --git a/clamconf/Makefile.in b/clamconf/Makefile.in
index 366581b..a37d058 100644
--- a/clamconf/Makefile.in
+++ b/clamconf/Makefile.in
@@ -58,12 +58,14 @@ subdir = clamconf
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -121,6 +123,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
@@ -173,7 +176,7 @@ LIBCLAMAV_VERSION = @LIBCLAMAV_VERSION@
 LIBLTDL = @LIBLTDL@
 LIBM = @LIBM@
 LIBOBJS = @LIBOBJS@
-LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@
+LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@ @LIBCLAMAV_LIBS@
 LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
@@ -280,7 +283,11 @@ clamconf_SOURCES = \
     $(top_srcdir)/shared/misc.h \
     clamconf.c
 
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav\
+	      -DBUILD_CPPFLAGS="\"$(CPPFLAGS)\"" -DBUILD_CFLAGS="\"$(CFLAGS)\""\
+	      -DBUILD_CXXFLAGS="\"$(CXXFLAGS)\"" -DBUILD_LDFLAGS="\"$(LDFLAGS)\""\
+	      -DBUILD_CONFIGURE_FLAGS="\"$(BUILD_CONFIGURE_FLAGS)\""
+
 CLEANFILES = *.gcda *.gcno
 all: all-am
 
diff --git a/clamconf/clamconf.c b/clamconf/clamconf.c
index 08264fb..fa6c0af 100644
--- a/clamconf/clamconf.c
+++ b/clamconf/clamconf.c
@@ -27,6 +27,10 @@
 #include <unistd.h>
 #endif
 #include <time.h>
+#ifdef HAVE_UNAME_SYSCALL
+#include <sys/utsname.h>
+#endif
+#include <zlib.h>
 
 #include "shared/optparser.h"
 #include "shared/misc.h"
@@ -35,6 +39,7 @@
 #include "libclamav/clamav.h"
 #include "libclamav/others.h"
 #include "libclamav/bytecode.h"
+#include "target.h"
 
 #ifndef _WIN32
 extern const struct clam_option *clam_options;
@@ -54,7 +59,8 @@ static struct _cfgfile {
 
 static const char *dbnames[] = { "main.cvd", "main.cld", "daily.cvd",
 				 "daily.cld", "safebrowsing.cvd",
-				 "safebrowsing.cld", NULL };
+				 "safebrowsing.cld", "bytecode.cvd",
+				 "bytecode.cld", NULL };
 
 static void printopts(struct optstruct *opts, int nondef)
 {
@@ -205,10 +211,85 @@ static void help(void)
     return;
 }
 
+static void print_platform(void)
+{
+#ifdef HAVE_UNAME_SYSCALL
+    struct utsname name;
+#endif
+    printf("\nPlatform information\n--------------------\n");
+#ifdef HAVE_UNAME_SYSCALL
+    uname(&name);
+    printf("uname: %s %s %s %s\n", name.sysname, name.release, name.version,
+	   name.machine);
+#endif
+    printf("OS: "TARGET_OS_TYPE", ARCH: "TARGET_ARCH_TYPE", CPU: "TARGET_CPU_TYPE"\n");
+
+#ifdef C_LINUX
+    if (!access("/usr/bin/lsb_release", X_OK)) {
+	fputs("Full OS version: ", stdout);
+	fflush(stdout);
+	if (system("/usr/bin/lsb_release -d -s") == -1) {
+	   perror("failed to determine");
+	}
+    }
+#elif defined(_WIN32)
+    {
+	/* get just some basic information, since getting the full version
+	 * is too complicated */
+	uint32_t dwVersion = GetVersion();
+	printf("Full OS version: %d.%d (%d)\n",
+	   dwVersion&0xff, (dwVersion>>8)&0xff,
+	   dwVersion<0x80000000 ? dwVersion>>16 : 0);
+    }
+#else
+    /* e.g. Solaris */
+    if (!access("/etc/release", R_OK)) {
+	char buf[1024];
+	FILE *f = fopen("/etc/release", "r");
+	fgets(buf, sizeof(buf), f);
+	printf("Full OS version: %s", buf);
+    }
+#endif
+
+#ifdef ZLIB_VERNUM
+    printf("zlib version: %s (%s), compile flags: %02lx\n",
+	   ZLIB_VERSION, zlibVersion(), zlibCompileFlags());
+#else
+    /* old zlib w/o zlibCompileFlags() */
+    printf("zlib version: %s (%s)\n",
+	   ZLIB_VERSION, zlibVersion());
+#endif
+}
+
+static void print_build(void)
+{
+    printf("\nBuild information\n-----------------\n");
+    /* Try to print information about some commonly used compilers */
+#ifdef __GNUC__
+    printf("GNU C: %s (%u.%u.%u)\n", __VERSION__, __GNUC__, __GNUC_MINOR__,
+	   __GNUC_PATCHLEVEL__);
+#endif
+#ifdef __INTEL_COMPILER
+    printf("Intel Compiler %u\n", __INTEL_COMPILER);
+#endif
+#ifdef _MSC_VER
+    printf("Microsoft Visual C++ %u\n", _MSC_VER);
+#endif
+#ifdef __SUNPRO_C
+    printf("Sun studio %u\n", __SUNPRO_C);
+#endif
+    cli_printcxxver();
+#if defined(BUILD_CPPFLAGS) && defined(BUILD_CFLAGS) && defined(BUILD_CXXFLAGS) && defined(BUILD_LDFLAGS) && defined(BUILD_CONFIGURE_FLAGS)
+    printf("CPPFLAGS: %s\nCFLAGS: %s\nCXXFLAGS: %s\nLDFLAGS: %s\nConfigure: %s\n",
+	   BUILD_CPPFLAGS, BUILD_CFLAGS, BUILD_CXXFLAGS, BUILD_LDFLAGS,
+	   BUILD_CONFIGURE_FLAGS);
+#endif
+}
+
 int main(int argc, char **argv)
 {
 	const char *dir;
-	char path[512], dbdir[512], *pt;
+	char path[512], dbdir[512], clamd_dbdir[512], *pt;
 	struct optstruct *opts, *toolopts;
 	const struct optstruct *opt;
 	unsigned int i, j;
@@ -262,6 +343,10 @@ int main(int argc, char **argv)
 	    opt = optget(toolopts, "DatabaseDirectory");
 	    strncpy(dbdir, opt->strarg, sizeof(dbdir));
 	    dbdir[sizeof(dbdir) - 1] = 0;
+	} else if(cfgfile[i].tool == OPT_CLAMD) {
+	    opt = optget(toolopts, "DatabaseDirectory");
+	    strncpy(clamd_dbdir, opt->strarg, sizeof(clamd_dbdir));
+	    clamd_dbdir[sizeof(clamd_dbdir) - 1] = 0;
 	}
 	optfree(toolopts);
     }
@@ -311,6 +396,8 @@ int main(int argc, char **argv)
 	dbdir[sizeof(dbdir) - 1] = 0;
     }
     printf("Database directory: %s\n", dbdir);
+    if(strcmp(dbdir, clamd_dbdir))
+	printf("WARNING: freshclam.conf and clamd.conf point to different database directories\n");
     flevel = cl_retflevel();
     for(i = 0; dbnames[i]; i++) {
 	snprintf(path, sizeof(path), "%s"PATHSEP"%s", dbdir, dbnames[i]);
@@ -328,5 +415,7 @@ int main(int argc, char **argv)
 	    }
 	}
     }
+    print_platform();
+    print_build();
     return 0;
 }
diff --git a/clamd/Makefile.in b/clamd/Makefile.in
index cf08f27..760da58 100644
--- a/clamd/Makefile.in
+++ b/clamd/Makefile.in
@@ -58,12 +58,14 @@ subdir = clamd
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -139,6 +141,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clamd/clamd.c b/clamd/clamd.c
index 5816459..7e327dd 100644
--- a/clamd/clamd.c
+++ b/clamd/clamd.c
@@ -119,6 +119,9 @@ int main(int argc, char **argv)
 	struct stat sb;
 #endif
 
+    if(check_flevel())
+	exit(1);
+
 #ifndef _WIN32
     memset(&sa, 0, sizeof(sa));
     sa.sa_handler = SIG_IGN;
diff --git a/clamd/clamukofs.c b/clamd/clamukofs.c
index 0cdd451..cb6202b 100644
--- a/clamd/clamukofs.c
+++ b/clamd/clamukofs.c
@@ -82,7 +82,6 @@ static void *clamuko_scanth(void *arg)
 {
 	struct thrarg *tharg = (struct thrarg *) arg;
 	sigset_t sigset;
-	short int scan;
 	unsigned int sizelimit = 0;
 	struct stat sb;
 	dazukofs_handle_t scan_hndl;
diff --git a/clamd/others.h b/clamd/others.h
index c16f611..af1c4a9 100644
--- a/clamd/others.h
+++ b/clamd/others.h
@@ -38,7 +38,7 @@ enum mode {
 };
 
 struct fd_buf {
-    unsigned char *buffer;
+    char *buffer;
     size_t bufsize;
     size_t off;
     int fd;
diff --git a/clamd/scanner.c b/clamd/scanner.c
index 461cb4b..dc5f68e 100644
--- a/clamd/scanner.c
+++ b/clamd/scanner.c
@@ -77,7 +77,6 @@ int scan_callback(struct stat *sb, char *filename, const char *msg, enum cli_ftw
     const char *virname;
     int ret;
     int type = scandata->type;
-    const struct optstruct *opt;
 
     /* detect disconnected socket, 
      * this should NOT detect half-shutdown sockets (SHUT_WR) */
diff --git a/clamd/server-th.c b/clamd/server-th.c
index 8676ed2..ab81572 100644
--- a/clamd/server-th.c
+++ b/clamd/server-th.c
@@ -79,7 +79,7 @@ static void scanner_thread(void *arg)
 	sigset_t sigset;
 #endif
 	int ret;
-	unsigned virus=0, errors = 0;
+	int virus=0, errors = 0;
 
 #ifndef	_WIN32
     /* ignore all signals */
@@ -251,7 +251,7 @@ static struct cl_engine *reload_db(struct cl_engine *engine, unsigned int dbopti
  */
 static const char *get_cmd(struct fd_buf *buf, size_t off, size_t *len, char *term, int *oldstyle)
 {
-    unsigned char *pos;
+    char *pos;
     if (!buf->off || off >= buf->off) {
 	*len = 0;
 	return NULL;
@@ -466,9 +466,9 @@ static void *acceptloop_th(void *arg)
     return NULL;
 }
 
-static const unsigned char* parse_dispatch_cmd(client_conn_t *conn, struct fd_buf *buf, size_t *ppos, int *error, const struct optstruct *opts, int readtimeout)
+static const char* parse_dispatch_cmd(client_conn_t *conn, struct fd_buf *buf, size_t *ppos, int *error, const struct optstruct *opts, int readtimeout)
 {
-    const unsigned char *cmd = NULL;
+    const char *cmd = NULL;
     int rc;
     size_t cmdlen;
     char term;
@@ -912,6 +912,11 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi
 	    options |= CL_SCAN_STRUCTURED_SSN_STRIPPED;
     }
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if(optget(opts, "DevCollectHashes")->enabled)
+	options |= CL_SCAN_INTERNAL_COLLECT_SHA;
+#endif
+
     selfchk = optget(opts, "SelfCheck")->numarg;
     if(!selfchk) {
 	logg("Self checking disabled.\n");
@@ -1164,7 +1169,7 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi
 	    while (!error && buf->fd != -1 && buf->buffer && pos < buf->off &&
 		   buf->mode != MODE_WAITANCILL) {
 		client_conn_t conn;
-		const unsigned char *cmd = NULL;
+		const char *cmd = NULL;
 		int rc;
 		/* New data available to read on socket. */
 
diff --git a/clamd/session.c b/clamd/session.c
index 8fa2f3d..5aa7ed9 100644
--- a/clamd/session.c
+++ b/clamd/session.c
@@ -326,6 +326,9 @@ int command(client_conn_t *conn, int *virus)
 	    conn->scanfd = -1;
 	    cli_unlink(conn->filename);
 	    return ret;
+	default:
+	    logg("!Invalid command distpached: %d\n", conn->cmdtype);
+	    return 1;
     }
 
     scandata.type = type;
@@ -413,6 +416,10 @@ static int dispatch_command(client_conn_t *conn, enum commands cmd, const char *
 	    bulk = 0;
 	    /* just dispatch the command */
 	    break;
+	default:
+	    logg("!Invalid command dispatch: %d\n", cmd);
+	    ret = -2;
+	    break;
     }
     if (!dup_conn->group)
 	bulk = 0;
diff --git a/clamd/thrmgr.c b/clamd/thrmgr.c
index 8c920e2..b1c7614 100644
--- a/clamd/thrmgr.c
+++ b/clamd/thrmgr.c
@@ -784,6 +784,8 @@ int thrmgr_group_finished(jobgroup_t *group, enum thrmgr_exit exitc)
 	case EXIT_ERROR:
 	    group->exit_error++;
 	    break;
+	default:
+	    break;
     }
     if (group->jobs) {
 	if (!--group->jobs) {
diff --git a/clamdscan/Makefile.in b/clamdscan/Makefile.in
index 4003d9f..b5b9f63 100644
--- a/clamdscan/Makefile.in
+++ b/clamdscan/Makefile.in
@@ -58,12 +58,14 @@ subdir = clamdscan
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -131,6 +133,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clamdscan/clamdscan.c b/clamdscan/clamdscan.c
index d8f2847..87f0e64 100644
--- a/clamdscan/clamdscan.c
+++ b/clamdscan/clamdscan.c
@@ -44,6 +44,7 @@
 void help(void);
 
 extern int printinfected;
+struct optstruct *clamdopts = NULL;
 
 static void print_server_version(const struct optstruct *opt)
 {
@@ -69,6 +70,11 @@ int main(int argc, char **argv)
 	return 2;
     }
 
+    if((clamdopts = optparse(optget(opts, "config-file")->strarg, 0, NULL, 1, OPT_CLAMD, 0, NULL)) == NULL) {
+	logg("!Can't parse clamd configuration file %s\n", optget(opts, "config-file")->strarg);
+	return 2;
+    }
+
     if(optget(opts, "verbose")->enabled) {
 	mprintf_verbose = 1;
 	logg_verbose = 1;
@@ -83,11 +89,13 @@ int main(int argc, char **argv)
     if(optget(opts, "version")->enabled) {
 	print_server_version(opts);
 	optfree(opts);
+	optfree(clamdopts);
 	exit(0);
     }
 
     if(optget(opts, "help")->enabled) {
 	optfree(opts);
+	optfree(clamdopts);
     	help();
     }
 
@@ -101,6 +109,7 @@ int main(int argc, char **argv)
 	if(logg("--------------------------------------\n")) {
 	    mprintf("!Problem with internal logger.\n");
 	    optfree(opts);
+	    optfree(clamdopts);
 	    exit(2);
 	}
     } else 
@@ -110,12 +119,14 @@ int main(int argc, char **argv)
     if(optget(opts, "reload")->enabled) {
 	ret = reload_clamd_database(opts);
 	optfree(opts);
+	optfree(clamdopts);
 	logg_close();
 	exit(ret);
     }
 
     if(actsetup(opts)) {
 	optfree(opts);
+	optfree(clamdopts);
 	logg_close();
 	exit(2);
     }
@@ -134,6 +145,7 @@ int main(int argc, char **argv)
     gettimeofday(&t1, NULL);
 
     ret = client(opts, &infected, &err);
+    optfree(clamdopts);
 
     /* TODO: Implement STATUS in clamd */
     if(!optget(opts, "no-summary")->enabled) {
diff --git a/clamdscan/client.c b/clamdscan/client.c
index cfa9512..b548af3 100644
--- a/clamdscan/client.c
+++ b/clamdscan/client.c
@@ -73,21 +73,16 @@ unsigned long int maxstream;
 static struct sockaddr_un nixsock;
 #endif
 static struct sockaddr_in tcpsock;
-
+extern struct optstruct *clamdopts;
 
 /* Inits the communication layer
  * Returns 0 if clamd is local, non zero if clamd is remote */
 static int isremote(const struct optstruct *opts) {
     int s, ret;
     const struct optstruct *opt;
-    struct optstruct *clamdopts;
     const char *clamd_conf = optget(opts, "config-file")->strarg;
     static struct sockaddr_in testsock;
 
-    if((clamdopts = optparse(clamd_conf, 0, NULL, 1, OPT_CLAMD, 0, NULL)) == NULL) {
-	logg("!Can't parse clamd configuration file %s\n", clamd_conf);
-	return 0;
-    }
 #ifndef _WIN32
     if((opt = optget(clamdopts, "LocalSocket"))->enabled) {
 	memset((void *)&nixsock, 0, sizeof(nixsock));
@@ -96,24 +91,20 @@ static int isremote(const struct optstruct *opts) {
 	nixsock.sun_path[sizeof(nixsock.sun_path)-1]='\0';
 	mainsa = (struct sockaddr *)&nixsock;
 	mainsasz = sizeof(nixsock);
-	optfree(clamdopts);
 	return 0;
     }
 #endif
-    if(!(opt = optget(clamdopts, "TCPSocket"))->enabled) {
-	optfree(clamdopts);
+    if(!(opt = optget(clamdopts, "TCPSocket"))->enabled)
 	return 0;
-    }
+
     mainsa = (struct sockaddr *)&tcpsock;
     mainsasz = sizeof(tcpsock);
 
     if (cfg_tcpsock(clamdopts, &tcpsock, INADDR_LOOPBACK) == -1) {
 	logg("!Can't lookup clamd hostname: %s.\n", strerror(errno));
-	optfree(clamdopts);
 	mainsa = NULL;
 	return 0;
     }
-    optfree(clamdopts);
     memcpy((void *)&testsock, (void *)&tcpsock, sizeof(testsock));
     testsock.sin_port = htons(INADDR_ANY);
     if(!(s = socket(testsock.sin_family, SOCK_STREAM, 0))) return 0;
@@ -226,16 +217,9 @@ int reload_clamd_database(const struct optstruct *opts)
 
 int client(const struct optstruct *opts, int *infected, int *err)
 {
-	const char *clamd_conf = optget(opts, "config-file")->strarg;
-	struct optstruct *clamdopts;
 	int remote, scantype, session = 0, errors = 0, scandash = 0, maxrec, flags = 0;
 	const char *fname;
 
-    if((clamdopts = optparse(clamd_conf, 0, NULL, 1, OPT_CLAMD, 0, NULL)) == NULL) {
-	logg("!Can't parse clamd configuration file %s\n", clamd_conf);
-	return 2;
-    }
-
     scandash = (opts->filename && opts->filename[0] && !strcmp(opts->filename[0], "-") && !optget(opts, "file-list")->enabled && !opts->filename[1]);
     remote = isremote(opts) | optget(opts, "stream")->enabled;
 #ifdef HAVE_FD_PASSING
@@ -257,7 +241,6 @@ int client(const struct optstruct *opts, int *infected, int *err)
     if (optget(clamdopts, "FollowFileSymlinks")->enabled)
 	flags |= CLI_FTW_FOLLOW_FILE_SYMLINK;
     flags |= CLI_FTW_TRIM_SLASHES;
-    optfree(clamdopts);
 
     if(!mainsa) {
 	logg("!Clamd is not configured properly.\n");
diff --git a/clamdscan/proto.c b/clamdscan/proto.c
index 20f1689..d8a819a 100644
--- a/clamdscan/proto.c
+++ b/clamdscan/proto.c
@@ -46,6 +46,7 @@
 #include "libclamav/others.h"
 #include "shared/actions.h"
 #include "shared/output.h"
+#include "shared/misc.h"
 
 #include "proto.h"
 #include "client.h"
@@ -54,6 +55,7 @@ extern struct sockaddr *mainsa;
 extern int mainsasz;
 extern unsigned long int maxstream;
 int printinfected;
+extern struct optstruct *clamdopts;
 
 static const char *scancmd[] = { "CONTSCAN", "MULTISCAN" };
 
@@ -244,6 +246,23 @@ static int send_fdpass(int sockd, const char *filename) {
 }
 #endif
 
+/* 0: scan, 1: skip */
+static int chkpath(const char *path)
+{
+	const struct optstruct *opt;
+
+   if((opt = optget(clamdopts, "ExcludePath"))->enabled) {
+	while(opt) {
+	    if(match_regex(path, opt->strarg) == 1) {
+		logg("~%s: Excluded\n", path);
+		return 1;
+	    }
+	    opt = opt->nextarg;
+	}
+    }
+    return 0;
+}
+
 /* Sends a proper scan request to clamd and parses its replies
  * This is used only in non IDSESSION mode
  * Returns the number of infected files or -1 on error */
@@ -253,6 +272,8 @@ int dsresult(int sockd, int scantype, const char *filename, int *printok, int *e
     struct RCVLN rcv;
     struct stat sb;
 
+    if(chkpath(filename))
+	return 0;
     recvlninit(&rcv, sockd);
 
     switch(scantype) {
@@ -501,6 +522,8 @@ static int parallel_callback(struct stat *sb, char *filename, const char *path,
     struct SCANID *cid;
     int res;
 
+    if(chkpath(filename))
+	return 0;
     c->files++;
     switch(reason) {
     case error_stat:
diff --git a/clamdtop/Makefile.in b/clamdtop/Makefile.in
index a431814..09d89d8 100644
--- a/clamdtop/Makefile.in
+++ b/clamdtop/Makefile.in
@@ -40,12 +40,14 @@ subdir = clamdtop
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -132,6 +134,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clamdtop/clamdtop.c b/clamdtop/clamdtop.c
index 8001d63..5ebdb2b 100644
--- a/clamdtop/clamdtop.c
+++ b/clamdtop/clamdtop.c
@@ -1133,7 +1133,6 @@ static void setup_connections(int argc, char *argv[])
 	    default_colors = 1;
 	memset(&global, 0, sizeof(global));
 	if (!opts->filename || !opts->filename[0]) {
-	    char *aargv[2];
 	    const struct optstruct *opt;
 	    const char *clamd_conf = optget(opts, "config-file")->strarg;
 
diff --git a/clamscan/Makefile.in b/clamscan/Makefile.in
index 0b647a6..15aa33d 100644
--- a/clamscan/Makefile.in
+++ b/clamscan/Makefile.in
@@ -59,12 +59,14 @@ subdir = clamscan
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -123,6 +125,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/clamscan/clamscan.c b/clamscan/clamscan.c
index dfc9a3e..f1a1d94 100644
--- a/clamscan/clamscan.c
+++ b/clamscan/clamscan.c
@@ -66,6 +66,9 @@ int main(int argc, char **argv)
 	struct optstruct *opts;
 	const struct optstruct *opt;
 
+    if(check_flevel())
+	exit(2);
+
 #if !defined(_WIN32) && !defined(C_BEOS)
     sigemptyset(&sigset);
     sigaddset(&sigset, SIGXFSZ);
diff --git a/clamscan/manager.c b/clamscan/manager.c
index 489b37f..e0e42df 100644
--- a/clamscan/manager.c
+++ b/clamscan/manager.c
@@ -232,13 +232,12 @@ void scandirs(const char *dirname, struct cl_engine *engine, const struct optstr
 		}
 	    }
 	}
+	closedir(dd);
     } else {
 	if(!printinfected)
 	    logg("~%s: Can't open directory.\n", dirname);
 	info.errors++;
     }
-
-    closedir(dd);
 }
 
 static int scanstdin(const struct cl_engine *engine, const struct optstruct *opts, int options)
@@ -524,6 +523,11 @@ int scanmanager(const struct optstruct *opts)
     if(optget(opts, "algorithmic-detection")->enabled)
 	options |= CL_SCAN_ALGORITHMIC;
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if(optget(opts, "dev-collect-hashes")->enabled)
+	options |= CL_SCAN_INTERNAL_COLLECT_SHA;
+#endif
+
     if(optget(opts, "detect-structured")->enabled) {
 	options |= CL_SCAN_STRUCTURED;
 
diff --git a/configure b/configure
index b9a1d91..83beda1 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for ClamAV 0.96.
+# Generated by GNU Autoconf 2.65 for ClamAV 0.96.1.
 #
 # Report bugs to <http://bugs.clamav.net/>.
 #
@@ -703,8 +703,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='ClamAV'
 PACKAGE_TARNAME='clamav'
-PACKAGE_VERSION='0.96'
-PACKAGE_STRING='ClamAV 0.96'
+PACKAGE_VERSION='0.96.1'
+PACKAGE_STRING='ClamAV 0.96.1'
 PACKAGE_BUGREPORT='http://bugs.clamav.net/'
 PACKAGE_URL='http://www.clamav.net/'
 
@@ -754,6 +754,8 @@ am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+BUILD_SHA1_FALSE
+BUILD_SHA1_TRUE
 subdirs
 HAVE_CURSES_FALSE
 HAVE_CURSES_TRUE
@@ -793,6 +795,7 @@ HAVE_LIBCHECK_FALSE
 HAVE_LIBCHECK_TRUE
 CHECK_LIBS
 CHECK_CPPFLAGS
+BUILD_CONFIGURE_FLAGS
 GPERF
 VERSIONSCRIPT_FALSE
 VERSIONSCRIPT_TRUE
@@ -984,6 +987,7 @@ with_libncurses_prefix
 with_libpdcurses_prefix
 enable_distcheck_werror
 enable_llvm
+enable_sha_collector_for_internal_use
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1536,7 +1540,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ClamAV 0.96 to adapt to many kinds of systems.
+\`configure' configures ClamAV 0.96.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1607,7 +1611,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ClamAV 0.96:";;
+     short | recursive ) echo "Configuration of ClamAV 0.96.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1659,6 +1663,7 @@ Optional Features:
                           enable warnings as error for distcheck [default=no]
   --enable-llvm           Enable 'llvm' JIT/verifier support [default=auto]
 
+
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
@@ -1763,7 +1768,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ClamAV configure 0.96
+ClamAV configure 0.96.1
 generated by GNU Autoconf 2.65
 
 Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2227,7 +2232,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ClamAV $as_me 0.96, which was
+It was created by ClamAV $as_me 0.96.1, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   $ $0 $@
@@ -3341,7 +3346,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='clamav'
- VERSION='0.96'
+ VERSION='0.96.1'
 
 
 # Some tools Automake needs.
@@ -3470,7 +3475,7 @@ AM_BACKSLASH='\'
 $as_echo "#define PACKAGE PACKAGE_NAME" >>confdefs.h
 
 
-VERSION="0.96"
+VERSION="0.96.1"
 
 cat >>confdefs.h <<_ACEOF
 #define VERSION "$VERSION"
@@ -3478,7 +3483,7 @@ _ACEOF
 
 
 LC_CURRENT=7
-LC_REVISION=2
+LC_REVISION=3
 LC_AGE=1
 LIBCLAMAV_VERSION="$LC_CURRENT":"$LC_REVISION":"$LC_AGE"
 
@@ -5166,13 +5171,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5169: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5174: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5172: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5177: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5175: output\"" >&5)
+  (eval echo "\"\$as_me:5180: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6367,7 +6372,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6370 "configure"' > conftest.$ac_ext
+  echo '#line 6375 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7895,11 +7900,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7898: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7903: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7902: \$? = $ac_status" >&5
+   echo "$as_me:7907: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8234,11 +8239,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8237: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8242: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8241: \$? = $ac_status" >&5
+   echo "$as_me:8246: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8339,11 +8344,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8342: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8347: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8346: \$? = $ac_status" >&5
+   echo "$as_me:8351: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8394,11 +8399,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8397: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8402: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8401: \$? = $ac_status" >&5
+   echo "$as_me:8406: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -10778,7 +10783,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10781 "configure"
+#line 10786 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10874,7 +10879,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10877 "configure"
+#line 10882 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11546,7 +11551,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11549 "configure"
+#line 11554 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12765,10 +12770,6 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
  presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
  esac
 
-if test $ac_cv_c_bigendian = no; then
-    $as_echo "#define WORDS_BIGENDIAN 0" >>confdefs.h
-
-fi
 
 LIBM=
 case $host in
@@ -13575,6 +13576,48 @@ $as_echo "#define CL_EXPERIMENTAL 1" >>confdefs.h
   VERSION_SUFFIX="$VERSION_SUFFIX-exp"
 fi
 
+build_configure_args=`echo "$ac_configure_args" | sed -e 's/\"//g'`
+BUILD_CONFIGURE_FLAGS=$build_configure_args
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uname(2) is POSIX" >&5
+$as_echo_n "checking whether uname(2) is POSIX... " >&6; }
+  if test "${ax_cv_uname_syscall+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  if test "$cross_compiling" = yes; then :
+  ax_cv_uname_syscall=no
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/utsname.h>
+int main() { struct utsname unm;
+return uname( &unm ); }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_uname_syscall=yes
+else
+  ax_cv_uname_syscall=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+ # end of TRY_RUN
+fi
+ # end of CACHE_VAL
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_uname_syscall" >&5
+$as_echo "$ax_cv_uname_syscall" >&6; }
+  if test x$ax_cv_uname_syscall = xyes
+  then
+
+$as_echo "#define HAVE_UNAME_SYSCALL 1" >>confdefs.h
+
+  fi
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bind in -lsocket" >&5
 $as_echo_n "checking for bind in -lsocket... " >&6; }
 if test "${ac_cv_lib_socket_bind+set}" = set; then :
@@ -15745,6 +15788,7 @@ else
 
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <bzlib.h>
 
 #ifdef NOBZ2PREFIX
@@ -16469,10 +16513,6 @@ if test "$enable_unsignedbytecode" = "yes"; then
 
 $as_echo "#define CL_BCUNSIGNED 1" >>confdefs.h
 
-else
-
-$as_echo "#define CL_BCUNSIGNED 1" >>confdefs.h
-
 fi
 
 # Check whether --enable-no-cache was given.
@@ -16633,12 +16673,6 @@ $as_echo "#define C_LINUX 1" >>confdefs.h
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
 	if test "$want_clamuko" = "yes"; then
 
 $as_echo "#define CLAMUKO 1" >>confdefs.h
@@ -16653,12 +16687,6 @@ $as_echo "#define C_KFREEBSD_GNU 1" >>confdefs.h
     if test "$have_pthreads" = "yes"; then
        THREAD_LIBS="-lpthread"
        TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
        if test "$want_clamuko" = "yes"; then
 
 $as_echo "#define CLAMUKO 1" >>confdefs.h
@@ -16673,12 +16701,6 @@ solaris*)
 	CLAMD_LIBS="$CLAMD_LIBS -lresolv"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lresolv"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
 
 $as_echo "#define C_SOLARIS 1" >>confdefs.h
@@ -16688,12 +16710,6 @@ freebsd[45]*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread -lc_r"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
 	if test "$want_clamuko" = "yes"; then
 
 $as_echo "#define CLAMUKO 1" >>confdefs.h
@@ -16708,12 +16724,6 @@ freebsd*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lthr"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
 	if test "$want_clamuko" = "yes"; then
 
 $as_echo "#define CLAMUKO 1" >>confdefs.h
@@ -16728,12 +16738,6 @@ dragonfly*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
 	if test "$want_clamuko" = "yes"; then
 
 $as_echo "#define CLAMUKO 1" >>confdefs.h
@@ -16750,12 +16754,6 @@ openbsd*)
 	CLAMD_LIBS="$CLAMD_LIBS -pthread"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
 
 $as_echo "#define C_BSD 1" >>confdefs.h
@@ -16765,12 +16763,6 @@ bsdi*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
 
 $as_echo "#define C_BSD 1" >>confdefs.h
@@ -16779,12 +16771,6 @@ $as_echo "#define C_BSD 1" >>confdefs.h
 netbsd*)
      if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
      fi
 
 $as_echo "#define C_BSD 1" >>confdefs.h
@@ -16825,12 +16811,6 @@ os2*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
 
 $as_echo "#define C_OS2 1" >>confdefs.h
@@ -16842,12 +16822,6 @@ hpux*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
 
 $as_echo "#define C_HPUX 1" >>confdefs.h
@@ -16858,12 +16832,6 @@ aix*)
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
 
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
-
 $as_echo "#define _THREAD_SAFE 1" >>confdefs.h
 
     fi
@@ -16876,12 +16844,6 @@ $as_echo "#define C_AIX 1" >>confdefs.h
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
 
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
-
 $as_echo "#define _POSIX_PII_SOCKET 1" >>confdefs.h
 
     fi
@@ -16890,14 +16852,6 @@ $as_echo "#define C_OSF 1" >>confdefs.h
 
     ;;
 nto-qnx*)
-     if test "$have_pthreads" = "yes"; then
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
-     fi
 
 $as_echo "#define C_QNX6 1" >>confdefs.h
 
@@ -16906,12 +16860,6 @@ irix*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
     LIBS="$LIBS -lgen"
 
@@ -16930,12 +16878,6 @@ $as_echo "#define C_INTERIX 1" >>confdefs.h
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
     ;;
 gnu*)
@@ -16945,12 +16887,6 @@ $as_echo "#define C_GNU_HURD 1" >>confdefs.h
     if test "$have_pthreads" = "yes"; then
        THREAD_LIBS="-lpthread"
        TH_SAFE="-thread-safe"
-
-$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
-
-
-$as_echo "#define _REENTRANT 1" >>confdefs.h
-
     fi
     ;;
 *)
@@ -17174,6 +17110,12 @@ done
 
 $as_echo "#define BUILD_CLAMD 1" >>confdefs.h
 
+
+$as_echo "#define CL_THREAD_SAFE 1" >>confdefs.h
+
+
+$as_echo "#define _REENTRANT 1" >>confdefs.h
+
 fi
 
 
@@ -19936,7 +19878,28 @@ subdirs="$subdirs libclamav/c++"
 
 fi
 
-ac_config_files="$ac_config_files clamscan/Makefile database/Makefile docs/Makefile clamd/Makefile clamdscan/Makefile clamav-milter/Makefile freshclam/Makefile sigtool/Makefile clamconf/Makefile etc/Makefile test/Makefile unit_tests/Makefile clamdtop/Makefile clambc/Makefile Makefile clamav-config libclamav.pc platform.h docs/man/clamav-milter.8 docs/man/clamconf.1 docs/man/clamd.8 docs/man/clamd.conf.5 docs/man/clamdscan.1 docs/man/clamscan.1 docs/man/freshclam.1 docs/man/freshclam.conf.5 docs/man/sigtool.1 docs/man/clamdtop.1"
+# Check whether --enable-sha-collector-for-internal-use was given.
+if test "${enable_sha_collector_for_internal_use+set}" = set; then :
+  enableval=$enable_sha_collector_for_internal_use; enable_sha_collector="yes"
+else
+  enable_sha_collector="no"
+fi
+
+if test "$enable_sha_collector" != "no"; then
+
+$as_echo "#define HAVE__INTERNAL__SHA_COLLECT 1" >>confdefs.h
+
+fi
+ if test "$enable_sha_collector" != "no"; then
+  BUILD_SHA1_TRUE=
+  BUILD_SHA1_FALSE='#'
+else
+  BUILD_SHA1_TRUE='#'
+  BUILD_SHA1_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files clamscan/Makefile database/Makefile docs/Makefile clamd/Makefile clamdscan/Makefile clamav-milter/Makefile freshclam/Makefile sigtool/Makefile clamconf/Makefile etc/Makefile test/Makefile unit_tests/Makefile clamdtop/Makefile clambc/Makefile Makefile clamav-config libclamav.pc platform.h docs/man/clamav-milter.8 docs/man/clamav-milter.conf.5 docs/man/clamconf.1 docs/man/clamd.8 docs/man/clamd.conf.5 docs/man/clamdscan.1 docs/man/clamscan.1 docs/man/freshclam.1 docs/man/freshclam.conf.5 docs/man/sigtool.1 docs/man/clamdtop.1"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -20113,6 +20076,10 @@ if test -z "${HAVE_CURSES_TRUE}" && test -z "${HAVE_CURSES_FALSE}"; then
   as_fn_error "conditional \"HAVE_CURSES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_SHA1_TRUE}" && test -z "${BUILD_SHA1_FALSE}"; then
+  as_fn_error "conditional \"BUILD_SHA1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_write_fail=0
@@ -20521,7 +20488,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ClamAV $as_me 0.96, which was
+This file was extended by ClamAV $as_me 0.96.1, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -20588,7 +20555,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ClamAV config.status 0.96
+ClamAV config.status 0.96.1
 configured by $0, generated by GNU Autoconf 2.65,
   with options \\"\$ac_cs_config\\"
 
@@ -20989,6 +20956,7 @@ do
     "libclamav.pc") CONFIG_FILES="$CONFIG_FILES libclamav.pc" ;;
     "platform.h") CONFIG_FILES="$CONFIG_FILES platform.h" ;;
     "docs/man/clamav-milter.8") CONFIG_FILES="$CONFIG_FILES docs/man/clamav-milter.8" ;;
+    "docs/man/clamav-milter.conf.5") CONFIG_FILES="$CONFIG_FILES docs/man/clamav-milter.conf.5" ;;
     "docs/man/clamconf.1") CONFIG_FILES="$CONFIG_FILES docs/man/clamconf.1" ;;
     "docs/man/clamd.8") CONFIG_FILES="$CONFIG_FILES docs/man/clamd.8" ;;
     "docs/man/clamd.conf.5") CONFIG_FILES="$CONFIG_FILES docs/man/clamd.conf.5" ;;
@@ -22688,6 +22656,10 @@ if test -z "${HAVE_CURSES_TRUE}" && test -z "${HAVE_CURSES_FALSE}"; then
   as_fn_error "conditional \"HAVE_CURSES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_SHA1_TRUE}" && test -z "${BUILD_SHA1_FALSE}"; then
+  as_fn_error "conditional \"BUILD_SHA1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${am__EXEEXT_TRUE}" && test -z "${am__EXEEXT_FALSE}"; then
   as_fn_error "conditional \"am__EXEEXT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -23104,7 +23076,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ClamAV $as_me 0.96, which was
+This file was extended by ClamAV $as_me 0.96.1, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23171,7 +23143,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ClamAV config.status 0.96
+ClamAV config.status 0.96.1
 configured by $0, generated by GNU Autoconf 2.65,
   with options \\"\$ac_cs_config\\"
 
@@ -23573,6 +23545,7 @@ do
     "libclamav.pc") CONFIG_FILES="$CONFIG_FILES libclamav.pc" ;;
     "platform.h") CONFIG_FILES="$CONFIG_FILES platform.h" ;;
     "docs/man/clamav-milter.8") CONFIG_FILES="$CONFIG_FILES docs/man/clamav-milter.8" ;;
+    "docs/man/clamav-milter.conf.5") CONFIG_FILES="$CONFIG_FILES docs/man/clamav-milter.conf.5" ;;
     "docs/man/clamconf.1") CONFIG_FILES="$CONFIG_FILES docs/man/clamconf.1" ;;
     "docs/man/clamd.8") CONFIG_FILES="$CONFIG_FILES docs/man/clamd.8" ;;
     "docs/man/clamd.conf.5") CONFIG_FILES="$CONFIG_FILES docs/man/clamd.conf.5" ;;
diff --git a/configure.in b/configure.in
index 0401b3d..a396155 100644
--- a/configure.in
+++ b/configure.in
@@ -20,7 +20,7 @@ dnl   MA 02110-1301, USA.
 AC_PREREQ([2.59])
 dnl For a release change [devel] to the real version [0.xy]
 dnl also change VERSION below
-AC_INIT([ClamAV], [0.96], [http://bugs.clamav.net/], [clamav], [http://www.clamav.net/])
+AC_INIT([ClamAV], [0.96.1], [http://bugs.clamav.net/], [clamav], [http://www.clamav.net/])
 
 AH_BOTTOM([#include "platform.h"])
 dnl put configure auxiliary into config
@@ -42,12 +42,11 @@ dnl the date in the version
 AC_DEFINE([PACKAGE], PACKAGE_NAME, [Name of package])
 
 dnl change this on a release
-dnl VERSION="devel-`date +%Y%m%d`"
-VERSION="0.96"
+VERSION="0.96.1"
 AC_DEFINE_UNQUOTED([VERSION],"$VERSION",[Version number of package])
 
 LC_CURRENT=7
-LC_REVISION=2
+LC_REVISION=3
 LC_AGE=1
 LIBCLAMAV_VERSION="$LC_CURRENT":"$LC_REVISION":"$LC_AGE"
 AC_SUBST([LIBCLAMAV_VERSION])
@@ -78,9 +77,6 @@ AC_C_CONST
 AC_C_INLINE
 AC_C_FPU_BIGENDIAN
 AC_C_BIGENDIAN
-if test $ac_cv_c_bigendian = no; then
-    m4_default([], [AC_DEFINE([WORDS_BIGENDIAN], 0)])
-fi
 
 LT_LIB_M
 
@@ -430,6 +426,10 @@ if test "$enable_experimental" = "yes"; then
   VERSION_SUFFIX="$VERSION_SUFFIX-exp"
 fi
 
+build_configure_args=`echo "$ac_configure_args" | sed -e 's/[\"]//g'`
+AC_SUBST([BUILD_CONFIGURE_FLAGS], [$build_configure_args])
+
+AX_CHECK_UNAME_SYSCALL
 AC_CHECK_LIB([socket], [bind], [LIBS="$LIBS -lsocket"; CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsocket"; FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lsocket"; CLAMD_LIBS="$CLAMD_LIBS -lsocket"])
 AC_SEARCH_LIBS([gethostent],[nsl], [(LIBS="$LIBS -lnsl"; CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lnsl"; FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lnsl"; CLAMD_LIBS="$CLAMD_LIBS -lnsl")])
 
@@ -830,8 +830,6 @@ enable_unsignedbytecode="$enableval", enable_unsignedbytecode="no")
 if test "$enable_unsignedbytecode" = "yes"; then
   VERSION_SUFFIX="$VERSION_SUFFIX-unsigned-bc"
   AC_DEFINE([CL_BCUNSIGNED],1,[enable loading of unsigned bytecode])
-else
-  AC_DEFINE([CL_BCUNSIGNED],1,[disable loading of unsigned bytecode])
 fi
 
 AC_ARG_ENABLE([no-cache],
@@ -927,8 +925,6 @@ linux*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE([CLAMUKO],1,[enable clamuko])
 	fi
@@ -939,8 +935,6 @@ kfreebsd*-gnu)
     if test "$have_pthreads" = "yes"; then
        THREAD_LIBS="-lpthread"
        TH_SAFE="-thread-safe"
-       AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-       AC_DEFINE([_REENTRANT],1,[thread safe])
        if test "$want_clamuko" = "yes"; then
            AC_DEFINE([CLAMUKO],1,[enable clamuko])
        fi
@@ -953,8 +947,6 @@ solaris*)
 	CLAMD_LIBS="$CLAMD_LIBS -lresolv"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lresolv"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     AC_DEFINE([C_SOLARIS],1,[os is solaris])
     ;;
@@ -962,8 +954,6 @@ freebsd[[45]]*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread -lc_r"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE([CLAMUKO],1,[enable clamuko])
 	fi
@@ -974,8 +964,6 @@ freebsd*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lthr"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE([CLAMUKO],1,[enable clamuko])
 	fi
@@ -986,8 +974,6 @@ dragonfly*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE([CLAMUKO],1,[enable clamuko])
 	fi
@@ -1000,8 +986,6 @@ openbsd*)
 	CLAMD_LIBS="$CLAMD_LIBS -pthread"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     AC_DEFINE([C_BSD],1,[os is OpenBSD])
     ;;
@@ -1009,16 +993,12 @@ bsdi*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     AC_DEFINE([C_BSD],1,[os is BSDI BSD/OS])
     ;;
 netbsd*)
      if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
      fi
     AC_DEFINE([C_BSD],1,[os is NetBSD])
     ;;
@@ -1045,8 +1025,6 @@ os2*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     AC_DEFINE([C_OS2],1,[os is OS/2])
     ;;
@@ -1060,8 +1038,6 @@ hpux*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     AC_DEFINE([C_HPUX],1,[os is hpux])
     ;;
@@ -1069,8 +1045,6 @@ aix*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	AC_DEFINE([_THREAD_SAFE],1,[thread safe])
     fi
     AC_DEFINE([C_AIX],1,[os is aix])
@@ -1079,25 +1053,17 @@ aix*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
 	AC_DEFINE([_POSIX_PII_SOCKET],1,[POSIX compatibility])
     fi
     AC_DEFINE([C_OSF],1,[os is osf/tru64])
     ;;
 nto-qnx*)
-     if test "$have_pthreads" = "yes"; then
-       AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-       AC_DEFINE([_REENTRANT],1,[thread safe])
-     fi
     AC_DEFINE([C_QNX6],1,[os is QNX 6.x.x])
     ;;
 irix*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     LIBS="$LIBS -lgen"
     AC_DEFINE([C_IRIX],1,[os is irix])
@@ -1112,8 +1078,6 @@ interix*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lpthread"
 	TH_SAFE="-thread-safe"
-	AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-	AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     ;;
 gnu*)
@@ -1121,8 +1085,6 @@ gnu*)
     if test "$have_pthreads" = "yes"; then
        THREAD_LIBS="-lpthread"
        TH_SAFE="-thread-safe"
-       AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
-       AC_DEFINE([_REENTRANT],1,[thread safe])
     fi
     ;;
 *)
@@ -1173,6 +1135,9 @@ then
     AC_CHECK_FUNCS([sched_yield pthread_yield])
     LIBS="$save_LIBS"
     AC_DEFINE([BUILD_CLAMD], 1, "build clamd")
+    dnl define these here, so we don't forget any system
+    AC_DEFINE([CL_THREAD_SAFE],1,[thread safe])
+    AC_DEFINE([_REENTRANT],1,[thread safe])
 fi
 
 dnl Check for readdir_r and number of its arguments
@@ -1611,6 +1576,12 @@ if test "$enable_llvm" != "no"; then
     AC_CONFIG_SUBDIRS_OPTIONAL([libclamav/c++])
 fi
 
+AC_ARG_ENABLE([sha-collector-for-internal-use], [], [enable_sha_collector="yes"], [enable_sha_collector="no"])
+if test "$enable_sha_collector" != "no"; then
+    AC_DEFINE([HAVE__INTERNAL__SHA_COLLECT], 1, [For internal use only - DO NOT DEFINE])
+fi
+AM_CONDITIONAL([BUILD_SHA1],[test "$enable_sha_collector" != "no"])
+
 AC_OUTPUT([
 clamscan/Makefile
 database/Makefile
@@ -1631,6 +1602,7 @@ clamav-config
 libclamav.pc
 platform.h
 docs/man/clamav-milter.8
+docs/man/clamav-milter.conf.5
 docs/man/clamconf.1
 docs/man/clamd.8
 docs/man/clamd.conf.5
diff --git a/database/Makefile.in b/database/Makefile.in
index 3525b9c..2a03459 100644
--- a/database/Makefile.in
+++ b/database/Makefile.in
@@ -57,12 +57,14 @@ subdir = database
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -89,6 +91,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 81b13a8..63e7988 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -17,4 +17,4 @@
 #  MA 02110-1301, USA.
 
 EXTRA_DIST = html $(top_srcdir)/docs/man/*.in clamdoc.pdf clamdoc.tex clamav-mirror-howto.pdf clamav-mirror-howto.tex phishsigs_howto.tex phishsigs_howto.pdf signatures.pdf signatures.tex clam.eps
-man_MANS = man/clamscan.1 man/freshclam.1 man/sigtool.1 man/clamd.8 man/clamd.conf.5 man/clamdscan.1 man/clamav-milter.8 man/freshclam.conf.5 man/clamconf.1 man/clamdtop.1
+man_MANS = man/clamscan.1 man/freshclam.1 man/sigtool.1 man/clamd.8 man/clamd.conf.5 man/clamdscan.1 man/clamav-milter.8 man/clamav-milter.conf.5 man/freshclam.conf.5 man/clamconf.1 man/clamdtop.1
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 32983fe..b8e857c 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -56,12 +56,14 @@ subdir = docs
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -116,6 +118,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
@@ -267,7 +270,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 EXTRA_DIST = html $(top_srcdir)/docs/man/*.in clamdoc.pdf clamdoc.tex clamav-mirror-howto.pdf clamav-mirror-howto.tex phishsigs_howto.tex phishsigs_howto.pdf signatures.pdf signatures.tex clam.eps
-man_MANS = man/clamscan.1 man/freshclam.1 man/sigtool.1 man/clamd.8 man/clamd.conf.5 man/clamdscan.1 man/clamav-milter.8 man/freshclam.conf.5 man/clamconf.1 man/clamdtop.1
+man_MANS = man/clamscan.1 man/freshclam.1 man/sigtool.1 man/clamd.8 man/clamd.conf.5 man/clamdscan.1 man/clamav-milter.8 man/clamav-milter.conf.5 man/freshclam.conf.5 man/clamconf.1 man/clamdtop.1
 all: all-am
 
 .SUFFIXES:
diff --git a/docs/clamdoc.pdf b/docs/clamdoc.pdf
index 3b42aaa..550cea4 100644
Binary files a/docs/clamdoc.pdf and b/docs/clamdoc.pdf differ
diff --git a/docs/clamdoc.tex b/docs/clamdoc.tex
index 0beb77d..78bbf5d 100644
--- a/docs/clamdoc.tex
+++ b/docs/clamdoc.tex
@@ -71,7 +71,7 @@
     \vspace{3cm}
     \begin{flushright}
 	\rule[-1ex]{8cm}{3pt}\\
-	\huge Clam AntiVirus 0.96\\
+	\huge Clam AntiVirus 0.96.1\\
 	\huge \emph{User Manual}\\
     \end{flushright}
 
@@ -127,7 +127,7 @@
 	\item{POSIX compliant, portable}
 	\item{Fast scanning}
 	\item{Supports on-access scanning (Linux and FreeBSD only)}
-	\item{Detects over 750.000 viruses, worms and trojans, including
+	\item{Detects over 775.000 viruses, worms and trojans, including
 	      Microsoft Office macro viruses, mobile malware, and other threats}
 	\item{Built-in bytecode interpreter allows the ClamAV signature writers
 	      to create and distribute very complex detection routines and
@@ -812,6 +812,9 @@ N * * * *	/usr/local/bin/freshclam --quiet
 	\item PDF
 	\item HTML
     \end{itemize}
+    In the case of Office, RTF and PDF files, libclamav will only extract the
+    embedded objects and will not decode the text data itself. The text
+    decoding and normalization is only performed for HTML files.
 
     \subsubsection{Data Loss Prevention}
     Libclamav includes a DLP module which can detect credit card and
diff --git a/docs/html/clamdoc.html b/docs/html/clamdoc.html
index fac48bc..b69bd12 100644
--- a/docs/html/clamdoc.html
+++ b/docs/html/clamdoc.html
@@ -56,7 +56,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BR>
 <BR>
     <DIV ALIGN="RIGHT">
-<BR>	<BIG CLASS="HUGE">Clam AntiVirus 0.96
+<BR>	<BIG CLASS="HUGE">Clam AntiVirus 0.96.1
 <BR>	<BIG CLASS="HUGE"><SPAN  CLASS="textit">User Manual</SPAN>
 <BR>    
 </BIG></BIG></DIV>
@@ -227,7 +227,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/index.html b/docs/html/index.html
index fac48bc..b69bd12 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -56,7 +56,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BR>
 <BR>
     <DIV ALIGN="RIGHT">
-<BR>	<BIG CLASS="HUGE">Clam AntiVirus 0.96
+<BR>	<BIG CLASS="HUGE">Clam AntiVirus 0.96.1
 <BR>	<BIG CLASS="HUGE"><SPAN  CLASS="textit">User Manual</SPAN>
 <BR>    
 </BIG></BIG></DIV>
@@ -227,7 +227,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node1.html b/docs/html/node1.html
index e1bcb74..4a7ba17 100644
--- a/docs/html/node1.html
+++ b/docs/html/node1.html
@@ -157,7 +157,7 @@ Contents</A>
  SRC="img2.png"
  ALT="\begin{boxedminipage}[b]{\textwidth}
 ClamAV User Manual,
-\copyright  2007 - 2...
+\copyright \ 2007 - 2...
 ... Franklin Street, Fifth Floor, Boston,
 MA 02110-1301, USA.
 \end{boxedminipage}">
@@ -182,7 +182,7 @@ ClamAV and Clam AntiVirus are trademarks of Sourcefire, Inc.
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node10.html b/docs/html/node10.html
index cca92dc..51564a4 100644
--- a/docs/html/node10.html
+++ b/docs/html/node10.html
@@ -61,7 +61,7 @@ Binary packages</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node11.html b/docs/html/node11.html
index 9c5a950..c8f4925 100644
--- a/docs/html/node11.html
+++ b/docs/html/node11.html
@@ -81,7 +81,7 @@ Installation</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node12.html b/docs/html/node12.html
index 8a5d829..7ad39cd 100644
--- a/docs/html/node12.html
+++ b/docs/html/node12.html
@@ -133,7 +133,7 @@ the package for these compilers are usually called: gcc, g++, or gcc-c++.
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node13.html b/docs/html/node13.html
index 0901f68..cea94fc 100644
--- a/docs/html/node13.html
+++ b/docs/html/node13.html
@@ -75,7 +75,7 @@ Installing on shell account</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node14.html b/docs/html/node14.html
index f368ae9..acbde2b 100644
--- a/docs/html/node14.html
+++ b/docs/html/node14.html
@@ -69,7 +69,7 @@ Adding new system user and group</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node15.html b/docs/html/node15.html
index adb3018..af9d649 100644
--- a/docs/html/node15.html
+++ b/docs/html/node15.html
@@ -75,7 +75,7 @@ Compilation of base package</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node16.html b/docs/html/node16.html
index 57f7a6b..2c42b4b 100644
--- a/docs/html/node16.html
+++ b/docs/html/node16.html
@@ -65,7 +65,7 @@ Compilation with clamav-milter enabled</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node17.html b/docs/html/node17.html
index 934a042..0218a06 100644
--- a/docs/html/node17.html
+++ b/docs/html/node17.html
@@ -142,7 +142,7 @@ All 4 tests passed
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node18.html b/docs/html/node18.html
index 67f589c..2aaedb3 100644
--- a/docs/html/node18.html
+++ b/docs/html/node18.html
@@ -96,7 +96,7 @@ $ CK_FORK=no ./libtool --mode=execute valgrind unit_tests/check-clamav
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node19.html b/docs/html/node19.html
index 01d9069..80bc19d 100644
--- a/docs/html/node19.html
+++ b/docs/html/node19.html
@@ -87,7 +87,7 @@ Configuration</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node2.html b/docs/html/node2.html
index 6bbd9fd..23a1220 100644
--- a/docs/html/node2.html
+++ b/docs/html/node2.html
@@ -79,7 +79,7 @@ Introduction</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node20.html b/docs/html/node20.html
index 22dd435..d5c2cd4 100644
--- a/docs/html/node20.html
+++ b/docs/html/node20.html
@@ -79,7 +79,7 @@ clamd</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node21.html b/docs/html/node21.html
index 976514a..cab8e9b 100644
--- a/docs/html/node21.html
+++ b/docs/html/node21.html
@@ -90,7 +90,7 @@ On-access scanning</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node22.html b/docs/html/node22.html
index 6afad63..b8b1f64 100644
--- a/docs/html/node22.html
+++ b/docs/html/node22.html
@@ -70,7 +70,7 @@ clamav-milter</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node23.html b/docs/html/node23.html
index 616e8e8..682e447 100644
--- a/docs/html/node23.html
+++ b/docs/html/node23.html
@@ -75,7 +75,7 @@ Testing</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node24.html b/docs/html/node24.html
index c60d9eb..2305c8a 100644
--- a/docs/html/node24.html
+++ b/docs/html/node24.html
@@ -140,7 +140,7 @@ N * * * *	/usr/local/bin/freshclam --quiet
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node25.html b/docs/html/node25.html
index 1da5a92..250c468 100644
--- a/docs/html/node25.html
+++ b/docs/html/node25.html
@@ -77,7 +77,7 @@ Closest mirrors</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node26.html b/docs/html/node26.html
index c8fe295..53f056b 100644
--- a/docs/html/node26.html
+++ b/docs/html/node26.html
@@ -108,7 +108,7 @@ The only private data that is transferred is an IP address, which is used
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node27.html b/docs/html/node27.html
index d76aefc..e648ffc 100644
--- a/docs/html/node27.html
+++ b/docs/html/node27.html
@@ -80,7 +80,7 @@ Usage</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node28.html b/docs/html/node28.html
index 9534a20..dd6e1d9 100644
--- a/docs/html/node28.html
+++ b/docs/html/node28.html
@@ -230,7 +230,7 @@ Scan stream: clamd will return a new port number you should
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node29.html b/docs/html/node29.html
index 2edfa14..f5a7a3b 100644
--- a/docs/html/node29.html
+++ b/docs/html/node29.html
@@ -76,7 +76,7 @@ Clam<SPAN  CLASS="textbf">d</SPAN>scan</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node3.html b/docs/html/node3.html
index 2887238..96a8af4 100644
--- a/docs/html/node3.html
+++ b/docs/html/node3.html
@@ -67,7 +67,7 @@ Features</A>
 </LI>
 <LI>Supports on-access scanning (Linux and FreeBSD only)
 </LI>
-<LI>Detects over 750.000 viruses, worms and trojans, including
+<LI>Detects over 775.000 viruses, worms and trojans, including
 	      Microsoft Office macro viruses, mobile malware, and other threats
 </LI>
 <LI>Built-in bytecode interpreter allows the ClamAV signature writers
@@ -195,7 +195,7 @@ Features</A>
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node30.html b/docs/html/node30.html
index 021f038..12197a9 100644
--- a/docs/html/node30.html
+++ b/docs/html/node30.html
@@ -92,7 +92,7 @@ SIGTERM signal. In other case you can lose access
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node31.html b/docs/html/node31.html
index 0b175c0..9b6b4dc 100644
--- a/docs/html/node31.html
+++ b/docs/html/node31.html
@@ -70,7 +70,7 @@ Output format</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node32.html b/docs/html/node32.html
index 904eda4..288e0e0 100644
--- a/docs/html/node32.html
+++ b/docs/html/node32.html
@@ -79,7 +79,7 @@ clamscan</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node33.html b/docs/html/node33.html
index 871799d..29e1c93 100644
--- a/docs/html/node33.html
+++ b/docs/html/node33.html
@@ -83,7 +83,7 @@ Error messages are printed in the following format:
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node34.html b/docs/html/node34.html
index b935058..9334f8b 100644
--- a/docs/html/node34.html
+++ b/docs/html/node34.html
@@ -129,7 +129,7 @@ LibClamAV</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node35.html b/docs/html/node35.html
index e82e95d..f2ede3a 100644
--- a/docs/html/node35.html
+++ b/docs/html/node35.html
@@ -63,7 +63,7 @@ Licence</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node36.html b/docs/html/node36.html
index 3cc5be2..f5186de 100644
--- a/docs/html/node36.html
+++ b/docs/html/node36.html
@@ -79,7 +79,7 @@ Supported formats and features</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node37.html b/docs/html/node37.html
index 01c1bb0..8ccf394 100644
--- a/docs/html/node37.html
+++ b/docs/html/node37.html
@@ -87,7 +87,7 @@ Executables</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node38.html b/docs/html/node38.html
index e4f03a4..0c035a0 100644
--- a/docs/html/node38.html
+++ b/docs/html/node38.html
@@ -62,7 +62,7 @@ Mail files</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node39.html b/docs/html/node39.html
index acb44df..a131b26 100644
--- a/docs/html/node39.html
+++ b/docs/html/node39.html
@@ -98,7 +98,7 @@ Archives and compressed files</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node4.html b/docs/html/node4.html
index 31e6f27..f75d9dd 100644
--- a/docs/html/node4.html
+++ b/docs/html/node4.html
@@ -86,7 +86,7 @@ Alternatively you can try asking on the <code>#clamav</code> IRC channel - launc
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node40.html b/docs/html/node40.html
index a1d1a68..6bef13e 100644
--- a/docs/html/node40.html
+++ b/docs/html/node40.html
@@ -68,12 +68,15 @@ Documents</A>
     
 </LI>
 </UL>
+    In the case of Office, RTF and PDF files, libclamav will only extract the
+    embedded objects and will not decode the text data itself. The text
+    decoding and normalization is only performed for HTML files.
 
 <P>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node41.html b/docs/html/node41.html
index e53b8cf..48863e5 100644
--- a/docs/html/node41.html
+++ b/docs/html/node41.html
@@ -62,7 +62,7 @@ Data Loss Prevention</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node42.html b/docs/html/node42.html
index 5a9339a..76d2aa0 100644
--- a/docs/html/node42.html
+++ b/docs/html/node42.html
@@ -75,7 +75,7 @@ Others</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node43.html b/docs/html/node43.html
index 850621b..857d7db 100644
--- a/docs/html/node43.html
+++ b/docs/html/node43.html
@@ -91,7 +91,7 @@ API</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node44.html b/docs/html/node44.html
index 51cd26e..c1e69c4 100644
--- a/docs/html/node44.html
+++ b/docs/html/node44.html
@@ -64,7 +64,7 @@ Header file</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node45.html b/docs/html/node45.html
index 2b3ee99..6d9f07f 100644
--- a/docs/html/node45.html
+++ b/docs/html/node45.html
@@ -73,7 +73,7 @@ Initialization</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node46.html b/docs/html/node46.html
index c5ca9a3..85f275d 100644
--- a/docs/html/node46.html
+++ b/docs/html/node46.html
@@ -125,7 +125,7 @@ Load bytecode.
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node47.html b/docs/html/node47.html
index c58a577..656111b 100644
--- a/docs/html/node47.html
+++ b/docs/html/node47.html
@@ -69,7 +69,7 @@ Error handling</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node48.html b/docs/html/node48.html
index bd6033a..c8d6896 100644
--- a/docs/html/node48.html
+++ b/docs/html/node48.html
@@ -75,7 +75,7 @@ Engine structure</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node49.html b/docs/html/node49.html
index 7142ab5..da5dcce 100644
--- a/docs/html/node49.html
+++ b/docs/html/node49.html
@@ -79,7 +79,7 @@ const char *cl_engine_get_str(const struct cl_engine *engine,
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node5.html b/docs/html/node5.html
index 23436cb..b9e4ba5 100644
--- a/docs/html/node5.html
+++ b/docs/html/node5.html
@@ -65,7 +65,7 @@ Virus submitting</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node50.html b/docs/html/node50.html
index db33692..9e2e6b4 100644
--- a/docs/html/node50.html
+++ b/docs/html/node50.html
@@ -103,7 +103,7 @@ Database checks</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node51.html b/docs/html/node51.html
index 54ccbfb..b9b82ef 100644
--- a/docs/html/node51.html
+++ b/docs/html/node51.html
@@ -213,7 +213,7 @@ Allow heuristic match to take precedence. When enabled, if
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node52.html b/docs/html/node52.html
index 00203cf..577cbe5 100644
--- a/docs/html/node52.html
+++ b/docs/html/node52.html
@@ -63,7 +63,7 @@ Memory</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node53.html b/docs/html/node53.html
index 4676631..250c012 100644
--- a/docs/html/node53.html
+++ b/docs/html/node53.html
@@ -65,7 +65,7 @@ Forking daemons</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node54.html b/docs/html/node54.html
index 7f7cbe0..e5dde99 100644
--- a/docs/html/node54.html
+++ b/docs/html/node54.html
@@ -67,7 +67,7 @@ clamav-config</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node55.html b/docs/html/node55.html
index d377ff3..e8fa45e 100644
--- a/docs/html/node55.html
+++ b/docs/html/node55.html
@@ -65,7 +65,7 @@ Example</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node56.html b/docs/html/node56.html
index 8b4d69e..7ca6c3b 100644
--- a/docs/html/node56.html
+++ b/docs/html/node56.html
@@ -82,7 +82,7 @@ Verification OK.
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node57.html b/docs/html/node57.html
index 3fc25f2..983510a 100644
--- a/docs/html/node57.html
+++ b/docs/html/node57.html
@@ -613,7 +613,7 @@ Contributors</A>
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node58.html b/docs/html/node58.html
index 8c1cbb5..5f66f13 100644
--- a/docs/html/node58.html
+++ b/docs/html/node58.html
@@ -459,7 +459,7 @@ Donors</A>
 <!--End of Navigation Panel-->
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node59.html b/docs/html/node59.html
index 6bd239c..978be3c 100644
--- a/docs/html/node59.html
+++ b/docs/html/node59.html
@@ -63,7 +63,7 @@ Graphics</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node6.html b/docs/html/node6.html
index afc68f6..e3f266d 100644
--- a/docs/html/node6.html
+++ b/docs/html/node6.html
@@ -78,7 +78,7 @@ Base package</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node60.html b/docs/html/node60.html
index 218d5fb..c301e24 100644
--- a/docs/html/node60.html
+++ b/docs/html/node60.html
@@ -62,7 +62,7 @@ OpenAntiVirus</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node61.html b/docs/html/node61.html
index 0d7db47..6aef439 100644
--- a/docs/html/node61.html
+++ b/docs/html/node61.html
@@ -134,7 +134,7 @@ Role: coder
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node62.html b/docs/html/node62.html
index c0e7c4e..72e4774 100644
--- a/docs/html/node62.html
+++ b/docs/html/node62.html
@@ -64,11 +64,11 @@ Mathematics Department, Macquarie University, Sydney.
 The command line arguments were: <BR>
  <STRONG>latex2html</STRONG> <TT>-local_icons clamdoc.tex</TT>
 <P>
-The translation was initiated by Tomasz Kojm on 2010-03-10
+The translation was initiated by Tomasz Kojm on 2010-05-19
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node7.html b/docs/html/node7.html
index e5bc86e..714be9b 100644
--- a/docs/html/node7.html
+++ b/docs/html/node7.html
@@ -69,7 +69,7 @@ Supported platforms</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node8.html b/docs/html/node8.html
index b3c450a..4348b6b 100644
--- a/docs/html/node8.html
+++ b/docs/html/node8.html
@@ -77,7 +77,7 @@ UNIX</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/html/node9.html b/docs/html/node9.html
index d1f9e53..aa358c4 100644
--- a/docs/html/node9.html
+++ b/docs/html/node9.html
@@ -60,7 +60,7 @@ Windows</A>
 <BR><HR>
 <ADDRESS>
 Tomasz Kojm
-2010-03-10
+2010-05-19
 </ADDRESS>
 </BODY>
 </HTML>
diff --git a/docs/man/clamav-milter.8.in b/docs/man/clamav-milter.8.in
index 2a17261..60e6878 100644
--- a/docs/man/clamav-milter.8.in
+++ b/docs/man/clamav-milter.8.in
@@ -33,4 +33,4 @@ Read configuration from FILE.
 aCaB <acab at clamav.net>
 .SH "SEE ALSO"
 .LP
-sendmail(8), clamd(8), clamd.conf(5)
+sendmail(8), clamav-milter.conf(5), clamd(8), clamd.conf(5)
diff --git a/docs/man/clamav-milter.conf.5.in b/docs/man/clamav-milter.conf.5.in
new file mode 100644
index 0000000..238bec2
--- /dev/null
+++ b/docs/man/clamav-milter.conf.5.in
@@ -0,0 +1,235 @@
+.TH "clamav-milter.conf" "5" "February 12, 2007" "ClamAV @VERSION@" "Clam AntiVirus"
+.SH "NAME"
+.LP 
+\fBclamav-milter.conf\fR \- Configuration file for clamav-milter
+.SH "DESCRIPTION"
+.LP 
+clamav-milter.conf contains the configuration options for clamav-milter(8).
+.SH "FILE FORMAT"
+The file consists of comments and options with arguments. Each line which starts with a hash (\fB#\fR) symbol is ignored by the parser. Options and arguments are case sensitive and of the form \fBOption Argument\fR. The arguments are of the following types:
+.TP 
+\fBBOOL\fR
+Boolean value (yes/no or true/false or 1/0).
+.TP 
+\fBSTRING\fR
+String without blank characters.
+.TP 
+\fBSIZE\fR
+Size in bytes. You can use 'M' or 'm' modifiers for megabytes and 'K' or 'k' for kilobytes.
+.TP 
+\fBNUMBER\fR
+Unsigned integer.
+.SH "MAIN OPTIONS"
+.TP 
+\fBExample\fR
+If this option is set clamav-milter will not run.
+.TP 
+\fBMilterSocket STRING\fR
+Define the interface through which we communicate with sendmail. This option is mandatory!
+.br
+Possible formats are:
+.br
+[[unix|local\]:\]/path/to/file - to specify a unix domain socket
+.br
+inet:port@[hostname|ip-address] - to specify an ipv4 socket
+.br
+inet6:port@[hostname|ip-address] - to specify an ipv6 socket
+.br 
+Default: unset
+.TP 
+\fBMilterSocketGroup STRING\fR
+Define the group ownership for the (unix) milter socket.
+.br
+Default: disabled (the primary group of the user running clamd)
+.TP 
+\fBMilterSocketMode STRING\fR
+Sets the permissions on the (unix) milter socket to the specified mode.
+.br
+Default: disabled (obey umask)
+.TP 
+\fBFixStaleSocket BOOL\fR
+Remove stale socket after unclean shutdown.
+.br
+Default: yes
+.TP
+\fBUser STRING\fR
+Run as another user (clamav-milter must be started by root for this option to work)
+.br
+Default: unset (don\'t drop privileges)
+.TP 
+\fBAllowSupplementaryGroups BOOL\fR
+Initialize supplementary group access (clamav-milter must be started by root).
+.br 
+Default: no
+.TP 
+\fBReadTimeout NUMBER\fR
+Waiting for data from clamd will timeout after this time (seconds).
+.br 
+Default: 120
+.TP 
+\fBForeground BOOL\fR
+Don\'t fork into background.
+.br 
+Default: no
+.TP 
+\fBChroot STRING\fR
+Chroot to the specified directory. Chrooting is performed just after reading the config file and before dropping privileges.
+.br
+Default: unset (don\'t chroot)
+.TP 
+\fBPidFile STRING\fR
+Save the process identifier of a clamav-milter (main thread) to a specified file.
+.br 
+Default: disabled
+.TP 
+\fBTemporaryDirectory STRING\fR
+Optional path to the global temporary directory.
+.br 
+Default: system specific (usually /tmp or /var/tmp).
+.SH "CLAMD OPTIONS"
+.TP 
+\fBClamdSocket STRING\fR
+Define the clamd socket to connect to for scanning. This option is mandatory! Syntax:
+.br
+ClamdSocket unix:path
+.br
+ClamdSocket tcp:host:port
+.br
+The first syntax specifies a local unix socket (needs an absolute path) e.g.:
+.br
+ClamdSocket unix:/var/run/clamd/clamd.socket
+.br
+The second syntax specifies a tcp local or remote tcp socket: the host can be a hostname or an ip address; the ":port" field is only required for IPv6 addresses, otherwise it defaults to 3310 e.g.:
+.br
+ClamdSocket tcp:192.168.0.1
+.br
+This option can be repeated several times with different sockets or even with the same socket: clamd servers will be selected in a round-robin fashion.
+.br
+Default: no default
+.SH "EXCLUSIONS"
+.TP 
+\fBLocalNet STRING\fR
+Messages originating from these hosts/networks will not be scanned. This option takes a host(name)/mask pair in CIRD notation and can be repeated several times. If "/mask" is omitted, a host is assumed. To specify a locally orignated, non-smtp, email use the keyword "local"
+.br
+Default: unset (scan everything regardless of the origin)
+.TP 
+\fBWhitelist STRING\fR
+This option specifies a file which contains a list of basic POSIX regular expressions. Addresses (sent to or from - see below) matching these regexes  will not be scanned.  Optionally each line can start with the string "From:" or "To:" (note: no whitespace after the colon) indicating if it is,  respectively, the sender or recipient that is to be whitelisted. If the field is missing, "To:" is assumed.  Lines starting with #, : or ! are ignored.
+.br
+Default: unset (no exclusion applied)
+.TP 
+\fBSkipAuthenticated STRING\fR
+Messages from authenticated SMTP users matching this extended POSIX regular expression (egrep-like) will not be scanned.  As an alternative, a file containing a plain (not regex) list of names (one per line) can be specified using the prefix "file:".  e.g. SkipAuthenticated file:/etc/good_guys. Note: this is the AUTH login name!
+.br
+Default: unset (no whitelisting based on SMTP auth)
+.TP 
+\fBSkipAuthenticated SIZE\fR
+Messages larger than this value won\'t be scanned. Make sure this value is lower or equal than StreamMaxLength in clamd.conf
+.br
+Default: 25M
+.SH "ACTIONS"
+The following group of options controls the delievery process under  different circumstances. The following actions are available:
+.br
+- Accept: The message is accepted for delievery
+.br
+- Reject: Immediately refuse delievery (a 5xx error is returned to the peer)
+.br
+- Defer: Return a temporary failure message (4xx) to the peer
+.br
+- Blackhole (not available for OnFail): Like Accept but the message is sent to oblivion
+.br
+- Quarantine (not available for OnFail): Like Accept but message is quarantined instead of being delivered. NOTE: In Sendmail the quarantine queue can be examined via mailq -qQ. For Postfix this causes the message to be placed on hold.
+.TP 
+\fBOnClean STRING\fR
+Action to be performed on clean messages (mostly useful for testing)
+.br
+Default: Accept
+.TP 
+\fBOnInfected STRING\fR
+Action to be performed on infected messages
+.br
+Default: Quarantine
+.TP 
+\fBOnFail STRING\fR
+Action to be performed on error conditions (this includes failure to allocate data structures, no scanners available, network timeouts, unknown scanner replies and the like)
+.br
+Default: Defer
+.TP 
+\fBRejectMsg STRING\fR
+This option allows to set a specific rejection reason for infected messages and it\'s therefore only useful together with "OnInfected Reject". The string "%v", if present, will be replaced with the virus name.
+.br
+Default: MTA specific
+.TP 
+\fBAddHeader STRING\fR
+If this option is set to "Replace" (or "Yes"), an "X-Virus-Scanned" and an "X-Virus-Status" headers will be attached to each processed message, possibly replacing existing headers.  If it is set to Add, the X-Virus headers are added possibly on top of the existing ones. Note that while "Replace" can potentially break DKIM signatures, "Add" may confuse procmail and similar filters.
+.br
+Default: no
+.TP 
+\fBReportHostname STRING\fr
+When AddHeader is in use, this option allows to arbitrary set the reported hostname. This may be desirable in order to avoid leaking internal names. If unset the real machine name is used.
+.br
+Default: disabled
+.TP 
+\fBVirusAction STRING\fr
+Execute a command (possibly searching PATH) when an infected message is found. The following parameters are passed to the invoked program in this order: virus name, queue id, sender, destination, subject, message id, message date. Note #1: this requires MTA macroes to be available (see LogInfected below). Note #2: the process is invoked in the context of clamav-milter. Note #3: clamav-milter will wait for the process to exit. Be quick or fork to avoid unnecessary delays in email delievery.
+.br
+Default: disabled
+.SH "LOGGING OPTIONS"
+.TP 
+\fBLogFile STRING\fR
+Enable logging to selected file.
+.br 
+Default: no
+.TP 
+\fBLogFileUnlock BOOL\fR
+Disable a system lock that protects against running clamd with the same configuration file multiple times.
+.br 
+Default: no
+.TP 
+\fBLogFileMaxSize SIZE\fR
+Limit the size of the log file. The logger will be automatically disabled if the file is greater than SIZE. Value of 0 disables the limit.
+.br 
+Default: 1M
+.TP 
+\fBLogTime BOOL\fR
+Log time for each message.
+.br 
+Default: no
+.TP 
+\fBLogSyslog BOOL\fR
+Use system logger (can work together with LogFile).
+.br 
+Default: no
+.TP 
+\fBLogFacility STRING\fR
+Specify the type of syslog messages \- please refer to 'man syslog' for facility names.
+.br 
+Default: LOG_LOCAL6
+.TP 
+\fBLogVerbose BOOL\fR
+Enable verbose logging.
+.br 
+Default: no
+.TP 
+\fBLogInfected STRING\fR
+Specify the type of syslog messages \- please refer to 'man syslog' for facility names.
+.br 
+This option allows to tune what is logged when a message is infected. Possible values are Off (the default - nothing is logged), Basic (minimal info logged), Full (verbose info logged)
+.br
+Note: For this to work properly in sendmail, make sure the msg_id, mail_addr, rcpt_addr and i macroes are available in eom. In other words add a line like: Milter.macros.eom={msg_id}, {mail_addr}, {rcpt_addr}, i to your .cf file. Alternatively use the macro: define(`confMILTER_MACROS_EOM', `{msg_id}, {mail_addr}, {rcpt_addr}, i')
+.br
+Postfix should be working fine with the default settings.
+.br
+Default: disabled
+.SH "NOTES"
+.LP 
+All options expressing a size are limited to max 4GB. Values in excess will be resetted to the maximum.
+.SH "FILES"
+.LP 
+ at CFGDIR@/clamav-milter.conf
+.SH "AUTHOR"
+.LP 
+aCaB <acab at clamav.net>
+.SH "SEE ALSO"
+.LP 
+clamav-milter(8), clamd(8), clamd.conf(5)
diff --git a/docs/man/clamd.8.in b/docs/man/clamd.8.in
index 7c2f50f..c0f8a7f 100644
--- a/docs/man/clamd.8.in
+++ b/docs/man/clamd.8.in
@@ -124,4 +124,4 @@ Please check the full documentation for credits.
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamd.conf(5), clamdscan(1), clamscan(1), freshclam(1), sigtool(1), clamav\-milter(8)
+clamd.conf(5), clamdscan(1), freshclam(1), freshclam.conf(5), clamav\-milter(8)
diff --git a/docs/man/clamd.conf.5.in b/docs/man/clamd.conf.5.in
index 6953fbc..5caa848 100644
--- a/docs/man/clamd.conf.5.in
+++ b/docs/man/clamd.conf.5.in
@@ -408,7 +408,7 @@ Files larger than this limit won't be scanned. Affects the input file itself as
 Default: 25M
 .TP 
 \fBMaxRecursion NUMBER\fR
-Nested archives are scanned recursively, e.g. if a Zip archive contains a RAR file, all files within it will also be scanned. This options specifies how deeply the process should be continued. \fBWarning: disabling this limit or setting it too high may result in severe damage to the system.\fR
+Nested archives are scanned recursively, e.g. if a Zip archive contains a RAR file, all files within it will also be scanned. This options specifies how deeply the process should be continued. \fBWarning: setting this limit too high may result in severe damage to the system.\fR
 .br 
 Default: 16
 .TP 
@@ -467,4 +467,4 @@ All options expressing a size are limited to max 4GB. Values in excess will be r
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamd(8), clamdscan(1), clamav-milter(8), clamscan(1), freshclam(1), sigtool(1)
+clamd(8), clamdscan(1), clamav-milter(8), freshclam(1), freshclam.conf(5)
diff --git a/docs/man/clamdscan.1.in b/docs/man/clamdscan.1.in
index 8c3c34b..d90546d 100644
--- a/docs/man/clamdscan.1.in
+++ b/docs/man/clamdscan.1.in
@@ -94,4 +94,4 @@ Please check the full documentation for credits.
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamd(8), clamd.conf(5), clamscan(1), freshclam(1)
+clamd(8), clamd.conf(5), clamscan(1)
diff --git a/docs/man/clamscan.1.in b/docs/man/clamscan.1.in
index a232b2d..761fd48 100644
--- a/docs/man/clamscan.1.in
+++ b/docs/man/clamscan.1.in
@@ -207,4 +207,4 @@ Please check the full documentation for credits.
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamdscan(1), freshclam(1)
+clamdscan(1), freshclam(1), freshclam.conf(5)
diff --git a/docs/man/freshclam.1.in b/docs/man/freshclam.1.in
index e11d6d5..d5cab0e 100644
--- a/docs/man/freshclam.1.in
+++ b/docs/man/freshclam.1.in
@@ -126,4 +126,4 @@ Please check the full documentation for credits.
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamd(8), clamdscan(1), clamscan(1), sigtool(1), clamd.conf(5), clamav-milter(8)
+freshclam.conf(5), clamd(8), clamd.conf(5), clamscan(1)
diff --git a/docs/man/freshclam.conf.5.in b/docs/man/freshclam.conf.5.in
index c5f25d1..54614a8 100644
--- a/docs/man/freshclam.conf.5.in
+++ b/docs/man/freshclam.conf.5.in
@@ -50,6 +50,11 @@ Default: 12
 Enable logging to a specified file. Highly recommended.
 .br 
 Default: disabled.
+.TP
+\fBLogFileMaxSize SIZE\fR
+Limit the size of the log file. The logger will be automatically disabled if the file is greater than SIZE. Value of 0 disables the limit.
+.br
+Default: 1M
 .TP 
 \fBLogSyslog BOOL\fR
 Enable logging to Syslog. May be used in combination with UpdateLogFile.
@@ -91,6 +96,11 @@ With this option you can control scripted updates. It's highly recommended to ke
 .br .
 Default: enabled
 .TP 
+\fBTestDatabases BOOL\fR
+With this option enabled, freshclam will attempt to load new databases into memory to make sure they are properly handled by libclamav before replacing the old ones.
+.br .
+Default: enabled
+.TP 
 \fBCompressLocalDatabase BOOL\fR
 By default freshclam will keep the local databases (.cld) uncompressed to make their handling faster. With this option you can enable the compression; the change will take effect with the next database update.
 .br 
@@ -176,5 +186,4 @@ Default: enabled
 Thomas Lamy <thomas.lamy at netwake.de>, Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-freshclam(1), clamd.conf(5), clamd(8), clamav-milter(8), clamscan(1)
-
+freshclam(1), clamd.conf(5), clamd(8), clamscan(1)
diff --git a/docs/man/sigtool.1.in b/docs/man/sigtool.1.in
index a9f01e7..4793472 100644
--- a/docs/man/sigtool.1.in
+++ b/docs/man/sigtool.1.in
@@ -93,4 +93,4 @@ Please check the full documentation for credits.
 Tomasz Kojm <tkojm at clamav.net>
 .SH "SEE ALSO"
 .LP 
-clamd(8), clamdscan(1), clamscan(1), freshclam(1), clamd.conf(5), clamav\-milter(8)
+freshclam(1), freshclam.conf(5)
diff --git a/etc/Makefile.in b/etc/Makefile.in
index b18bcc7..85a65ea 100644
--- a/etc/Makefile.in
+++ b/etc/Makefile.in
@@ -56,12 +56,14 @@ subdir = etc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -88,6 +90,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/etc/clamav-milter.conf b/etc/clamav-milter.conf
index 4206e8d..e244240 100644
--- a/etc/clamav-milter.conf
+++ b/etc/clamav-milter.conf
@@ -83,7 +83,7 @@ Example
 #     ClamdSocket unix:/var/run/clamd/clamd.socket
 # The second syntax specifies a tcp local or remote tcp socket: the
 # host can be a hostname or an ip address; the ":port" field is only required
-# for IPv6 addresses, otherwise it defaults to 3310
+# for IPv6 addresses, otherwise it defaults to 3310, e.g.:
 #     ClamdSocket tcp:192.168.0.1
 #
 # This option can be repeated several times with different sockets or even
@@ -130,6 +130,12 @@ ClamdSocket /var/run/clamav/clamd
 # Default: unset (no whitelisting based on SMTP auth)
 #SkipAuthenticated ^(tom|dick|henry)$
 
+# Messages larger than this value won't be scanned.
+# Make sure this value is lower or equal than StreamMaxLength in clamd.conf
+#
+# Default: 25M
+#MaxFileSize 10M
+
 
 ##
 ## Actions
@@ -153,7 +159,7 @@ ClamdSocket /var/run/clamav/clamd
 # For Postfix this causes the message to be placed on hold
 # 
 # Action to be performed on clean messages (mostly useful for testing)
-# Default Accept
+# Default: Accept
 #OnClean Accept
 
 # Action to be performed on infected messages
@@ -163,7 +169,7 @@ ClamdSocket /var/run/clamav/clamd
 # Action to be performed on error conditions (this includes failure to
 # allocate data structures, no scanners available, network timeouts,
 # unknown scanner replies and the like)
-# Default Defer
+# Default: Defer
 #OnFail Defer
 
 # This option allows to set a specific rejection reason for infected messages
@@ -188,6 +194,16 @@ ClamdSocket /var/run/clamav/clamd
 # Default: disabled
 #ReportHostname my.mail.server.name
 
+# Execute a command (possibly searching PATH) when an infected message is found.
+# The following parameters are passed to the invoked program in this order:
+# virus name, queue id, sender, destination, subject, message id, message date.
+# Note #1: this requires MTA macroes to be available (see LogInfected below)
+# Note #2: the process is invoked in the context of clamav-milter
+# Note #3: clamav-milter will wait for the process to exit. Be quick or fork to
+# avoid unnecessary delays in email delievery
+# Default: disabled
+#VirusAction /usr/local/bin/my_infected_message_handler
+
 ##
 ## Logging options
 ##
@@ -250,14 +266,3 @@ ClamdSocket /var/run/clamav/clamd
 # Default: disabled
 #LogInfected Basic
 
-
-##
-## Limits
-##
-
-# Messages larger than this value won't be scanned.
-# Make sure this value is lower or equal than StreamMaxLength in clamd.conf
-#
-# Default: 25M
-#MaxFileSize 10M
-
diff --git a/etc/clamd.conf b/etc/clamd.conf
index 755f08d..d464b19 100644
--- a/etc/clamd.conf
+++ b/etc/clamd.conf
@@ -398,9 +398,7 @@ Example
 # Nested archives are scanned recursively, e.g. if a Zip archive contains a RAR
 # file, all files within it will also be scanned. This options specifies how
 # deeply the process should be continued.
-# Note: disabling this limit or setting it too high may result in severe damage
-# to the system.
-# Value of 0 disables the limit.
+# Note: setting this limit too high may result in severe damage to the system.
 # Default: 16
 #MaxRecursion 10
 
diff --git a/etc/freshclam.conf b/etc/freshclam.conf
index e062457..ff3e366 100644
--- a/etc/freshclam.conf
+++ b/etc/freshclam.conf
@@ -142,6 +142,12 @@ DatabaseMirror database.clamav.net
 # Default: 30
 #ReceiveTimeout 60
 
+# With this option enabled, freshclam will attempt to load new
+# databases into memory to make sure they are properly handled
+# by libclamav before replacing the old ones.
+# Default: yes
+#TestDatabases yes
+
 # When enabled freshclam will submit statistics to the ClamAV Project about
 # the latest virus detections in your environment. The ClamAV maintainers
 # will then use this data to determine what types of malware are the most
diff --git a/freshclam/Makefile.in b/freshclam/Makefile.in
index 0579ff4..51588ec 100644
--- a/freshclam/Makefile.in
+++ b/freshclam/Makefile.in
@@ -59,12 +59,14 @@ subdir = freshclam
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -125,6 +127,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/freshclam/freshclam.c b/freshclam/freshclam.c
index a671142..def0d04 100644
--- a/freshclam/freshclam.c
+++ b/freshclam/freshclam.c
@@ -49,6 +49,8 @@
 #include "target.h"
 #include "clamav.h"
 
+#include "libclamav/others.h"
+
 #include "shared/optparser.h"
 #include "shared/output.h"
 #include "shared/misc.h"
@@ -61,8 +63,9 @@ static short terminate = 0;
 extern int active_children;
 
 static short foreground = 1;
+char updtmpdir[512];
 
-static void daemon_sighandler(int sig) {
+static void sighandler(int sig) {
 
     switch(sig) {
 #ifdef	SIGCHLD
@@ -90,8 +93,10 @@ static void daemon_sighandler(int sig) {
 #endif
 
 	default:
-	    terminate = 1;
-	    break;
+	    if(*updtmpdir)
+		cli_rmdirs(updtmpdir);
+	    logg("Update process interrupted\n");
+	    exit(2);
     }
 
     return;
@@ -195,7 +200,7 @@ static int download(const struct optstruct *opts, const char *datadir, const cha
 
 int main(int argc, char **argv)
 {
-	int ret = 52;
+	int ret = 52, retcl;
 	const char *dbdir, *cfgfile, *arg = NULL, *pidfile = NULL;
 	char *pt;
 	struct optstruct *opts;
@@ -211,6 +216,13 @@ int main(int argc, char **argv)
 	struct stat statbuf;
 	struct mirdat mdat;
 
+    if(check_flevel())
+	exit(40);
+
+    if((retcl = cl_init(CL_INIT_DEFAULT))) {
+        mprintf("!Can't initialize libclamav: %s\n", cl_strerror(retcl));
+	return 40;
+    }
 
     if((opts = optparse(NULL, argc, argv, 1, OPT_FRESHCLAM, 0, NULL)) == NULL) {
 	mprintf("!Can't parse command line options\n");
@@ -372,13 +384,23 @@ int main(int argc, char **argv)
 	return 0;
     }
 
+    *updtmpdir = 0;
+
+#ifdef _WIN32
+    signal(SIGINT, sighandler);
+#else
+    memset(&sigact, 0, sizeof(struct sigaction));
+    sigact.sa_handler = sighandler;
+    sigaction(SIGINT, &sigact, NULL);
+#endif
     if(optget(opts, "daemon")->enabled) {
 	    int bigsleep, checks;
 #ifndef	_WIN32
 	    time_t now, wakeup;
 
-	memset(&sigact, 0, sizeof(struct sigaction));
-	sigact.sa_handler = daemon_sighandler;
+	sigaction(SIGTERM, &sigact, NULL);
+	sigaction(SIGHUP, &sigact, NULL);
+	sigaction(SIGCHLD, &sigact, NULL);
 #endif
 
 	checks = optget(opts, "Checks")->numarg;
@@ -420,16 +442,6 @@ int main(int argc, char **argv)
 
 	logg("#freshclam daemon %s (OS: "TARGET_OS_TYPE", ARCH: "TARGET_ARCH_TYPE", CPU: "TARGET_CPU_TYPE")\n", get_version());
 
-#ifdef _WIN32
-	signal(SIGINT, daemon_sighandler);
-	terminate = 0;
-#else
-	sigaction(SIGTERM, &sigact, NULL);
-	sigaction(SIGHUP, &sigact, NULL);
-	sigaction(SIGINT, &sigact, NULL);
-        sigaction(SIGCHLD, &sigact, NULL);
-#endif
-
 	while(!terminate) {
 	    ret = download(opts, dbdir, cfgfile);
 
diff --git a/freshclam/manager.c b/freshclam/manager.c
index 1013ae9..c60f582 100644
--- a/freshclam/manager.c
+++ b/freshclam/manager.c
@@ -78,6 +78,8 @@
 #include "libclamav/str.h"
 #include "libclamav/cvd.h"
 
+extern char updtmpdir[512];
+
 #define CHDIR_ERR(x)				\
 	if(chdir(x) == -1)			\
 	    logg("!Can't chdir to %s\n", x);
@@ -544,11 +546,6 @@ int submitstats(const char *clamdcfg, const struct optstruct *opts)
 	unsigned int qcnt, entries, submitted = 0, permfail = 0, port = 0;
 
 
-    if(optget(opts, "HTTPUserAgent")->enabled) {
-	logg("!SubmitDetectionStats: HTTPUserAgent must be disabled for SubmitDetectionStats to work\n");
-	return 56;
-    }
-
     if((opt = optget(opts, "DetectionStatsCountry"))->enabled) {
 	if(strlen(opt->strarg) != 2 || !isalpha(opt->strarg[0]) || !isalpha(opt->strarg[1])) {
 	    logg("!SubmitDetectionStats: DetectionStatsCountry requires a two-letter country code\n");
@@ -625,7 +622,10 @@ int submitstats(const char *clamdcfg, const struct optstruct *opts)
 	strncpy(newstatsdat, line, sizeof(newstatsdat));
     }
 
-    snprintf(uastr, sizeof(uastr), PACKAGE"/%s (OS: "TARGET_OS_TYPE", ARCH: "TARGET_ARCH_TYPE", CPU: "TARGET_CPU_TYPE"):%s:%s", get_version(), country ? country : "", hostid ? hostid : "");
+    if((opt = optget(opts, "HTTPUserAgent"))->enabled)
+        strncpy(uastr, opt->strarg, sizeof(uastr));
+    else
+	snprintf(uastr, sizeof(uastr), PACKAGE"/%s (OS: "TARGET_OS_TYPE", ARCH: "TARGET_ARCH_TYPE", CPU: "TARGET_CPU_TYPE"):%s:%s", get_version(), country ? country : "", hostid ? hostid : "");
     uastr[sizeof(uastr) - 1] = 0;
 
     if((opt = optget(opts, "HTTPProxyServer"))->enabled) {
@@ -673,6 +673,7 @@ int submitstats(const char *clamdcfg, const struct optstruct *opts)
 	*pt = 0;
 	pt += 4;
 
+	tms.tm_isdst = -1;
 	if(!strptime(buff, "%a %b  %d %H:%M:%S %Y", &tms) || (epoch = mktime(&tms)) == -1) {
 	    logg("!SubmitDetectionStats: Failed to convert date string\n");
 	    ret = 1;
@@ -709,12 +710,12 @@ int submitstats(const char *clamdcfg, const struct optstruct *opts)
 	    query[sizeof(query) - 1] = 0;
 	    if(mdprintf(sd,
 		"POST http://stats.clamav.net/submit.php HTTP/1.0\r\n"
-		"Host: stats.clamav.net\r\n%s"
+		"Host: stats.clamav.net\r\n%s%s%s%s"
 		"Content-Type: application/x-www-form-urlencoded\r\n"
 		"User-Agent: %s\r\n"
 		"Content-Length: %u\r\n\r\n"
 		"%s",
-		auth ? auth : "", uastr, (unsigned int) strlen(query), query) < 0)
+		auth ? auth : "", hostid ? "X-HostID: " : "", hostid ? hostid : "", hostid ? "\r\n" : "", uastr, (unsigned int) strlen(query), query) < 0)
 	    {
 		logg("!SubmitDetectionStats: Can't write to socket\n");
 		ret = 52;
@@ -1468,14 +1469,15 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
 {
 	struct cl_cvd *current, *remote;
 	const struct optstruct *opt;
-	unsigned int nodb = 0, currver = 0, newver = 0, port = 0, i, j;
+	unsigned int nodb = 0, currver = 0, newver = 0, port = 0, i, j, newsigs = 0;
 	int ret, ims = -1;
-	char *pt, cvdfile[32], localname[32], *tmpdir = NULL, *newfile, newdb[32], cwd[512];
+	char *pt, cvdfile[32], localname[32], *tmpdir = NULL, *newfile, *newfile2, newdb[32];
 	char extradbinfo[64], *extradnsreply = NULL;
 	const char *proxy = NULL, *user = NULL, *pass = NULL, *uas = NULL;
 	unsigned int flevel = cl_retflevel(), remote_flevel = 0, maxattempts;
 	unsigned int can_whitelist = 0;
 	int ctimeout, rtimeout;
+	struct cl_engine *engine;
 
 
     snprintf(cvdfile, sizeof(cvdfile), "%s.cvd", dbname);
@@ -1653,12 +1655,7 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
     if(!optget(opts, "ScriptedUpdates")->enabled)
 	nodb = 1;
 
-    if(!getcwd(cwd, sizeof(cwd))) {
-	logg("!updatedb: Can't get path of current working directory\n");
-	return 50; /* FIXME */
-    }
-    newfile = cli_gentemp(cwd);
-
+    newfile = cli_gentemp(updtmpdir);
     if(nodb) {
 	ret = getcvd(cvdfile, newfile, hostname, ip, localip, proxy, port, user, pass, uas, newver, ctimeout, rtimeout, mdat, logerr, can_whitelist);
 	if(ret) {
@@ -1671,7 +1668,7 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
     } else {
 	ret = 0;
 
-	tmpdir = cli_gentemp(".");
+	tmpdir = cli_gentemp(updtmpdir);
 	maxattempts = optget(opts, "MaxAttempts")->numarg;
 	for(i = currver + 1; i <= newver; i++) {
 	    for(j = 0; j < maxattempts; j++) {
@@ -1723,6 +1720,51 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
 	return 55; /* FIXME */
     }
 
+    if(optget(opts, "TestDatabases")->enabled && strlen(newfile) > 4) {
+	if(!(engine = cl_engine_new())) {
+	    unlink(newfile);
+	    free(newfile);
+	    return 55;
+	}
+	newfile2 = strdup(newfile);
+	if(!newfile2) {
+	    unlink(newfile);
+	    free(newfile);
+	    cl_engine_free(engine);
+	    return 55;
+	}
+	newfile2[strlen(newfile2) - 4] = '.';
+	newfile2[strlen(newfile2) - 3] = 'c';
+	newfile2[strlen(newfile2) - 2] = strstr(newdb, ".cld") ? 'l' : 'v';
+	newfile2[strlen(newfile2) - 1] = 'd';
+	if(rename(newfile, newfile2) == -1) {
+	    logg("!Can't rename %s to %s: %s\n", newfile, newfile2, strerror(errno));
+	    unlink(newfile);
+	    free(newfile);
+	    free(newfile2);
+	    cl_engine_free(engine);
+	    return 57;
+	}
+	free(newfile);
+	newfile = newfile2;
+	if((ret = cl_load(newfile, engine, &newsigs, CL_DB_PHISHING | CL_DB_PHISHING_URLS | CL_DB_BYTECODE | CL_DB_PUA)) != CL_SUCCESS) {
+	    logg("!Failed to load new database: %s\n", cl_strerror(ret));
+	    unlink(newfile);
+	    free(newfile);
+	    cl_engine_free(engine);
+	    return 55;
+	}
+	if((ret = cli_bytecode_prepare(&engine->bcs, engine->dconf->bytecode/*FIXME: dconf has no sense here*/))) {
+	    logg("!Failed to compile/load bytecode: %s\n", cl_strerror(ret));
+	    unlink(newfile);
+	    free(newfile);
+	    cl_engine_free(engine);
+	    return 55;
+	}
+	logg("*Properly loaded %u signatures from new %s\n", newsigs, newdb);
+	cl_engine_free(engine);
+    }
+
 #ifdef _WIN32
     if(!access(newdb, R_OK) && unlink(newdb)) {
 	logg("!Can't unlink %s. Please fix the problem manually and try again.\n", newdb);
@@ -1778,6 +1820,17 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 	const char *dnsdbinfo;
 #endif
 
+    pt = cli_gentemp(dbdir);
+    if(!pt)
+	return 57;
+    strncpy(updtmpdir, pt, sizeof(updtmpdir));
+    free(pt);
+    if(mkdir(updtmpdir, 0755)) {
+	logg("!Can't create temporary directory %s\n", updtmpdir);
+	logg("Hint: The database directory must be writable for UID %d or GID %d\n", getuid(), getgid());
+	return 57;
+    }
+
     time(&currtime);
     logg("ClamAV update process started at %s", ctime(&currtime));
 #ifdef HAVE_GETADDRINFO
@@ -1866,6 +1919,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 	    free(newver);
 
 	mirman_write("mirrors.dat", &mdat);
+	cli_rmdirs(updtmpdir);
 	return ret;
 
     } else if(ret == 0)
@@ -1880,6 +1934,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 	    free(newver);
 
 	mirman_write("mirrors.dat", &mdat);
+	cli_rmdirs(updtmpdir);
 	return ret;
 
     } else if(ret == 0)
@@ -1908,6 +1963,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 	    free(newver);
 
 	mirman_write("mirrors.dat", &mdat);
+	cli_rmdirs(updtmpdir);
 	return ret;
     } else if(ret == 0)
 	updated = 1;
@@ -1934,6 +1990,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 	    free(newver);
 
 	mirman_write("mirrors.dat", &mdat);
+	cli_rmdirs(updtmpdir);
 	return ret;
     } else if(ret == 0)
 	updated = 1;
@@ -1947,6 +2004,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 		if(newver)
 		    free(newver);
 		mirman_write("mirrors.dat", &mdat);
+		cli_rmdirs(updtmpdir);
 		return ret;
 	    } else if(ret == 0)
 		updated = 1;
@@ -1996,6 +2054,7 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
 		    free(cmd);
 		    if(newver)
 			free(newver);
+		    cli_rmdirs(updtmpdir);
 		    return 75;
 		}
 
@@ -2018,5 +2077,6 @@ int downloadmanager(const struct optstruct *opts, const char *hostname, const ch
     if(newver)
 	free(newver);
 
+    cli_rmdirs(updtmpdir);
     return 0;
 }
diff --git a/freshclam/notify.c b/freshclam/notify.c
index 9408e40..b6f1a35 100644
--- a/freshclam/notify.c
+++ b/freshclam/notify.c
@@ -35,6 +35,7 @@
 #include <netdb.h>
 #endif
 #include <string.h>
+#include <errno.h>
 
 #include "shared/optparser.h"
 #include "shared/output.h"
@@ -100,7 +101,6 @@ int notify(const char *cfgfile)
 #else
 	hints.ai_family = AF_INET;
 #endif
-	hints.ai_flags = AI_PASSIVE;
 	hints.ai_socktype = SOCK_STREAM;
 	snprintf(port, sizeof(port), "%u", (unsigned int) opt->numarg);
 	port[5] = 0;
@@ -113,8 +113,7 @@ int notify(const char *cfgfile)
 	ret = getaddrinfo(addr, port, &hints, &res);
 
 	if(ret) {
-	    perror("getaddrinfo()");
-	    logg("^Clamd was NOT notified: Can't resolve hostname %s\n", addr ? addr : "");
+	    logg("^Clamd was NOT notified: Can't resolve hostname %s (%s)\n", addr ? addr : "", (ret == EAI_SYSTEM) ? strerror(errno) : gai_strerror(ret));
 	    optfree(opts);
 	    return 1;
 	}
diff --git a/libclamav/7z/Archive/7z/7zIn.c b/libclamav/7z/Archive/7z/7zIn.c
index e9aa08a..ce9382d 100644
--- a/libclamav/7z/Archive/7z/7zIn.c
+++ b/libclamav/7z/Archive/7z/7zIn.c
@@ -647,7 +647,7 @@ static SRes SzReadSubStreamsInfo(
     RINOM(*digests);
   }
 
-  for (i = 0; i < numFolders; i++)
+  for (i = 0; i < numFolders && *unpackSizes; i++)
   {
     /*
     v3.13 incorrectly worked with empty folders
diff --git a/libclamav/Makefile.am b/libclamav/Makefile.am
index 460dd42..8ee7a2e 100644
--- a/libclamav/Makefile.am
+++ b/libclamav/Makefile.am
@@ -360,6 +360,10 @@ libclamav_la_SOURCES += bignum.c \
 		     bignum_class.h
 endif
 
+if BUILD_SHA1
+libclamav_la_SOURCES += sha1.c sha1.h
+endif
+
 .PHONY: version.h.tmp
 version.c: version.h
 version.h: version.h.tmp
@@ -374,10 +378,7 @@ version.h.tmp:
 	rm -f $@;\
 	REVISION="$$(LANG=C cd "$(top_srcdir)"; git describe --always 2>/dev/null || echo "exported")";\
 	if test "$$REVISION" = "exported"; then\
-	   REVISION="r$$(LANG=C svnversion "$(top_srcdir)" 2>/dev/null || echo exported)";\
-	   if test "$$REVISION" = "rexported"; then\
 	    REVISION="";\
-	   fi;\
 	fi;\
 	if test -n "$$REVISION"; then\
 		echo "#define REPO_VERSION \"devel-$$REVISION\"" >> $@;\
diff --git a/libclamav/Makefile.in b/libclamav/Makefile.in
index ed244c7..3872c0b 100644
--- a/libclamav/Makefile.in
+++ b/libclamav/Makefile.in
@@ -66,17 +66,20 @@ target_triplet = @target@
 @LINK_TOMMATH_FALSE at am__append_7 = bignum.c \
 @LINK_TOMMATH_FALSE@		     bignum_class.h
 
+ at BUILD_SHA1_TRUE@am__append_8 = sha1.c sha1.h
 subdir = libclamav
 DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -154,8 +157,9 @@ am__libclamav_la_SOURCES_DIST = clamav.h matcher-ac.c matcher-ac.h \
 	clambc.h cpio.c cpio.h macho.c macho.h ishield.c ishield.h \
 	type_desc.h bcfeatures.h bytecode_api.c bytecode_api_decl.c \
 	bytecode_api.h bytecode_api_impl.h bytecode_hooks.h cache.c \
-	cache.h bignum.c bignum_class.h
+	cache.h bignum.c bignum_class.h sha1.c sha1.h
 @LINK_TOMMATH_FALSE at am__objects_1 = libclamav_la-bignum.lo
+ at BUILD_SHA1_TRUE@am__objects_2 = libclamav_la-sha1.lo
 am_libclamav_la_OBJECTS = libclamav_la-matcher-ac.lo \
 	libclamav_la-matcher-bm.lo libclamav_la-matcher.lo \
 	libclamav_la-others.lo libclamav_la-readdb.lo \
@@ -204,7 +208,7 @@ am_libclamav_la_OBJECTS = libclamav_la-matcher-ac.lo \
 	libclamav_la-bytecode_vm.lo libclamav_la-cpio.lo \
 	libclamav_la-macho.lo libclamav_la-ishield.lo \
 	libclamav_la-bytecode_api.lo libclamav_la-bytecode_api_decl.lo \
-	libclamav_la-cache.lo $(am__objects_1)
+	libclamav_la-cache.lo $(am__objects_1) $(am__objects_2)
 libclamav_la_OBJECTS = $(am_libclamav_la_OBJECTS)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
@@ -369,6 +373,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
@@ -653,7 +658,7 @@ libclamav_la_SOURCES = clamav.h matcher-ac.c matcher-ac.h matcher-bm.c \
 	clambc.h cpio.c cpio.h macho.c macho.h ishield.c ishield.h \
 	type_desc.h bcfeatures.h bytecode_api.c bytecode_api_decl.c \
 	bytecode_api.h bytecode_api_impl.h bytecode_hooks.h cache.c \
-	cache.h $(am__append_7)
+	cache.h $(am__append_7) $(am__append_8)
 noinst_LTLIBRARIES = libclamav_internal_utils.la libclamav_internal_utils_nothreads.la libclamav_nocxx.la
 COMMON_CLEANFILES = version.h version.h.tmp *.gcda *.gcno
 @MAINTAINER_MODE_TRUE at BUILT_SOURCES = jsparse/generated/operators.h jsparse/generated/keywords.h jsparse-keywords.gperf
@@ -850,6 +855,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-regex_suffix.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-rtf.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-scanners.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-sha1.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-sha256.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-sis.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libclamav_la-special.Plo at am__quote@
@@ -1689,6 +1695,14 @@ libclamav_la-bignum.lo: bignum.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -c -o libclamav_la-bignum.lo `test -f 'bignum.c' || echo '$(srcdir)/'`bignum.c
 
+libclamav_la-sha1.lo: sha1.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -MT libclamav_la-sha1.lo -MD -MP -MF $(DEPDIR)/libclamav_la-sha1.Tpo -c -o libclamav_la-sha1.lo `test -f 'sha1.c' || echo '$(srcdir)/'`sha1.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libclamav_la-sha1.Tpo $(DEPDIR)/libclamav_la-sha1.Plo
+ at am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sha1.c' object='libclamav_la-sha1.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -c -o libclamav_la-sha1.lo `test -f 'sha1.c' || echo '$(srcdir)/'`sha1.c
+
 libclamav_internal_utils_la-str.lo: str.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_internal_utils_la_CFLAGS) $(CFLAGS) -MT libclamav_internal_utils_la-str.lo -MD -MP -MF $(DEPDIR)/libclamav_internal_utils_la-str.Tpo -c -o libclamav_internal_utils_la-str.lo `test -f 'str.c' || echo '$(srcdir)/'`str.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libclamav_internal_utils_la-str.Tpo $(DEPDIR)/libclamav_internal_utils_la-str.Plo
@@ -2271,10 +2285,7 @@ version.h.tmp:
 	rm -f $@;\
 	REVISION="$$(LANG=C cd "$(top_srcdir)"; git describe --always 2>/dev/null || echo "exported")";\
 	if test "$$REVISION" = "exported"; then\
-	   REVISION="r$$(LANG=C svnversion "$(top_srcdir)" 2>/dev/null || echo exported)";\
-	   if test "$$REVISION" = "rexported"; then\
 	    REVISION="";\
-	   fi;\
 	fi;\
 	if test -n "$$REVISION"; then\
 		echo "#define REPO_VERSION \"devel-$$REVISION\"" >> $@;\
diff --git a/libclamav/bytecode.c b/libclamav/bytecode.c
index 599b336..5c32955 100644
--- a/libclamav/bytecode.c
+++ b/libclamav/bytecode.c
@@ -34,6 +34,7 @@
 #include "bytecode_priv.h"
 #include "readdb.h"
 #include "scanners.h"
+#include "bytecode_api.h"
 #include "bytecode_api_impl.h"
 #include <string.h>
 
@@ -48,6 +49,24 @@ static const uint32_t nomatch[64] = {
     0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0
 };
+static const uint32_t nooffsets[64] = {
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE,
+    CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE, CLI_OFF_NONE
+};
 
 static const uint16_t nokind;
 static const uint32_t nofilesize;
@@ -60,16 +79,20 @@ static void context_safe(struct cli_bc_ctx *ctx)
 	ctx->hooks.kind = &nokind;
     if (!ctx->hooks.match_counts)
 	ctx->hooks.match_counts = nomatch;
+    if (!ctx->hooks.match_offsets)
+	ctx->hooks.match_counts = nooffsets;
     if (!ctx->hooks.filesize)
 	ctx->hooks.filesize = &nofilesize;
     if (!ctx->hooks.pedata)
 	ctx->hooks.pedata = &nopedata;
 }
 
+static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx);
 struct cli_bc_ctx *cli_bytecode_context_alloc(void)
 {
     struct cli_bc_ctx *ctx = cli_calloc(1, sizeof(*ctx));
     ctx->bytecode_timeout = 60000;
+    cli_bytecode_context_reset(ctx);
     return ctx;
 }
 
@@ -104,9 +127,13 @@ static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx)
     ctx->operands = NULL;
 
     if (ctx->outfd) {
+	cli_ctx *cctx = ctx->ctx;
 	cli_bcapi_extract_new(ctx, -1);
 	if (ctx->outfd)
 	    close(ctx->outfd);
+	if (ctx->tempfile && (!cctx || !cctx->engine->keeptmp)) {
+	    cli_unlink(ctx->tempfile);
+	}
 	free(ctx->tempfile);
 	ctx->tempfile = NULL;
 	ctx->outfd = 0;
@@ -173,11 +200,20 @@ static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx)
     ctx->jsnorms = NULL;
     ctx->njsnorms = 0;
     ctx->jsnormdir = NULL;
+
+    for (i=0;i<ctx->nmaps;i++)
+	cli_bcapi_map_done(ctx, i);
+    free(ctx->maps);
+    ctx->maps = NULL;
+    ctx->nmaps = 0;
+
+    ctx->containertype = CL_TYPE_ANY;
     return CL_SUCCESS;
 }
 
 int cli_bytecode_context_clear(struct cli_bc_ctx *ctx)
 {
+    cli_ctx *cctx = (cli_ctx*)ctx->ctx;
     cli_bytecode_context_reset(ctx);
     memset(ctx, 0, sizeof(*ctx));
     return CL_SUCCESS;
@@ -418,7 +454,7 @@ static inline operand_t readOperand(struct cli_bc_func *func, unsigned char *p,
     return v;
 }
 
-static inline unsigned char *readData(const unsigned char *p, unsigned *off, unsigned len, char *ok, unsigned *datalen)
+static inline char *readData(const unsigned char *p, unsigned *off, unsigned len, char *ok, unsigned *datalen)
 {
     unsigned char *dat, *q;
     unsigned l, newoff, i;
@@ -458,13 +494,13 @@ static inline unsigned char *readData(const unsigned char *p, unsigned *off, uns
     }
     *off = newoff;
     *datalen = l;
-    return dat;
+    return (char*)dat;
 }
 
 static inline char *readString(const unsigned char *p, unsigned *off, unsigned len, char *ok)
 {
     unsigned stringlen;
-    char *str = (char*)readData(p, off, len, ok, &stringlen);
+    char *str = readData(p, off, len, ok, &stringlen);
     if (*ok && stringlen && str[stringlen-1] != '\0') {
 	str[stringlen-1] = '\0';
 	cli_errmsg("bytecode: string missing \\0 terminator: %s\n", str);
@@ -482,19 +518,23 @@ static int parseHeader(struct cli_bc *bc, unsigned char *buffer, unsigned *linel
     char ok = 1;
     unsigned offset, len, flevel;
     char *pos;
+
     if (strncmp((const char*)buffer, BC_HEADER, sizeof(BC_HEADER)-1)) {
 	cli_errmsg("Missing file magic in bytecode");
 	return CL_EMALFDB;
     }
     offset = sizeof(BC_HEADER)-1;
     len = strlen((const char*)buffer);
-    flevel = readNumber(buffer, &offset, len, &ok);
+    bc->metadata.formatlevel = readNumber(buffer, &offset, len, &ok);
     if (!ok) {
-	cli_errmsg("Unable to parse functionality level in bytecode header\n");
+	cli_errmsg("Unable to parse (format) functionality level in bytecode header\n");
 	return CL_EMALFDB;
     }
-    if (flevel != BC_FUNC_LEVEL) {
-	cli_dbgmsg("Skipping bytecode with functionality level: %u (current %u)\n", flevel, BC_FUNC_LEVEL);
+    /* we support 2 bytecode formats */
+    if (bc->metadata.formatlevel != BC_FORMAT_096 &&
+	bc->metadata.formatlevel != BC_FORMAT_LEVEL) {
+	cli_dbgmsg("Skipping bytecode with (format) functionality level: %u (current %u)\n", 
+		   bc->metadata.formatlevel, BC_FORMAT_LEVEL);
 	return CL_BREAK;
     }
     /* Optimistic parsing, check for error only at the end.*/
@@ -502,9 +542,22 @@ static int parseHeader(struct cli_bc *bc, unsigned char *buffer, unsigned *linel
     bc->metadata.sigmaker = readString(buffer, &offset, len, &ok);
     bc->metadata.targetExclude = readNumber(buffer, &offset, len, &ok);
     bc->kind = readNumber(buffer, &offset, len, &ok);
-    bc->metadata.maxStack = readNumber(buffer, &offset, len, &ok);
-    bc->metadata.maxMem = readNumber(buffer, &offset, len, &ok);
-    bc->metadata.maxTime = readNumber(buffer, &offset, len, &ok);
+    bc->metadata.minfunc = readNumber(buffer, &offset, len, &ok);
+    bc->metadata.maxfunc = readNumber(buffer, &offset, len, &ok);
+    flevel = cl_retflevel();
+    /* in 0.96 these 2 fields are unused / zero, in post 0.96 these mean
+     * min/max flevel.
+     * So 0 for min/max means no min/max
+     * Note that post 0.96 bytecode/bytecode lsig needs format 7, because
+     * 0.96 doesn't check lsig functionality level.
+     */
+    if ((bc->metadata.minfunc && bc->metadata.minfunc > flevel) ||
+        (bc->metadata.maxfunc && bc->metadata.maxfunc < flevel)) {
+      cli_dbgmsg("Skipping bytecode with (engine) functionality level %u-%u (current %u)\n",
+                 bc->metadata.minfunc, bc->metadata.maxfunc, flevel);
+      return CL_BREAK;
+    }
+    bc->metadata.maxresource = readNumber(buffer, &offset, len, &ok);
     bc->metadata.compiler = readString(buffer, &offset, len, &ok);
     bc->num_types = readNumber(buffer, &offset, len, &ok);
     bc->num_func = readNumber(buffer, &offset, len, &ok);
@@ -529,7 +582,7 @@ static int parseHeader(struct cli_bc *bc, unsigned char *buffer, unsigned *linel
 	return CL_EMALFDB;
     }
     offset++;
-    *linelength = strtol(buffer+offset, &pos, 10);
+    *linelength = strtol((const char*)buffer+offset, &pos, 10);
     if (*pos != '\0') {
 	cli_errmsg("Invalid number: %s\n", buffer+offset);
 	return CL_EMALFDB;
@@ -548,7 +601,7 @@ static int parseHeader(struct cli_bc *bc, unsigned char *buffer, unsigned *linel
     return CL_SUCCESS;
 }
 
-static int parseLSig(struct cli_bc *bc, unsigned char *buffer)
+static int parseLSig(struct cli_bc *bc, char *buffer)
 {
     const char *prefix;
     char *vnames, *vend = strchr(buffer, ';');
@@ -920,7 +973,7 @@ static int parseGlobals(struct cli_bc *bc, unsigned char *buffer)
 
 static int parseMD(struct cli_bc *bc, unsigned char *buffer)
 {
-    unsigned offset = 1, len = strlen(buffer);
+    unsigned offset = 1, len = strlen((const char*)buffer);
     unsigned numMD, i, b;
     char ok = 1;
     if (buffer[0] != 'D')
@@ -1227,8 +1280,11 @@ static int parseBB(struct cli_bc *bc, unsigned func, unsigned bb, unsigned char
 			break;
 		}
 	}
-	if (inst.opcode == OP_BC_STORE)
-	    inst.type = get_optype(bcfunc, inst.u.binop[0]);
+	if (inst.opcode == OP_BC_STORE) {
+	    int16_t t = get_optype(bcfunc, inst.u.binop[0]);
+	    if (t)
+		inst.type = t;
+	}
 	if (inst.opcode == OP_BC_COPY)
 	    inst.type = get_optype(bcfunc, inst.u.binop[1]);
 	if (!ok) {
@@ -1345,7 +1401,7 @@ int cli_bytecode_load(struct cli_bc *bc, FILE *f, struct cli_dbio *dbio, int tru
 	row++;
 	switch (state) {
 	    case PARSE_BC_LSIG:
-		rc = parseLSig(bc, (unsigned char*)buffer);
+		rc = parseLSig(bc, buffer);
 		if (rc == CL_BREAK) /* skip */ {
 		    bc->state = bc_skip;
 		    free(buffer);
@@ -1481,8 +1537,10 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
 	inst.u.ops.funcid = ctx->funcid;
 	inst.u.ops.ops = ctx->operands;
 	inst.u.ops.opsizes = ctx->opsizes;
+	cli_dbgmsg("Bytecode: executing in interpeter mode\n");
 	return cli_vm_execute(ctx->bc, ctx, &func, &inst);
     }
+    cli_dbgmsg("Bytecode: executing in JIT mode\n");
     return cli_vm_execute_jit(bcs, ctx, &bc->funcs[ctx->funcid]);
 }
 
@@ -1795,7 +1853,8 @@ static int cli_bytecode_prepare_interpreter(struct cli_bc *bc)
 		    MAPPTR(inst->u.unaryop);
 		    break;
 		case OP_BC_GEP1:
-		    if (bcfunc->types[inst->u.binop[1]]&0x8000) {
+		    if (inst->u.three[1]&0x80000000 ||
+			bcfunc->types[inst->u.binop[1]]&0x8000) {
                       cli_errmsg("bytecode: gep1 of alloca is not allowed\n");
                       return CL_EBYTECODE;
                     }
@@ -1807,7 +1866,8 @@ static int cli_bytecode_prepare_interpreter(struct cli_bc *bc)
                     break;
 		case OP_BC_GEPZ:
 		    /*three[0] is the type*/
-		    if (bcfunc->types[inst->u.three[1]]&0x8000)
+		    if (inst->u.three[1]&0x80000000 ||
+			bcfunc->types[inst->u.three[1]]&0x8000)
 			inst->interp_op = 5*(inst->interp_op/5);
 		    else
 			inst->interp_op = 5*(inst->interp_op/5)+3;
@@ -1856,10 +1916,12 @@ static int cli_bytecode_prepare_interpreter(struct cli_bc *bc)
 
 int cli_bytecode_prepare(struct cli_all_bc *bcs, unsigned dconfmask)
 {
-    unsigned i;
+    unsigned i, interp = 0;
     int rc;
-    if (cli_bytecode_prepare_jit(bcs) == CL_SUCCESS)
+    if (cli_bytecode_prepare_jit(bcs) == CL_SUCCESS) {
+	cli_dbgmsg("Bytecode: %u bytecode prepared with JIT\n", bcs->count);
 	return CL_SUCCESS;
+    }
     for (i=0;i<bcs->count;i++) {
 	struct cli_bc *bc = &bcs->all_bcs[i];
 	if (bc->state == bc_interp || bc->state == bc_jit)
@@ -1869,9 +1931,12 @@ int cli_bytecode_prepare(struct cli_all_bc *bcs, unsigned dconfmask)
 	    continue;
 	}
 	rc = cli_bytecode_prepare_interpreter(bc);
+	interp++;
 	if (rc != CL_SUCCESS)
 	    return rc;
     }
+    cli_dbgmsg("Bytecode: %u bytecode prepared with JIT, "
+	       "%u prepared with interpreter\n", bcs->count-interp, interp);
     return CL_SUCCESS;
 }
 
@@ -1911,6 +1976,7 @@ int cli_bytecode_runlsig(cli_ctx *cctx, const struct cli_all_bc *bcs, unsigned b
     memset(&ctx, 0, sizeof(ctx));
     cli_bytecode_context_setfuncid(&ctx, bc, 0);
     ctx.hooks.match_counts = lsigcnt;
+    ctx.hooks.match_offsets = lsigsuboff;
     cli_bytecode_context_setctx(&ctx, cctx);
     cli_bytecode_context_setfile(&ctx, map);
 
@@ -1939,6 +2005,7 @@ int cli_bytecode_runhook(cli_ctx *cctx, const struct cl_engine *engine, struct c
     const unsigned *hooks = engine->hooks[id - _BC_START_HOOKS];
     unsigned i, hooks_cnt = engine->hooks_cnt[id - _BC_START_HOOKS];
     int ret;
+    unsigned executed = 0;
 
     cli_bytecode_context_setfile(ctx, map);
     cli_dbgmsg("Bytecode executing hook id %u (%u hooks)\n", id, hooks_cnt);
@@ -1952,9 +2019,10 @@ int cli_bytecode_runhook(cli_ctx *cctx, const struct cl_engine *engine, struct c
 	}
 	cli_bytecode_context_setfuncid(ctx, bc, 0);
 	ret = cli_bytecode_run(&engine->bcs, bc, ctx);
+	executed++;
 	if (ret != CL_SUCCESS) {
 	    cli_warnmsg("Bytecode failed to run: %s\n", cl_strerror(ret));
-	    return CL_SUCCESS;
+	    continue;
 	}
 	if (ctx->virname) {
 	    cli_dbgmsg("Bytecode found virus: %s\n", ctx->virname);
@@ -1969,7 +2037,7 @@ int cli_bytecode_runhook(cli_ctx *cctx, const struct cl_engine *engine, struct c
 	if (!ret) {
 	    char *tempfile;
 	    int fd = cli_bytecode_context_getresult_file(ctx, &tempfile);
-	    if (fd != -1) {
+	    if (fd && fd != -1) {
 		if (cctx && cctx->engine->keeptmp)
 		    cli_dbgmsg("Bytecode %u unpacked file saved in %s\n",
 			       bc->id, tempfile);
@@ -1980,10 +2048,10 @@ int cli_bytecode_runhook(cli_ctx *cctx, const struct cl_engine *engine, struct c
 		ret = cli_magic_scandesc(fd, cctx);
 		if (!cctx || !cctx->engine->keeptmp)
 		    if (ftruncate(fd, 0) == -1)
-			cli_dbgmsg("ftruncate failed\n");
+			cli_dbgmsg("ftruncate failed on %d\n", fd);
 		close(fd);
 		if (!cctx || !cctx->engine->keeptmp) {
-		    if (cli_unlink(tempfile))
+		    if (tempfile && cli_unlink(tempfile))
 			ret = CL_EUNLINK;
 		}
 		free(tempfile);
@@ -1999,6 +2067,10 @@ int cli_bytecode_runhook(cli_ctx *cctx, const struct cl_engine *engine, struct c
 	}
 	cli_bytecode_context_reset(ctx);
     }
+    if (executed)
+	cli_dbgmsg("Bytecode: executed %u bytecodes for this hook\n", executed);
+    else
+	cli_dbgmsg("Bytecode: no logical signature matched, no bytecode executed\n");
     return CL_CLEAN;
 }
 
@@ -2029,7 +2101,7 @@ void cli_bytecode_describe(const struct cli_bc *bc)
     }
 
     stamp = bc->metadata.timestamp;
-    printf("Bytecode format functionality level: %u\n", BC_FUNC_LEVEL);
+    printf("Bytecode format functionality level: %u\n", bc->metadata.formatlevel);
     printf("Bytecode metadata:\n\tcompiler version: %s\n",
 	   bc->metadata.compiler ? bc->metadata.compiler : "N/A");
     printf("\tcompiled on: %s",
@@ -2053,6 +2125,9 @@ void cli_bytecode_describe(const struct cli_bc *bc)
 	    printf("Unknown (type %u)", bc->kind);
 	    break;
     }
+    /* 0 means no limit */
+    printf("\tbytecode functionality level: %u - %u\n",
+	   bc->metadata.minfunc, bc->metadata.maxfunc);
     printf("\tbytecode logical signature: %s\n",
 	       bc->lsig ? bc->lsig : "<none>");
     printf("\tvirusname prefix: %s\n",
diff --git a/libclamav/bytecode.h b/libclamav/bytecode.h
index 80e242a..31ef0df 100644
--- a/libclamav/bytecode.h
+++ b/libclamav/bytecode.h
@@ -123,6 +123,7 @@ int bytecode_init(void);
 void cli_bytecode_debug(int argc, char **argv);
 void cli_bytecode_printversion(void);
 void cli_bytecode_debug_printsrc(const struct cli_bc_ctx *ctx);
+void cli_printcxxver(void);
 
 typedef void (*bc_dbg_callback_trace)(struct cli_bc_ctx*, unsigned event);
 typedef void (*bc_dbg_callback_trace_op)(struct cli_bc_ctx*, const char *op);
diff --git a/libclamav/bytecode_api.c b/libclamav/bytecode_api.c
index f71aef8..ce72493 100644
--- a/libclamav/bytecode_api.c
+++ b/libclamav/bytecode_api.c
@@ -31,6 +31,8 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <string.h>
+#include <math.h>
+#include <ctype.h>
 #include "cltypes.h"
 #include "clambc.h"
 #include "bytecode.h"
@@ -43,6 +45,9 @@
 #include "disasm.h"
 #include "scanners.h"
 #include "jsparse/js-norm.h"
+#include "hashtab.h"
+#include "str.h"
+#include "filetypes.h"
 
 uint32_t cli_bcapi_test1(struct cli_bc_ctx *ctx, uint32_t a, uint32_t b)
 {
@@ -111,8 +116,9 @@ uint32_t cli_bcapi_debug_print_str(struct cli_bc_ctx *ctx, const uint8_t *str, u
 
 uint32_t cli_bcapi_debug_print_uint(struct cli_bc_ctx *ctx, uint32_t a)
 {
-    cli_dbgmsg("bytecode debug: %u\n", a);
-    return 0;
+    if (!cli_debug_flag)
+	return 0;
+    return fprintf(stderr, "%d", a);
 }
 
 /*TODO: compiler should make sure that only constants are passed here, and not
@@ -120,15 +126,15 @@ uint32_t cli_bcapi_debug_print_uint(struct cli_bc_ctx *ctx, uint32_t a)
  * executing */
 uint32_t cli_bcapi_setvirusname(struct cli_bc_ctx* ctx, const uint8_t *name, uint32_t len)
 {
-    ctx->virname = name;
+    ctx->virname = (const char*)name;
     return 0;
 }
 
 uint32_t cli_bcapi_disasm_x86(struct cli_bc_ctx *ctx, struct DISASM_RESULT *res, uint32_t len)
 {
     int n;
-    const char *buf;
-    const char* next;
+    const unsigned char *buf;
+    const unsigned char* next;
     if (!res || !ctx->fmap || ctx->off >= ctx->fmap->len)
 	return -1;
     /* 32 should be longest instr we support decoding.
@@ -262,7 +268,7 @@ uint32_t cli_bcapi_trace_value(struct cli_bc_ctx *ctx, const uint8_t* name, uint
 	ctx->trace(ctx, trace_param);
     }
     if (ctx->trace_val && name)
-	ctx->trace_val(ctx, name, value);
+	ctx->trace_val(ctx, (const char*)name, value);
     return 0;
 }
 
@@ -283,7 +289,7 @@ uint32_t cli_bcapi_trace_ptr(struct cli_bc_ctx *ctx, const uint8_t* ptr, uint32_
 uint32_t cli_bcapi_pe_rawaddr(struct cli_bc_ctx *ctx, uint32_t rva)
 {
   uint32_t ret;
-  int err = 0;
+  unsigned err = 0;
   const struct cli_pe_hook_data *pe = ctx->hooks.pedata;
   ret = cli_rawaddr(rva, ctx->sections, pe->nsections, &err,
 		    ctx->file_size, pe->hdr_size);
@@ -321,18 +327,34 @@ static inline const char* cli_memmem(const char *haystack, unsigned hlen,
 
 int32_t cli_bcapi_file_find(struct cli_bc_ctx *ctx, const uint8_t* data, uint32_t len)
 {
+    fmap_t *map = ctx->fmap;
+    if (!map || len <= 0) {
+	cli_dbgmsg("bcapi_file_find preconditions not met\n");
+	return -1;
+    }
+    return cli_bcapi_file_find_limit(ctx, data, len, map->len);
+}
+
+int32_t cli_bcapi_file_find_limit(struct cli_bc_ctx *ctx , const uint8_t* data, uint32_t len, int32_t limit)
+{
     char buf[4096];
     fmap_t *map = ctx->fmap;
-    uint32_t off = ctx->off, newoff;
+    uint32_t off = ctx->off;
     int n;
 
-    if (!map || len > sizeof(buf)/4 || len <= 0) {
-	cli_dbgmsg("bcapi_file_find preconditions not met\n");
+    if (!map || len > sizeof(buf)/4 || len <= 0 || limit <= 0) {
+	cli_dbgmsg("bcapi_file_find_limit preconditions not met\n");
 	return -1;
     }
     for (;;) {
 	const char *p;
-	n = fmap_readn(map, buf, off, sizeof(buf));
+	int32_t readlen = sizeof(buf);
+	if (off + readlen > limit) {
+	    readlen = limit - off;
+	    if (readlen < 0)
+		return -1;
+	}
+	n = fmap_readn(map, buf, off, readlen);
 	if ((unsigned)n < len || n < 0)
 	    return -1;
 	p = cli_memmem(buf, n, data, len);
@@ -421,7 +443,7 @@ int32_t cli_bcapi_fill_buffer(struct cli_bc_ctx *ctx, uint8_t* buf,
 int32_t cli_bcapi_extract_new(struct cli_bc_ctx *ctx, int32_t id)
 {
     cli_ctx *cctx;
-    int res;
+    int res = -1;
     cli_dbgmsg("previous tempfile had %u bytes\n", ctx->written);
     if (!ctx->written)
 	return 0;
@@ -432,7 +454,11 @@ int32_t cli_bcapi_extract_new(struct cli_bc_ctx *ctx, int32_t id)
     cli_dbgmsg("bytecode: scanning extracted file %s\n", ctx->tempfile);
     cctx = (cli_ctx*)ctx->ctx;
     if (cctx) {
+	cli_file_t current = cctx->container_type;
+	if (ctx->containertype != CL_TYPE_ANY)
+	    cctx->container_type = ctx->containertype;
 	res = cli_magic_scandesc(ctx->outfd, cctx);
+	cctx->container_type = current;
 	if (res == CL_VIRUS)
 	    ctx->found = 1;
     }
@@ -453,7 +479,6 @@ int32_t cli_bcapi_extract_new(struct cli_bc_ctx *ctx, int32_t id)
 #define BUF 16
 int32_t cli_bcapi_read_number(struct cli_bc_ctx *ctx, uint32_t radix)
 {
-    unsigned char number[16];
     unsigned i;
     char *p;
     int32_t result;
@@ -517,7 +542,7 @@ int32_t cli_bcapi_hashset_contains(struct cli_bc_ctx *ctx , int32_t id, uint32_t
 {
     struct cli_hashset *s = get_hashset(ctx, id);
     if (!s)
-	return 0;
+	return -1;
     return cli_hashset_contains(s, key);
 }
 
@@ -533,6 +558,17 @@ int32_t cli_bcapi_hashset_done(struct cli_bc_ctx *ctx , int32_t id)
     if (!s)
 	return -1;
     cli_hashset_destroy(s);
+    if (id == ctx->nhashsets-1) {
+	ctx->nhashsets--;
+	if (!ctx->nhashsets) {
+	    free(ctx->hashsets);
+	    ctx->hashsets = NULL;
+	} else {
+	    s = cli_realloc(ctx->hashsets, ctx->nhashsets*sizeof(*s));
+	    if (s)
+		ctx->hashsets = s;
+	}
+    }
     return 0;
 }
 
@@ -603,11 +639,11 @@ uint32_t cli_bcapi_buffer_pipe_read_avail(struct cli_bc_ctx *ctx , int32_t id)
 	    return 0;
 	return b->write_cursor - b->read_cursor;
     }
-    if (!ctx->fmap || ctx->off >= ctx->file_size)
+    if (!ctx->fmap || b->read_cursor >= ctx->file_size)
 	return 0;
-    if (ctx->off + BUFSIZ <= ctx->file_size)
+    if (b->read_cursor + BUFSIZ <= ctx->file_size)
 	return BUFSIZ;
-    return ctx->file_size - ctx->off;
+    return ctx->file_size - b->read_cursor;
 }
 
 uint8_t* cli_bcapi_buffer_pipe_read_get(struct cli_bc_ctx *ctx , int32_t id, uint32_t size)
@@ -864,7 +900,7 @@ static struct bc_jsnorm *get_jsnorm(struct cli_bc_ctx *ctx, int32_t id)
 int32_t cli_bcapi_jsnorm_process(struct cli_bc_ctx *ctx, int32_t id)
 {
     unsigned avail;
-    char *in;
+    unsigned char *in;
     cli_ctx *cctx = ctx->ctx;
     struct bc_jsnorm *b = get_jsnorm(ctx, id);
     if (!b || b->from == -1 || !b->state)
@@ -877,7 +913,7 @@ int32_t cli_bcapi_jsnorm_process(struct cli_bc_ctx *ctx, int32_t id)
     if (cctx && cli_checklimits("bytecode js api", cctx, ctx->jsnormwritten + avail, 0, 0))
 	return -1;
     cli_bcapi_buffer_pipe_read_stopped(ctx, b->from, avail);
-    cli_js_process_buffer(b->state, in, avail);
+    cli_js_process_buffer(b->state, (char*)in, avail);
     return 0;
 }
 
@@ -895,3 +931,287 @@ int32_t cli_bcapi_jsnorm_done(struct cli_bc_ctx *ctx , int32_t id)
     b->from = -1;
     return 0;
 }
+
+static inline double myround(double a)
+{
+    if (a < 0)
+	return a-0.5;
+    return a+0.5;
+}
+
+int32_t cli_bcapi_ilog2(struct cli_bc_ctx *ctx, uint32_t a, uint32_t b)
+{
+    double f;
+    if (!b)
+	return 0x7fffffff;
+    /* log(a/b) is -32..32, so 2^26*32=2^31 covers the entire range of int32 */
+    f = (1<<26)*log((double)a / b) / log(2);
+    return (int32_t)myround(f);
+}
+
+int32_t cli_bcapi_ipow(struct cli_bc_ctx *ctx, int32_t a, int32_t b, int32_t c)
+{
+    if (!a && b < 0)
+	return 0x7fffffff;
+    return (int32_t)myround(c*pow(a,b));
+}
+
+uint32_t cli_bcapi_iexp(struct cli_bc_ctx *ctx, int32_t a, int32_t b, int32_t c)
+{
+    double f;
+    if (!b)
+	return 0x7fffffff;
+    f= c*exp((double)a/b);
+    return (uint32_t)myround(f);
+}
+
+int32_t cli_bcapi_isin(struct cli_bc_ctx *ctx, int32_t a, int32_t b, int32_t c)
+{
+    double f;
+    if (!b)
+	return 0x7fffffff;
+    f = c*sin((double)a/b);
+    return (int32_t)myround(f);
+}
+
+int32_t cli_bcapi_icos(struct cli_bc_ctx *ctx, int32_t a, int32_t b, int32_t c)
+{
+    double f;
+    if (!b)
+	return 0x7fffffff;
+    f = c*cos((double)a/b);
+    return (int32_t)myround(f);
+}
+
+int32_t cli_bcapi_memstr(struct cli_bc_ctx *ctx, const uint8_t* h, int32_t hs,
+			 const uint8_t*n, int32_t ns)
+{
+    const uint8_t *s;
+    if (!h || !n || hs < 0 || ns < 0)
+	return -1;
+    s = cli_memstr(h, hs, n, ns);
+    if (!s)
+	return -1;
+    return s - h;
+}
+
+int32_t cli_bcapi_hex2ui(struct cli_bc_ctx *ctx, uint32_t ah, uint32_t bh)
+{
+    uint8_t result = 0;
+    unsigned char in[2];
+    in[0] = ah;
+    in[1] = bh;
+
+    if (cli_hex2str_to(in, &result, 2) == -1)
+	return -1;
+    return result;
+}
+
+int32_t cli_bcapi_atoi(struct cli_bc_ctx *ctx, const uint8_t* str, int32_t len)
+{
+    int32_t number = 0;
+    const uint8_t *end = str + len;
+    while (isspace(*str) && str < end) str++;
+    if (str == end)
+	return -1;/* all spaces */
+    if (*str == '+') str++;
+    if (str == end)
+	return -1;/* all spaces and +*/
+    if (*str == '-')
+	return -1;/* only positive numbers */
+    if (!isdigit(*str))
+	return -1;
+    while (isdigit(*str) && str < end) {
+	number = number*10 + (*str - '0');
+    }
+    return number;
+}
+
+uint32_t cli_bcapi_debug_print_str_start(struct cli_bc_ctx *ctx , const uint8_t* s, uint32_t len)
+{
+    if (!s || len <= 0)
+	return -1;
+    cli_dbgmsg("bytecode debug: %.*s", len, s);
+    return 0;
+}
+
+uint32_t cli_bcapi_debug_print_str_nonl(struct cli_bc_ctx *ctx , const uint8_t* s, uint32_t len)
+{
+    if (!s || len <= 0)
+	return -1;
+    if (!cli_debug_flag)
+	return 0;
+    return fwrite(s, 1, len, stderr);
+}
+
+uint32_t cli_bcapi_entropy_buffer(struct cli_bc_ctx *ctx , uint8_t* s, int32_t len)
+{
+    uint32_t probTable[256];
+    unsigned i;
+    double entropy = 0;
+    double log2 = log(2);
+
+    if (!s || len <= 0)
+	return -1;
+    memset(probTable, 0, sizeof(probTable));
+    for (i=0;i<len;i++) {
+	probTable[s[i]]++;
+    }
+    for (i=0;i<256;i++) {
+	double p;
+	if (!probTable[i])
+	    continue;
+	p = (double)probTable[i] / len;
+	entropy += -p*log(p)/log2;
+    }
+    entropy *= 1<<26;
+    return (uint32_t)entropy;
+}
+
+int32_t cli_bcapi_map_new(struct cli_bc_ctx *ctx, int32_t keysize, int32_t valuesize)
+{
+    unsigned n = ctx->nmaps+1;
+    struct cli_map *s;
+    if (!keysize)
+	return -1;
+    s = cli_realloc(ctx->maps, sizeof(*ctx->maps)*n);
+    if (!s)
+	return -1;
+    ctx->maps = s;
+    ctx->nmaps = n;
+    s = &s[n-1];
+    cli_map_init(s, keysize, valuesize, 16);
+    return n-1;
+}
+
+static struct cli_map *get_hashtab(struct cli_bc_ctx *ctx, int32_t id)
+{
+    if (id < 0 || id >= ctx->nmaps || !ctx->maps)
+	return NULL;
+    return &ctx->maps[id];
+}
+
+int32_t cli_bcapi_map_addkey(struct cli_bc_ctx *ctx , const uint8_t* key, int32_t keysize, int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    return cli_map_addkey(s, key, keysize);
+}
+
+int32_t cli_bcapi_map_setvalue(struct cli_bc_ctx *ctx, const uint8_t* value, int32_t valuesize, int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    return cli_map_setvalue(s, value, valuesize);
+}
+
+int32_t cli_bcapi_map_remove(struct cli_bc_ctx *ctx , const uint8_t* key, int32_t keysize, int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    return cli_map_removekey(s, key, keysize);
+}
+
+int32_t cli_bcapi_map_find(struct cli_bc_ctx *ctx , const uint8_t* key, int32_t keysize, int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    return cli_map_find(s, key, keysize);
+}
+
+int32_t cli_bcapi_map_getvaluesize(struct cli_bc_ctx *ctx, int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    return cli_map_getvalue_size(s);
+}
+
+uint8_t* cli_bcapi_map_getvalue(struct cli_bc_ctx *ctx , int32_t id, int32_t valuesize)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return NULL;
+    if (cli_map_getvalue_size(s) != valuesize)
+	return NULL;
+    return cli_map_getvalue(s);
+}
+
+int32_t cli_bcapi_map_done(struct cli_bc_ctx *ctx , int32_t id)
+{
+    struct cli_map *s = get_hashtab(ctx, id);
+    if (!s)
+	return -1;
+    cli_map_delete(s);
+    if (id == ctx->nmaps-1) {
+	ctx->nmaps--;
+	if (!ctx->nmaps) {
+	    free(ctx->maps);
+	    ctx->maps = NULL;
+	} else {
+	    s = cli_realloc(ctx->maps, ctx->nmaps*(sizeof(*s)));
+	    if (s)
+		ctx->maps = s;
+	}
+    }
+    return 0;
+}
+
+uint32_t cli_bcapi_engine_functionality_level(struct cli_bc_ctx *ctx)
+{
+    return cl_retflevel();
+}
+
+uint32_t cli_bcapi_engine_dconf_level(struct cli_bc_ctx *ctx)
+{
+    return CL_FLEVEL_DCONF;
+}
+
+uint32_t cli_bcapi_engine_scan_options(struct cli_bc_ctx *ctx)
+{
+    cli_ctx *cctx = (cli_ctx*)ctx->ctx;
+    return cctx->options;
+}
+
+uint32_t cli_bcapi_engine_db_options(struct cli_bc_ctx *ctx)
+{
+    cli_ctx *cctx = (cli_ctx*)ctx->ctx;
+    return cctx->engine->dboptions;
+}
+
+int32_t cli_bcapi_extract_set_container(struct cli_bc_ctx *ctx, uint32_t ftype)
+{
+    if (ftype > CL_TYPE_IGNORED)
+	return -1;
+    ctx->containertype = ftype;
+    return 0;
+}
+
+int32_t cli_bcapi_input_switch(struct cli_bc_ctx *ctx , int32_t extracted_file)
+{
+    fmap_t *map;
+    if (ctx->extracted_file_input == extracted_file)
+	return 0;
+    if (!extracted_file) {
+	cli_dbgmsg("bytecode api: input switched back to main file\n");
+	ctx->fmap = ctx->save_map;
+	ctx->extracted_file_input = 0;
+	return 0;
+    }
+    if (ctx->outfd < 0)
+	return -1;
+    map = fmap(ctx->outfd, 0, 0);
+    if (!map) {
+	cli_warnmsg("can't mmap() extracted temporary file %s\n", ctx->tempfile);
+	return -1;
+    }
+    ctx->save_map = ctx->fmap;
+    cli_bytecode_context_setfile(ctx, map);
+    ctx->extracted_file_input = 1;
+    cli_dbgmsg("bytecode api: input switched to extracted file\n");
+    return 0;
+}
diff --git a/libclamav/bytecode_api.h b/libclamav/bytecode_api.h
index 1fc2d5b..d4a6c31 100644
--- a/libclamav/bytecode_api.h
+++ b/libclamav/bytecode_api.h
@@ -52,16 +52,30 @@ enum BytecodeKind {
     _BC_LAST_HOOK
 };
 
-enum { PE_INVALID_RVA = 0xFFFFFFFF };
+static const unsigned  PE_INVALID_RVA = 0xFFFFFFFF ;
+
+/** LibClamAV functionality level constants */
+enum FunctionalityLevels {
+    FUNC_LEVEL_096 = 51,
+    FUNC_LEVEL_096_dev
+};
 
 #ifdef __CLAMBC__
 
+/* --------------- BEGIN GLOBALS -------------------------------------------- */
 /** @brief Logical signature match counts
  *
  *  This is a low-level variable, use the Macros in bytecode_local.h instead to
  *  access it.
  * */
 extern const uint32_t __clambc_match_counts[64];
+
+/** @brief Logical signature match offsets
+  * This is a low-level variable, use the Macros in bytecode_local.h instead to
+  * access it.
+  */
+extern const uint32_t __clambc_match_offsets[64];
+
 /** PE data, if this is a PE hook */
 extern const struct cli_pe_hook_data __clambc_pedata;
 /** File size (max 4G) */
@@ -69,8 +83,15 @@ extern const uint32_t __clambc_filesize[1];
 
 /** Kind of the bytecode */
 const uint16_t __clambc_kind;
+/* ---------------- END GLOBALS --------------------------------------------- */
 
-uint32_t test1(uint32_t, uint32_t);
+/* ---------------- BEGIN 0.96 APIs (don't touch) --------------------------- */
+/** Test api. 
+  @param a 0xf00dbeef
+  @param b 0xbeeff00d
+  @return 0x12345678 if parameters match, 0x55 otherwise
+*/
+uint32_t test1(uint32_t a, uint32_t b);
 
 /**
  * @brief Reads specified amount of bytes from the current file
@@ -82,7 +103,6 @@ uint32_t test1(uint32_t, uint32_t);
  */
 int32_t read(uint8_t *data, int32_t size);
 
-
 enum {
     /**set file position to specified absolute position */
     SEEK_SET=0,
@@ -132,6 +152,7 @@ uint32_t debug_print_str(const uint8_t *str, uint32_t len);
 
 /**
  * Prints a number as a debug message.
+ * This is like \p debug_print_str_nonl!
  *
  * @param[in] a number to print
  * @return 0
@@ -188,6 +209,9 @@ int32_t file_byteat(uint32_t offset);
   @return pointer to allocated memory */
 void* malloc(uint32_t size);
 
+/** Test api2.
+  * @param a 0xf00d
+  * @return 0xd00f if parameter matches, 0x5555 otherwise */
 uint32_t test2(uint32_t a);
 
 /** Gets information about the specified PE section.
@@ -206,7 +230,8 @@ int32_t get_pe_section(struct cli_exe_section *section, uint32_t num);
  *          number bytes available in buffer (starting from 0)
  * The character at the cursor will be at position 0 after this call.
  */
-int32_t fill_buffer(uint8_t* buffer, uint32_t len, uint32_t filled, uint32_t cur, uint32_t fill);
+int32_t fill_buffer(uint8_t* buffer, uint32_t len, uint32_t filled,
+                    uint32_t cursor, uint32_t fill);
 
 /**
  * Prepares for extracting a new file, if we've already extracted one it scans
@@ -224,32 +249,407 @@ int32_t extract_new(int32_t id);
   */
 int32_t read_number(uint32_t radix);
 
+/**
+  * Creates a new hashset and returns its id.
+  * @return ID for new hashset */
 int32_t hashset_new(void);
+
+/**
+  * Add a new 32-bit key to the hashset.
+  * @param hs ID of hashset (from hashset_new)
+  * @param key the key to add
+  * @return 0 on success */
 int32_t hashset_add(int32_t hs, uint32_t key);
+
+/**
+  * Remove a 32-bit key from the hashset.
+  * @param hs ID of hashset (from hashset_new)
+  * @param key the key to add
+  * @return 0 on success */
 int32_t hashset_remove(int32_t hs, uint32_t key);
+
+/**
+  * Returns whether the hashset contains the specified key.
+  * @param hs ID of hashset (from hashset_new)
+  * @param key the key to lookup
+  * @return 1 if found, 0 if not found, <0 on invalid hashset ID */
 int32_t hashset_contains(int32_t hs, uint32_t key);
+
+/**
+  * Deallocates the memory used by the specified hashset.
+  * Trying to use the hashset after this will result in an error.
+  * The hashset may not be used after this.
+  * All hashsets are automatically deallocated when bytecode
+  * finishes execution.
+  * @param id ID of hashset (from hashset_new)
+  * @return 0 on success */
 int32_t hashset_done(int32_t id);
+
+/**
+  * Returns whether the hashset is empty.
+  * @param id of hashset (from hashset_new)
+  * @return 0 on success */
 int32_t hashset_empty(int32_t id);
 
+/**
+  * Creates a new pipe with the specified buffer size
+  * @param size size of buffer
+  * @return ID of newly created buffer_pipe */
 int32_t  buffer_pipe_new(uint32_t size);
+
+/**
+  * Same as buffer_pipe_new, except the pipe's input is tied
+  * to the current file, at the specified position.
+  * @param pos starting position of pipe input in current file
+  * @return ID of newly created buffer_pipe */
 int32_t  buffer_pipe_new_fromfile(uint32_t pos);
+
+/**
+  * Returns the amount of bytes available to read.
+  * @param id ID of buffer_pipe
+  * @return amount of bytes available to read */
 uint32_t buffer_pipe_read_avail(int32_t id);
+
+/**
+  * Returns a pointer to the buffer for reading.
+  * The 'amount' parameter should be obtained by a call to
+  * buffer_pipe_read_avail().
+  * @param id ID of buffer_pipe
+  * @param amount to read
+  * @return pointer to buffer, or NULL if buffer has less than
+  specified amount */
 uint8_t *buffer_pipe_read_get(int32_t id, uint32_t amount);
+
+/**
+  * Updates read cursor in buffer_pipe.
+  * @param id ID of buffer_pipe
+  * @param amount amount of bytes to move read cursor
+  * @return 0 on success */
 int32_t  buffer_pipe_read_stopped(int32_t id, uint32_t amount);
+
+/**
+  * Returns the amount of bytes available for writing.
+  * @param id ID of buffer_pipe
+  * @return amount of bytes available for writing */
 uint32_t buffer_pipe_write_avail(int32_t id);
+
+/**
+  * Returns pointer to writable buffer.
+  * The 'amount' parameter should be obtained by a call to
+  * buffer_pipe_write_avail().
+  * @param id ID of buffer_pipe
+  * @param size amount of bytes to write
+  * @return pointer to write buffer, or NULL if requested amount
+  is more than what is available in the buffer */
 uint8_t *buffer_pipe_write_get(int32_t id, uint32_t size);
+
+/**
+  * Updates the write cursor in buffer_pipe.
+  * @param id ID of buffer_pipe
+  * @param amount amount of bytes to move write cursor
+  * @return 0 on success */
 int32_t  buffer_pipe_write_stopped(int32_t id, uint32_t amount);
+
+/**
+  * Deallocate memory used by buffer.
+  * After this all attempts to use this buffer will result in error.
+  * All buffer_pipes are automatically deallocated when bytecode
+  * finishes execution.
+  * @param id ID of buffer_pipe
+  * @return 0 on success */
 int32_t  buffer_pipe_done(int32_t id);
 
+/**
+  * Initializes inflate data structures for decompressing data
+  * 'from_buffer' and writing uncompressed uncompressed data 'to_buffer'.
+  * @param from_buffer ID of buffer_pipe to read compressed data from
+  * @param to_buffer ID of buffer_pipe to write decompressed data to
+  * @param windowBits (see zlib documentation)
+  * @return ID of newly created inflate data structure, <0 on failure */
 int32_t inflate_init(int32_t from_buffer, int32_t to_buffer, int32_t windowBits);
+
+/**
+  * Inflate all available data in the input buffer, and write to output buffer.
+  * Stops when the input buffer becomes empty, or write buffer becomes full.
+  * Also attempts to recover from corrupted inflate stream (via inflateSync).
+  * This function can be called repeatedly on success after filling the input
+  * buffer, and flushing the output buffer.
+  * The inflate stream is done processing when 0 bytes are available from output
+  * buffer, and input buffer is not empty.
+  * @param id ID of inflate data structure
+  * @return 0 on success, zlib error code otherwise */
 int32_t inflate_process(int32_t id);
+
+/**
+  * Deallocates inflate data structure.
+  * Using the inflate data structure after this will result in an error.
+  * All inflate data structures are automatically deallocated when bytecode
+  * finishes execution.
+  * @param id ID of inflate data structure
+  * @return 0 on success.*/
 int32_t inflate_done(int32_t id);
 
+/** 
+  * Report a runtime error at the specified locationID.
+  * @param locationid (line << 8) | (column&0xff)
+  * @return 0 */
 int32_t bytecode_rt_error(int32_t locationid);
 
+/**
+  * Initializes JS normalizer for reading 'from_buffer'.
+  * Normalized JS will be written to a single tempfile,
+  * one normalized JS per line, and automatically scanned 
+  * when the bytecode finishes execution. 
+  * @param from_buffer ID of buffer_pipe to read javascript from
+  * @return ID of JS normalizer, <0 on failure */
 int32_t jsnorm_init(int32_t from_buffer);
+
+/**
+  * Normalize all javascript from the input buffer, and write to tempfile.
+  * You can call this function repeatedly on success, if you (re)fill the input
+  * buffer.
+  * @param id ID of JS normalizer
+  * @return 0 on success, <0 on failure */
 int32_t jsnorm_process(int32_t id);
+
+/**
+  * Flushes JS normalizer.
+  * @param id ID of js normalizer to flush */
 int32_t jsnorm_done(int32_t id);
 
+/* ---------------- END 0.96 APIs (don't touch) --------------------------- */
+/* ---------------- BEGIN 0.96.1 APIs ------------------------------------- */
+
+/** --------------- math -----------------*/
+
+/**
+  *  Returns 2^26*log2(a/b)
+  * @param a input 
+  * @param b input
+  * @return 2^26*log2(a/b)
+  */
+int32_t ilog2(uint32_t a, uint32_t b);
+
+/**
+  * Returns c*a^b.
+  * @param a integer
+  * @param b integer
+  * @param c integer
+  * @return c*pow(a,b)
+  */
+int32_t ipow(int32_t a, int32_t b, int32_t c);
+
+/**
+  * Returns exp(a/b)*c
+  * @param a integer
+  * @param b integer
+  * @param c integer
+  * @return c*exp(a/b)
+  */
+uint32_t iexp(int32_t a, int32_t b, int32_t c);
+
+/**
+  * Returns c*sin(a/b).
+  * @param a integer
+  * @param b integer
+  * @param c integer
+  * @return c*sin(a/b)
+  */
+int32_t isin(int32_t a, int32_t b, int32_t c);
+
+/**
+  * Returns c*cos(a/b).
+  * @param a integer
+  * @param b integer
+  * @param c integer
+  * @return c*sin(a/b)
+  */
+int32_t icos(int32_t a, int32_t b, int32_t c);
+
+/** --------------- string operations -----------------*/
+/**
+  * Return position of match, -1 otherwise.
+  * @param haystack buffer to search
+  * @param haysize size of \p haystack
+  * @param needle substring to search
+  * @param needlesize size of needle
+  * @return location of match, -1 otherwise
+  */
+int32_t memstr(const uint8_t* haystack, int32_t haysize,
+               const uint8_t* needle, int32_t needlesize);
+
+/**
+  * Returns hexadecimal characters \p hex1 and \p hex2 converted to 8-bit
+  * number.
+  * @param hex1 hexadecimal character
+  * @param hex2 hexadecimal character
+  * @return hex1 hex2 converted to 8-bit integer, -1 on error
+  */
+int32_t hex2ui(uint32_t hex1, uint32_t hex2);
+
+/**
+  * Converts string to positive number.
+  * @param str buffer
+  * @param size size of \p str
+  * @return >0 string converted to number if possible, -1 on error
+  */
+int32_t atoi(const uint8_t* str, int32_t size);
+
+/**
+  * Prints a debug message with a trailing newline,
+  * but preceded by 'LibClamAV debug'.
+  * @param str the string
+  * @param len length of \p str
+  * @return 0
+  */
+uint32_t debug_print_str_start(const uint8_t *str, uint32_t len);
+
+/**
+  * Prints a debug message with a trailing newline,
+  * and not preceded by 'LibClamAV debug'.
+  * @param str the string
+  * @param len length of \p str
+  * @return 0
+  */
+uint32_t debug_print_str_nonl(const uint8_t *str, uint32_t len);
+
+/**
+  * Returns an approximation for the entropy of \p buffer.
+  * @param buffer input buffer
+  * @param size size of buffer
+  * @return entropy estimation * 2^26
+  */
+uint32_t entropy_buffer(uint8_t* buffer, int32_t size);
+
+/* ------------------ data structures -------------------- */
+/**
+  * Creates a new map and returns its id.
+  * @param keysize size of key
+  * @param valuesize size of value, if 0 then value is allocated separately
+  * @return ID of new map */
+int32_t map_new(int32_t keysize, int32_t valuesize);
+
+/**
+  * Inserts the specified key/value pair into the map.
+  * @param id id of table
+  * @param key key
+  * @param ksize size of \p key
+  * @return 0 - if key existed before
+            1 - if key didn't exist before
+           <0 - if ksize doesn't match keysize specified at table creation
+  */
+int32_t map_addkey(const uint8_t *key, int32_t ksize, int32_t id);
+
+/**
+  * Sets the value for the last inserted key with map_addkey.
+  * @param id id of table
+  * @param value value
+  * @param vsize size of \p value
+  * @return 0 - if update was successful
+           <0 - if there is no last key
+  */
+int32_t map_setvalue(const uint8_t *value, int32_t vsize, int32_t id);
+
+/**
+  * Remove an element from the map.
+  * @param id id of map
+  * @param key key
+  * @param ksize size of key
+  * @return 0 on success, key was present
+            1 if key was not present
+           <0 if ksize doesn't match keysize specified at table creation
+  */
+int32_t map_remove(const uint8_t* key, int32_t ksize, int32_t id);
+
+/**
+  * Looks up key in map. 
+  * The map remember the last looked up key (so you can retrieve the
+  * value).
+  * 
+  * @param id id of map
+  * @param key key
+  * @param ksize size of key
+  * @return 0 - if not found
+            1 - if found
+           <0 - if ksize doesn't match the size specified at table creation
+  */
+int32_t map_find(const uint8_t* key, int32_t ksize, int32_t id);
+
+/**
+  * Returns the size of value obtained during last map_find.
+  * @param id id of map.
+  * @return size of value
+  */
+int32_t map_getvaluesize(int32_t id);
+
+/**
+  * Returns the value obtained during last map_find.
+  * @param id id of map.
+  * @param size size of value (obtained from map_getvaluesize)
+  * @return value
+  */
+uint8_t* map_getvalue(int32_t id, int32_t size);
+
+/**
+  * Deallocates the memory used by the specified map.
+  * Trying to use the map after this will result in an error.
+  * All maps are automatically deallocated when the bytecode finishes
+  * execution.
+  */
+int32_t map_done(int32_t id);
+
+/** -------------- file operations --------------------- */
+/** Looks for the specified sequence of bytes in the current file, up to the
+ * specified position.
+ * @param[in] data the sequence of bytes to look for
+ * @param len length of \p data, cannot be more than 1024
+ * @param maxpos maximum position to look for a match, 
+ * note that this is 1 byte after the end of last possible match:
+ * match_pos + \p len < \p maxpos
+ * @return offset in the current file if match is found, -1 otherwise */
+int32_t file_find_limit(const uint8_t *data, uint32_t len, int32_t maxpos);
+
+/** ------------- engine query ------------------------ */
+/**
+  * Returns the current engine (feature) functionality level.
+  */
+uint32_t engine_functionality_level(void);
+
+/**
+  * Returns the current engine (dconf) functionality level.
+  */
+uint32_t engine_dconf_level(void);
+
+/**
+  * Returns the current engine's scan options.
+  */
+uint32_t engine_scan_options(void);
+
+/**
+  * Returns the current engine's db options.
+  */
+uint32_t engine_db_options(void);
+
+/* ---------------- scan control --------------------------- */
+/**
+  * Sets the container type for the currently extracted file.
+  * @param container container type (CL_TYPE_*)
+  * @return current setting for container (CL_TYPE_ANY default)
+  */
+int32_t extract_set_container(uint32_t container);
+
+/**
+  * Toggles the read/seek API to read from the currently extracted file, and
+  * back.
+  * You must call seek after switching inputs to position the cursor to a valid
+  * position.
+  * @param extracted_file 1 - switch to reading from extracted file, 
+                          0 - switch back to original input
+  * @return -1 on error (if no extracted file exists)
+             0 on success
+  */
+int32_t input_switch(int32_t extracted_file);
+
+/* ---------------- END 0.96.1 APIs ------------------------------------- */
 #endif
 #endif
diff --git a/libclamav/bytecode_api_decl.c b/libclamav/bytecode_api_decl.c
index aac273b..68fe24a 100644
--- a/libclamav/bytecode_api_decl.c
+++ b/libclamav/bytecode_api_decl.c
@@ -78,9 +78,37 @@ int32_t cli_bcapi_bytecode_rt_error(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_init(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_process(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_done(struct cli_bc_ctx *ctx , int32_t);
+int32_t cli_bcapi_ilog2(struct cli_bc_ctx *ctx , uint32_t, uint32_t);
+int32_t cli_bcapi_ipow(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+uint32_t cli_bcapi_iexp(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_isin(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_icos(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_memstr(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, const uint8_t*, int32_t);
+int32_t cli_bcapi_hex2ui(struct cli_bc_ctx *ctx , uint32_t, uint32_t);
+int32_t cli_bcapi_atoi(struct cli_bc_ctx *ctx , const uint8_t*, int32_t);
+uint32_t cli_bcapi_debug_print_str_start(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t);
+uint32_t cli_bcapi_debug_print_str_nonl(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t);
+uint32_t cli_bcapi_entropy_buffer(struct cli_bc_ctx *ctx , uint8_t*, int32_t);
+int32_t cli_bcapi_map_new(struct cli_bc_ctx *ctx , int32_t, int32_t);
+int32_t cli_bcapi_map_addkey(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_setvalue(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_remove(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_find(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_getvaluesize(struct cli_bc_ctx *ctx , int32_t);
+uint8_t* cli_bcapi_map_getvalue(struct cli_bc_ctx *ctx , int32_t, int32_t);
+int32_t cli_bcapi_map_done(struct cli_bc_ctx *ctx , int32_t);
+int32_t cli_bcapi_file_find_limit(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t, int32_t);
+uint32_t cli_bcapi_engine_functionality_level(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_dconf_level(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_scan_options(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_db_options(struct cli_bc_ctx *ctx );
+int32_t cli_bcapi_extract_set_container(struct cli_bc_ctx *ctx , uint32_t);
+int32_t cli_bcapi_input_switch(struct cli_bc_ctx *ctx , int32_t);
 
 const struct cli_apiglobal cli_globals[] = {
 /* Bytecode globals BEGIN */
+	{"__clambc_match_offsets", GLOBAL_MATCH_OFFSETS, 76,
+	 ((char*)&((struct cli_bc_ctx*)0)->hooks.match_offsets - (char*)NULL)},
 	{"__clambc_kind", GLOBAL_KIND, 16,
 	 ((char*)&((struct cli_bc_ctx*)0)->hooks.kind - (char*)NULL)},
 	{"__clambc_match_counts", GLOBAL_MATCH_COUNTS, 76,
@@ -101,22 +129,24 @@ static uint16_t cli_tmp5[]={32, 16, 16, 32, 32, 32, 16, 16};
 static uint16_t cli_tmp6[]={32};
 static uint16_t cli_tmp7[]={32};
 static uint16_t cli_tmp8[]={32, 32};
-static uint16_t cli_tmp9[]={32, 32, 32, 32};
-static uint16_t cli_tmp10[]={32, 32, 32};
+static uint16_t cli_tmp9[]={32};
+static uint16_t cli_tmp10[]={32, 65, 32, 32};
 static uint16_t cli_tmp11[]={65, 32, 32};
-static uint16_t cli_tmp12[]={32};
-static uint16_t cli_tmp13[]={32, 65, 32, 32, 32, 32};
-static uint16_t cli_tmp14[]={32, 84, 32};
-static uint16_t cli_tmp15[]={85};
-static uint16_t cli_tmp16[]={32, 32, 32, 32, 32, 32, 32, 32, 32};
-static uint16_t cli_tmp17[]={65, 32};
-static uint16_t cli_tmp18[]={32, 65, 32};
-static uint16_t cli_tmp19[]={32, 89, 32};
-static uint16_t cli_tmp20[]={90};
-static uint16_t cli_tmp21[]={16, 8, 8, 8, 92, 91};
-static uint16_t cli_tmp22[]={8};
-static uint16_t cli_tmp23[]={93};
+static uint16_t cli_tmp12[]={32, 32, 32};
+static uint16_t cli_tmp13[]={32, 65, 32};
+static uint16_t cli_tmp14[]={32, 65, 32, 65, 32};
+static uint16_t cli_tmp15[]={32, 32, 32, 32};
+static uint16_t cli_tmp16[]={32, 65, 32, 32, 32, 32};
+static uint16_t cli_tmp17[]={32, 87, 32};
+static uint16_t cli_tmp18[]={88};
+static uint16_t cli_tmp19[]={32, 32, 32, 32, 32, 32, 32, 32, 32};
+static uint16_t cli_tmp20[]={65, 32};
+static uint16_t cli_tmp21[]={32, 91, 32};
+static uint16_t cli_tmp22[]={92};
+static uint16_t cli_tmp23[]={16, 8, 8, 8, 94, 93};
 static uint16_t cli_tmp24[]={8};
+static uint16_t cli_tmp25[]={95};
+static uint16_t cli_tmp26[]={8};
 
 const struct cli_bc_type cli_apicall_types[]={
 	{DStructType, cli_tmp0, 13, 0, 0},
@@ -128,72 +158,100 @@ const struct cli_bc_type cli_apicall_types[]={
 	{DArrayType, cli_tmp6, 1, 0, 0},
 	{DArrayType, cli_tmp7, 64, 0, 0},
 	{DFunctionType, cli_tmp8, 2, 0, 0},
-	{DFunctionType, cli_tmp9, 4, 0, 0},
-	{DFunctionType, cli_tmp10, 3, 0, 0},
+	{DFunctionType, cli_tmp9, 1, 0, 0},
+	{DFunctionType, cli_tmp10, 4, 0, 0},
 	{DFunctionType, cli_tmp11, 3, 0, 0},
-	{DFunctionType, cli_tmp12, 1, 0, 0},
-	{DFunctionType, cli_tmp13, 6, 0, 0},
-	{DFunctionType, cli_tmp14, 3, 0, 0},
-	{DPointerType, cli_tmp15, 1, 0, 0},
-	{DStructType, cli_tmp16, 9, 0, 0},
-	{DFunctionType, cli_tmp17, 2, 0, 0},
-	{DFunctionType, cli_tmp18, 3, 0, 0},
-	{DFunctionType, cli_tmp19, 3, 0, 0},
-	{DPointerType, cli_tmp20, 1, 0, 0},
-	{DStructType, cli_tmp21, 6, 0, 0},
-	{DArrayType, cli_tmp22, 29, 0, 0},
-	{DArrayType, cli_tmp23, 3, 0, 0},
-	{DArrayType, cli_tmp24, 10, 0, 0}
+	{DFunctionType, cli_tmp12, 3, 0, 0},
+	{DFunctionType, cli_tmp13, 3, 0, 0},
+	{DFunctionType, cli_tmp14, 5, 0, 0},
+	{DFunctionType, cli_tmp15, 4, 0, 0},
+	{DFunctionType, cli_tmp16, 6, 0, 0},
+	{DFunctionType, cli_tmp17, 3, 0, 0},
+	{DPointerType, cli_tmp18, 1, 0, 0},
+	{DStructType, cli_tmp19, 9, 0, 0},
+	{DFunctionType, cli_tmp20, 2, 0, 0},
+	{DFunctionType, cli_tmp21, 3, 0, 0},
+	{DPointerType, cli_tmp22, 1, 0, 0},
+	{DStructType, cli_tmp23, 6, 0, 0},
+	{DArrayType, cli_tmp24, 29, 0, 0},
+	{DArrayType, cli_tmp25, 3, 0, 0},
+	{DArrayType, cli_tmp26, 10, 0, 0}
 };
 
 const unsigned cli_apicall_maxtypes=sizeof(cli_apicall_types)/sizeof(cli_apicall_types[0]);
 const struct cli_apicall cli_apicalls[]={
 /* Bytecode APIcalls BEGIN */
-	{"test1", 10, 0, 0},
-	{"read", 18, 0, 1},
-	{"write", 18, 1, 1},
-	{"seek", 10, 1, 0},
-	{"setvirusname", 18, 2, 1},
-	{"debug_print_str", 18, 3, 1},
+	{"test1", 12, 0, 0},
+	{"read", 13, 0, 1},
+	{"write", 13, 1, 1},
+	{"seek", 12, 1, 0},
+	{"setvirusname", 13, 2, 1},
+	{"debug_print_str", 13, 3, 1},
 	{"debug_print_uint", 8, 0, 2},
-	{"disasm_x86", 19, 4, 1},
-	{"trace_directory", 18, 5, 1},
-	{"trace_scope", 18, 6, 1},
-	{"trace_source", 18, 7, 1},
-	{"trace_op", 18, 8, 1},
-	{"trace_value", 18, 9, 1},
-	{"trace_ptr", 18, 10, 1},
+	{"disasm_x86", 21, 4, 1},
+	{"trace_directory", 13, 5, 1},
+	{"trace_scope", 13, 6, 1},
+	{"trace_source", 13, 7, 1},
+	{"trace_op", 13, 8, 1},
+	{"trace_value", 13, 9, 1},
+	{"trace_ptr", 13, 10, 1},
 	{"pe_rawaddr", 8, 1, 2},
-	{"file_find", 18, 11, 1},
+	{"file_find", 13, 11, 1},
 	{"file_byteat", 8, 2, 2},
-	{"malloc", 17, 0, 3},
+	{"malloc", 20, 0, 3},
 	{"test2", 8, 3, 2},
-	{"get_pe_section", 14, 12, 1},
-	{"fill_buffer", 13, 0, 4},
+	{"get_pe_section", 17, 12, 1},
+	{"fill_buffer", 16, 0, 4},
 	{"extract_new", 8, 4, 2},
 	{"read_number", 8, 5, 2},
-	{"hashset_new", 12, 0, 5},
-	{"hashset_add", 10, 2, 0},
-	{"hashset_remove", 10, 3, 0},
-	{"hashset_contains", 10, 4, 0},
+	{"hashset_new", 9, 0, 5},
+	{"hashset_add", 12, 2, 0},
+	{"hashset_remove", 12, 3, 0},
+	{"hashset_contains", 12, 4, 0},
 	{"hashset_done", 8, 6, 2},
 	{"hashset_empty", 8, 7, 2},
 	{"buffer_pipe_new", 8, 8, 2},
 	{"buffer_pipe_new_fromfile", 8, 9, 2},
 	{"buffer_pipe_read_avail", 8, 10, 2},
 	{"buffer_pipe_read_get", 11, 0, 6},
-	{"buffer_pipe_read_stopped", 10, 5, 0},
+	{"buffer_pipe_read_stopped", 12, 5, 0},
 	{"buffer_pipe_write_avail", 8, 11, 2},
 	{"buffer_pipe_write_get", 11, 1, 6},
-	{"buffer_pipe_write_stopped", 10, 6, 0},
+	{"buffer_pipe_write_stopped", 12, 6, 0},
 	{"buffer_pipe_done", 8, 12, 2},
-	{"inflate_init", 9, 0, 7},
+	{"inflate_init", 15, 0, 7},
 	{"inflate_process", 8, 13, 2},
 	{"inflate_done", 8, 14, 2},
 	{"bytecode_rt_error", 8, 15, 2},
 	{"jsnorm_init", 8, 16, 2},
 	{"jsnorm_process", 8, 17, 2},
-	{"jsnorm_done", 8, 18, 2}
+	{"jsnorm_done", 8, 18, 2},
+	{"ilog2", 12, 7, 0},
+	{"ipow", 15, 1, 7},
+	{"iexp", 15, 2, 7},
+	{"isin", 15, 3, 7},
+	{"icos", 15, 4, 7},
+	{"memstr", 14, 0, 8},
+	{"hex2ui", 12, 8, 0},
+	{"atoi", 13, 13, 1},
+	{"debug_print_str_start", 13, 14, 1},
+	{"debug_print_str_nonl", 13, 15, 1},
+	{"entropy_buffer", 13, 16, 1},
+	{"map_new", 12, 9, 0},
+	{"map_addkey", 10, 0, 9},
+	{"map_setvalue", 10, 1, 9},
+	{"map_remove", 10, 2, 9},
+	{"map_find", 10, 3, 9},
+	{"map_getvaluesize", 8, 19, 2},
+	{"map_getvalue", 11, 2, 6},
+	{"map_done", 8, 20, 2},
+	{"file_find_limit", 10, 4, 9},
+	{"engine_functionality_level", 9, 1, 5},
+	{"engine_dconf_level", 9, 2, 5},
+	{"engine_scan_options", 9, 3, 5},
+	{"engine_db_options", 9, 4, 5},
+	{"extract_set_container", 8, 21, 2},
+	{"input_switch", 8, 22, 2}
 /* Bytecode APIcalls END */
 };
 const cli_apicall_int2 cli_apicalls0[] = {
@@ -203,7 +261,10 @@ const cli_apicall_int2 cli_apicalls0[] = {
 	(cli_apicall_int2)cli_bcapi_hashset_remove,
 	(cli_apicall_int2)cli_bcapi_hashset_contains,
 	(cli_apicall_int2)cli_bcapi_buffer_pipe_read_stopped,
-	(cli_apicall_int2)cli_bcapi_buffer_pipe_write_stopped
+	(cli_apicall_int2)cli_bcapi_buffer_pipe_write_stopped,
+	(cli_apicall_int2)cli_bcapi_ilog2,
+	(cli_apicall_int2)cli_bcapi_hex2ui,
+	(cli_apicall_int2)cli_bcapi_map_new
 };
 const cli_apicall_pointer cli_apicalls1[] = {
 	(cli_apicall_pointer)cli_bcapi_read,
@@ -218,7 +279,11 @@ const cli_apicall_pointer cli_apicalls1[] = {
 	(cli_apicall_pointer)cli_bcapi_trace_value,
 	(cli_apicall_pointer)cli_bcapi_trace_ptr,
 	(cli_apicall_pointer)cli_bcapi_file_find,
-	(cli_apicall_pointer)cli_bcapi_get_pe_section
+	(cli_apicall_pointer)cli_bcapi_get_pe_section,
+	(cli_apicall_pointer)cli_bcapi_atoi,
+	(cli_apicall_pointer)cli_bcapi_debug_print_str_start,
+	(cli_apicall_pointer)cli_bcapi_debug_print_str_nonl,
+	(cli_apicall_pointer)cli_bcapi_entropy_buffer
 };
 const cli_apicall_int1 cli_apicalls2[] = {
 	(cli_apicall_int1)cli_bcapi_debug_print_uint,
@@ -239,7 +304,11 @@ const cli_apicall_int1 cli_apicalls2[] = {
 	(cli_apicall_int1)cli_bcapi_bytecode_rt_error,
 	(cli_apicall_int1)cli_bcapi_jsnorm_init,
 	(cli_apicall_int1)cli_bcapi_jsnorm_process,
-	(cli_apicall_int1)cli_bcapi_jsnorm_done
+	(cli_apicall_int1)cli_bcapi_jsnorm_done,
+	(cli_apicall_int1)cli_bcapi_map_getvaluesize,
+	(cli_apicall_int1)cli_bcapi_map_done,
+	(cli_apicall_int1)cli_bcapi_extract_set_container,
+	(cli_apicall_int1)cli_bcapi_input_switch
 };
 const cli_apicall_malloclike cli_apicalls3[] = {
 	(cli_apicall_malloclike)cli_bcapi_malloc
@@ -248,13 +317,32 @@ const cli_apicall_ptrbuffdata cli_apicalls4[] = {
 	(cli_apicall_ptrbuffdata)cli_bcapi_fill_buffer
 };
 const cli_apicall_allocobj cli_apicalls5[] = {
-	(cli_apicall_allocobj)cli_bcapi_hashset_new
+	(cli_apicall_allocobj)cli_bcapi_hashset_new,
+	(cli_apicall_allocobj)cli_bcapi_engine_functionality_level,
+	(cli_apicall_allocobj)cli_bcapi_engine_dconf_level,
+	(cli_apicall_allocobj)cli_bcapi_engine_scan_options,
+	(cli_apicall_allocobj)cli_bcapi_engine_db_options
 };
 const cli_apicall_bufget cli_apicalls6[] = {
 	(cli_apicall_bufget)cli_bcapi_buffer_pipe_read_get,
-	(cli_apicall_bufget)cli_bcapi_buffer_pipe_write_get
+	(cli_apicall_bufget)cli_bcapi_buffer_pipe_write_get,
+	(cli_apicall_bufget)cli_bcapi_map_getvalue
 };
 const cli_apicall_int3 cli_apicalls7[] = {
-	(cli_apicall_int3)cli_bcapi_inflate_init
+	(cli_apicall_int3)cli_bcapi_inflate_init,
+	(cli_apicall_int3)cli_bcapi_ipow,
+	(cli_apicall_int3)cli_bcapi_iexp,
+	(cli_apicall_int3)cli_bcapi_isin,
+	(cli_apicall_int3)cli_bcapi_icos
+};
+const cli_apicall_2bufs cli_apicalls8[] = {
+	(cli_apicall_2bufs)cli_bcapi_memstr
+};
+const cli_apicall_ptrbufid cli_apicalls9[] = {
+	(cli_apicall_ptrbufid)cli_bcapi_map_addkey,
+	(cli_apicall_ptrbufid)cli_bcapi_map_setvalue,
+	(cli_apicall_ptrbufid)cli_bcapi_map_remove,
+	(cli_apicall_ptrbufid)cli_bcapi_map_find,
+	(cli_apicall_ptrbufid)cli_bcapi_file_find_limit
 };
 const unsigned cli_apicall_maxapi = sizeof(cli_apicalls)/sizeof(cli_apicalls[0]);
diff --git a/libclamav/bytecode_api_impl.h b/libclamav/bytecode_api_impl.h
index 2ce5471..dd852c7 100644
--- a/libclamav/bytecode_api_impl.h
+++ b/libclamav/bytecode_api_impl.h
@@ -75,5 +75,31 @@ int32_t cli_bcapi_bytecode_rt_error(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_init(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_process(struct cli_bc_ctx *ctx , int32_t);
 int32_t cli_bcapi_jsnorm_done(struct cli_bc_ctx *ctx , int32_t);
+int32_t cli_bcapi_ilog2(struct cli_bc_ctx *ctx , uint32_t, uint32_t);
+int32_t cli_bcapi_ipow(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+uint32_t cli_bcapi_iexp(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_isin(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_icos(struct cli_bc_ctx *ctx , int32_t, int32_t, int32_t);
+int32_t cli_bcapi_memstr(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, const uint8_t*, int32_t);
+int32_t cli_bcapi_hex2ui(struct cli_bc_ctx *ctx , uint32_t, uint32_t);
+int32_t cli_bcapi_atoi(struct cli_bc_ctx *ctx , const uint8_t*, int32_t);
+uint32_t cli_bcapi_debug_print_str_start(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t);
+uint32_t cli_bcapi_debug_print_str_nonl(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t);
+uint32_t cli_bcapi_entropy_buffer(struct cli_bc_ctx *ctx , uint8_t*, int32_t);
+int32_t cli_bcapi_map_new(struct cli_bc_ctx *ctx , int32_t, int32_t);
+int32_t cli_bcapi_map_addkey(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_setvalue(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_remove(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_find(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, int32_t);
+int32_t cli_bcapi_map_getvaluesize(struct cli_bc_ctx *ctx , int32_t);
+uint8_t* cli_bcapi_map_getvalue(struct cli_bc_ctx *ctx , int32_t, int32_t);
+int32_t cli_bcapi_map_done(struct cli_bc_ctx *ctx , int32_t);
+int32_t cli_bcapi_file_find_limit(struct cli_bc_ctx *ctx , const uint8_t*, uint32_t, int32_t);
+uint32_t cli_bcapi_engine_functionality_level(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_dconf_level(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_scan_options(struct cli_bc_ctx *ctx );
+uint32_t cli_bcapi_engine_db_options(struct cli_bc_ctx *ctx );
+int32_t cli_bcapi_extract_set_container(struct cli_bc_ctx *ctx , uint32_t);
+int32_t cli_bcapi_input_switch(struct cli_bc_ctx *ctx , int32_t);
 
 #endif
diff --git a/libclamav/bytecode_hooks.h b/libclamav/bytecode_hooks.h
index 3417e90..31d0899 100644
--- a/libclamav/bytecode_hooks.h
+++ b/libclamav/bytecode_hooks.h
@@ -30,6 +30,7 @@
 #define BYTECODE_HOOKS_H
 
 struct cli_bc_hooks {
+	 const uint32_t* match_offsets;
 	 const uint16_t* kind;
 	 const uint32_t* match_counts;
 	 const uint32_t* filesize;
diff --git a/libclamav/bytecode_nojit.c b/libclamav/bytecode_nojit.c
index 36319bc..62588cb 100644
--- a/libclamav/bytecode_nojit.c
+++ b/libclamav/bytecode_nojit.c
@@ -74,3 +74,7 @@ void cli_bytecode_printversion(void) {
   printf("LLVM not compiled in\n");
 }
 int have_clamjit=0;
+void cli_printcxxver()
+{
+    /* Empty */
+}
diff --git a/libclamav/bytecode_priv.h b/libclamav/bytecode_priv.h
index 3187308..b61ea2d 100644
--- a/libclamav/bytecode_priv.h
+++ b/libclamav/bytecode_priv.h
@@ -152,6 +152,7 @@ struct cli_bc_ctx {
     uint32_t file_size;
     off_t off;
     fmap_t *fmap;
+    fmap_t *save_map;
     const char *virname;
     struct cli_bc_hooks hooks;
     const struct cli_exe_section *sections;
@@ -183,6 +184,10 @@ struct cli_bc_ctx {
     unsigned njsnorms;
     char *jsnormdir;
     unsigned jsnormwritten;
+    struct cli_map *maps;
+    unsigned nmaps;
+    unsigned containertype;
+    unsigned extracted_file_input;
 };
 struct cli_all_bc;
 int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst);
diff --git a/libclamav/bytecode_vm.c b/libclamav/bytecode_vm.c
index 49e6777..c60b6a4 100644
--- a/libclamav/bytecode_vm.c
+++ b/libclamav/bytecode_vm.c
@@ -68,7 +68,6 @@ static inline int bcfail(const char *msg, long a, long b,
 #define CHECK_EQ(a,b)
 #define CHECK_GT(a,b)
 #endif
-
 #ifdef CL_DEBUG
 #define CHECK_UNREACHABLE do { cli_dbgmsg("bytecode: unreachable executed!\n"); return CL_EBYTECODE; } while(0)
 #define TRACE_R(x) cli_dbgmsg("bytecode trace: %u, read %llx\n", pc, (long long)x);
@@ -287,7 +286,11 @@ static always_inline struct stack_entry *pop_stack(struct stack *stack,
  do {\
      if (p&0x80000000) {\
 	 uint32_t pg = p&0x7fffffff;\
+	 if (!pg) {\
+	 x = 0;\
+	 } else {\
 	 READNfrom(bc->numGlobalBytes, bc->globalBytes, x, n, pg);\
+	 }\
      } else {\
 	 READNfrom(func->numBytes, values, x, n, p);\
      }\
@@ -395,7 +398,7 @@ static always_inline struct stack_entry *pop_stack(struct stack *stack,
 
 #define CHECK_OP(cond, msg) if((cond)) { cli_dbgmsg(msg); stop = CL_EBYTECODE; break;}
 
-#define DEFINE_CASTOP(opc, OP) \
+#define DEFINE_SCASTOP(opc, OP) \
     case opc*5: {\
 		    uint8_t res;\
 		    int8_t sres;\
@@ -431,6 +434,7 @@ static always_inline struct stack_entry *pop_stack(struct stack *stack,
 		    WRITE64(inst->dest, res);\
 		    break;\
 		}
+#define DEFINE_CASTOP(opc, OP) DEFINE_SCASTOP(opc, OP; (void)sres)
 
 #define DEFINE_OP(opc) \
     case opc*5: /* fall-through */\
@@ -490,7 +494,7 @@ static inline int32_t ptr_diff32(int64_t ptr1, int64_t ptr2)
     int32_t ptrid1 = ptr1 >> 32;
     int32_t ptrid2 = ptr2 >> 32;
     if (ptrid1 != ptrid2) {
-	bcfail("difference of pointers not pointing to same object!", ptrid1, ptrid2, __FILE__, __LINE__);
+	(void)bcfail("difference of pointers not pointing to same object!", ptrid1, ptrid2, __FILE__, __LINE__);
 	/* invalid diff */
 	return 0x40000000;
     }
@@ -498,10 +502,9 @@ static inline int32_t ptr_diff32(int64_t ptr1, int64_t ptr2)
 }
 
 static inline int64_t ptr_register_stack(struct ptr_infos *infos,
-					 unsigned char *values,
+					 char *values,
 					 uint32_t off, uint32_t size)
 {
-    int16_t id;
     unsigned n = infos->nstacks + 1;
     struct ptr_info *sinfos = cli_realloc(infos->stack_infos,
 					  sizeof(*sinfos)*n);
@@ -510,7 +513,7 @@ static inline int64_t ptr_register_stack(struct ptr_infos *infos,
     infos->stack_infos = sinfos;
     infos->nstacks = n;
     sinfos = &sinfos[n-1];
-    sinfos->base = values + off;
+    sinfos->base = (uint8_t*)values + off;
     sinfos->size = size;
     return ptr_compose(-n, 0);
 }
@@ -539,6 +542,8 @@ static inline int64_t ptr_register_glob_fixedid(struct ptr_infos *infos,
 static inline int64_t ptr_register_glob(struct ptr_infos *infos,
 					void *values, uint32_t size)
 {
+    if (!values)
+	return 0;
     return ptr_register_glob_fixedid(infos, values, size, infos->nglobs+1);
 }
 
@@ -556,20 +561,20 @@ static inline void* ptr_torealptr(const struct ptr_infos *infos, int64_t ptr,
     int32_t ptrid = ptr >> 32;
     uint32_t ptroff = (uint32_t)ptr;
     if (UNLIKELY(!ptrid)) {
-	bcfail("nullptr", ptrid, 0, __FILE__, __LINE__);
+	(void)bcfail("nullptr", ptrid, 0, __FILE__, __LINE__);
 	return NULL;
     }
     if (ptrid < 0) {
 	ptrid = -ptrid-1;
 	if (UNLIKELY(ptrid >= infos->nstacks)) {
-	    bcfail("ptr", ptrid, infos->nstacks, __FILE__, __LINE__);
+	    (void)bcfail("ptr", ptrid, infos->nstacks, __FILE__, __LINE__);
 	    return NULL;
 	}
 	info = &infos->stack_infos[ptrid];
     } else {
 	ptrid--;
 	if (UNLIKELY(ptrid >= infos->nglobs)) {
-	    bcfail("ptr", ptrid, infos->nglobs, __FILE__, __LINE__);
+	    (void)bcfail("ptr", ptrid, infos->nglobs, __FILE__, __LINE__);
 	    return NULL;
 	}
 	info = &infos->glob_infos[ptrid];
@@ -580,9 +585,9 @@ static inline void* ptr_torealptr(const struct ptr_infos *infos, int64_t ptr,
 	return info->base+ptroff;
     }
 
-    bcfail("ptr1", ptroff, info->size, __FILE__, __LINE__);
-    bcfail("ptr2", read_size, info->size, __FILE__, __LINE__);
-    bcfail("ptr3", ptroff+read_size, info->size, __FILE__, __LINE__);
+    (void)bcfail("ptr1", ptroff, info->size, __FILE__, __LINE__);
+    (void)bcfail("ptr2", read_size, info->size, __FILE__, __LINE__);
+    (void)bcfail("ptr3", ptroff+read_size, info->size, __FILE__, __LINE__);
     return NULL;
 }
 
@@ -610,8 +615,9 @@ static unsigned globaltypesize(uint16_t id)
 		    s += globaltypesize(ty->containedTypes[i]);
 		return s;
 	    }
+	default:
+	    return 0;
     }
-    return 0;
 }
 
 int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst)
@@ -685,7 +691,7 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 	    DEFINE_BINOP(OP_BC_OR, res = op0 | op1);
 	    DEFINE_BINOP(OP_BC_XOR, res = op0 ^ op1);
 
-	    DEFINE_CASTOP(OP_BC_SEXT,
+	    DEFINE_SCASTOP(OP_BC_SEXT,
 			  CHOOSE(READ1(sres, inst->u.cast.source); res = sres ? ~0ull : 0,
 				 READ8(sres, inst->u.cast.source); res=sres=SIGNEXT(sres, inst->u.cast.mask),
 				 READ16(sres, inst->u.cast.source); res=sres=SIGNEXT(sres, inst->u.cast.mask),
@@ -788,7 +794,7 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 		TRACE_API(api->name, inst->dest, inst->type, stack_depth);
 	        switch (api->kind) {
 		    case 0: {
-			int32_t a, b, r;
+			int32_t a, b;
 			READ32(a, inst->u.ops.ops[0]);
 			READ32(b, inst->u.ops.ops[1]);
 			res32 = cli_apicalls0[api->idx](ctx, a, b);
@@ -857,6 +863,29 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 			WRITE32(inst->dest, res32);
 			break;
 		    }
+		    case 8: {
+			int32_t arg2, arg4;
+			void *arg1, *arg3;
+			int32_t resp;
+			READ32(arg2, inst->u.ops.ops[1]);
+			READP(arg1, inst->u.ops.ops[0], arg2);
+			READ32(arg4, inst->u.ops.ops[3]);
+			READP(arg3, inst->u.ops.ops[0], arg4);
+			resp = cli_apicalls8[api->idx](ctx, arg1, arg2, arg3, arg4);
+			WRITE32(inst->dest, resp);
+			break;
+		    }
+		    case 9: {
+			int32_t arg2, arg3;
+			void *arg1;
+			int32_t resp;
+			READ32(arg2, inst->u.ops.ops[1]);
+			READP(arg1, inst->u.ops.ops[0], arg2);
+			READ32(arg3, inst->u.ops.ops[2]);
+			resp = cli_apicalls9[api->idx](ctx, arg1, arg2, arg3);
+			WRITE32(inst->dest, resp);
+			break;
+		    };
 		    default:
 			cli_warnmsg("bytecode: type %u apicalls not yet implemented!\n", api->kind);
 			stop = CL_EBYTECODE;
@@ -1070,7 +1099,7 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 	    }
 	    DEFINE_OP(OP_BC_MEMCPY) {
 		int32_t arg3;
-		void *arg1, *arg2, *resp;
+		void *arg1, *arg2;
 		int64_t res=0;
 
 		READ32(arg3, inst->u.three[2]);
@@ -1083,7 +1112,7 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 	    }
 	    DEFINE_OP(OP_BC_MEMMOVE) {
 		int32_t arg3;
-		void *arg1, *arg2, *resp;
+		void *arg1, *arg2;
 		int64_t res=0;
 
 		READ32(arg3, inst->u.three[2]);
@@ -1120,7 +1149,7 @@ int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct
 		break;
 	    }
 	    DEFINE_OP(OP_BC_BSWAP64) {
-		int32_t arg1;
+		int64_t arg1;
 		READ64(arg1, inst->u.unaryop);
 		WRITE64(inst->dest, cbswap64(arg1));
 		break;
diff --git a/libclamav/c++/ClamBCDiagnostics.h b/libclamav/c++/ClamBCDiagnostics.h
new file mode 100644
index 0000000..ef1103c
--- /dev/null
+++ b/libclamav/c++/ClamBCDiagnostics.h
@@ -0,0 +1,27 @@
+/*
+ *  Compile LLVM bytecode to ClamAV bytecode.
+ *
+ *  Copyright (C) 2010 Sourcefire, Inc.
+ *
+ *  Authors: Török Edvin
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ */
+namespace llvm {
+    class Value;
+}
+// match the prototype used in the bytecode compiler
+void printValue(llvm::Value *V, bool a=false, bool b=false);
+void printLocation(llvm::Instruction *I, bool a=false, bool b=false);
diff --git a/libclamav/c++/ClamBCModule.h b/libclamav/c++/ClamBCModule.h
index d9dd964..07cc3d6 100644
--- a/libclamav/c++/ClamBCModule.h
+++ b/libclamav/c++/ClamBCModule.h
@@ -5,8 +5,6 @@ namespace llvm {
     class Pass;
 }
 namespace ClamBCModule {
-    static void stop(const char *msg, llvm::Function* F, llvm::Instruction* I) {
-	llvm::errs() << msg << "\n";
-    }
+    void stop(const char *msg, llvm::Function* F, llvm::Instruction* I=0);
 }
 llvm::Pass *createClamBCRTChecks();
diff --git a/libclamav/c++/ClamBCRTChecks.cpp b/libclamav/c++/ClamBCRTChecks.cpp
index 791cb86..b39d830 100644
--- a/libclamav/c++/ClamBCRTChecks.cpp
+++ b/libclamav/c++/ClamBCRTChecks.cpp
@@ -21,6 +21,7 @@
  */
 #define DEBUG_TYPE "clambc-rtcheck"
 #include "ClamBCModule.h"
+#include "ClamBCDiagnostics.h"
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/PostOrderIterator.h"
 #include "llvm/ADT/SCCIterator.h"
@@ -65,6 +66,14 @@ namespace {
     PtrVerifier() : FunctionPass((intptr_t)&ID),rootNode(0) {}
 
     virtual bool runOnFunction(Function &F) {
+#ifndef CLAMBC_COMPILER
+      // Bytecode was already verifier and had stack protector applied.
+      // We get called again because ALL bytecode functions loaded are part of
+      // the same module.
+      if (F.hasFnAttr(Attribute::StackProtectReq))
+	  return false;
+#endif
+
       DEBUG(F.dump());
       Changed = false;
       BaseMap.clear();
@@ -117,7 +126,7 @@ namespace {
           Value *V = CI->getCalledValue()->stripPointerCasts();
           Function *F = dyn_cast<Function>(V);
           if (!F) {
-            printLocation(errs(), CI);
+            printLocation(CI, true);
             errs() << "Could not determine call target\n";
             valid = 0;
             continue;
@@ -163,7 +172,7 @@ namespace {
             if (isa<PointerType>(FTy->getParamType(i))) {
               Value *Ptr = CI->getOperand(i+1);
               if (i+1 >= FTy->getNumParams()) {
-                printLocation(errs(), CI);
+                printLocation(CI, false);
                 errs() << "Call to external function with pointer parameter last cannot be analyzed\n";
                 errs() << *CI << "\n";
                 valid = 0;
@@ -171,7 +180,7 @@ namespace {
               }
               Value *Size = CI->getOperand(i+2);
               if (!Size->getType()->isIntegerTy()) {
-                printLocation(errs(), CI);
+                printLocation(CI, false);
                 errs() << "Pointer argument must be followed by integer argument representing its size\n";
                 errs() << *CI << "\n";
                 valid = 0;
@@ -187,7 +196,7 @@ namespace {
 
       if (!valid) {
 	DEBUG(F.dump());
-        ClamBCModule::stop("Verification found errors!", &F, 0);	
+        ClamBCModule::stop("Verification found errors!", &F);	
 	// replace function with call to abort
         std::vector<const Type*>args;
         FunctionType* abrtTy = FunctionType::get(
@@ -399,7 +408,34 @@ namespace {
       return BoundsMap[Base] = V;
     }
 
-    bool insertCheck(const SCEV *Idx, const SCEV *Limit, Instruction *I)
+    MDNode *getLocation(Instruction *I, bool &Approximate, unsigned MDDbgKind)
+    {
+      Approximate = false;
+      if (MDNode *Dbg = I->getMetadata(MDDbgKind))
+        return Dbg;
+      if (!MDDbgKind)
+        return 0;
+      Approximate = true;
+      BasicBlock::iterator It = I;
+      while (It != I->getParent()->begin()) {
+        --It;
+        if (MDNode *Dbg = It->getMetadata(MDDbgKind))
+          return Dbg;
+      }
+      BasicBlock *BB = I->getParent();
+      while ((BB = BB->getUniquePredecessor())) {
+        It = BB->end();
+        while (It != BB->begin()) {
+          --It;
+          if (MDNode *Dbg = It->getMetadata(MDDbgKind))
+            return Dbg;
+        }
+      }
+      return 0;
+    }
+
+    bool insertCheck(const SCEV *Idx, const SCEV *Limit, Instruction *I,
+                     bool strict)
     {
       if (isa<SCEVCouldNotCompute>(Idx) && isa<SCEVCouldNotCompute>(Limit)) {
         errs() << "Could not compute the index and the limit!: \n" << *I << "\n";
@@ -417,22 +453,28 @@ namespace {
       BasicBlock::iterator It = I;
       BasicBlock *newBB = SplitBlock(BB, &*It, this);
       PHINode *PN;
+      unsigned MDDbgKind = I->getContext().getMDKindID("dbg");
       //verifyFunction(*BB->getParent());
       if (!AbrtBB) {
         std::vector<const Type*>args;
         FunctionType* abrtTy = FunctionType::get(
           Type::getVoidTy(BB->getContext()),args,false);
         args.push_back(Type::getInt32Ty(BB->getContext()));
-//        FunctionType* rterrTy = FunctionType::get(
-//          Type::getInt32Ty(BB->getContext()),args,false);
+        FunctionType* rterrTy = FunctionType::get(
+          Type::getInt32Ty(BB->getContext()),args,false);
         Constant *func_abort =
           BB->getParent()->getParent()->getOrInsertFunction("abort", abrtTy);
-//        Constant *func_rterr =
-//          BB->getParent()->getParent()->getOrInsertFunction("bytecode_rt_error", rterrTy);
+        Constant *func_rterr =
+          BB->getParent()->getParent()->getOrInsertFunction("bytecode_rt_error", rterrTy);
         AbrtBB = BasicBlock::Create(BB->getContext(), "", BB->getParent());
         PN = PHINode::Create(Type::getInt32Ty(BB->getContext()),"",
                                       AbrtBB);
-//        CallInst *RtErrCall = CallInst::Create(func_rterr, PN, "", AbrtBB);
+        if (MDDbgKind) {
+          CallInst *RtErrCall = CallInst::Create(func_rterr, PN, "", AbrtBB);
+          RtErrCall->setCallingConv(CallingConv::C);
+          RtErrCall->setTailCall(true);
+          RtErrCall->setDoesNotThrow(true);
+        }
         CallInst* AbrtC = CallInst::Create(func_abort, "", AbrtBB);
         AbrtC->setCallingConv(CallingConv::C);
         AbrtC->setTailCall(true);
@@ -444,16 +486,24 @@ namespace {
       } else {
         PN = cast<PHINode>(AbrtBB->begin());
       }
-      unsigned MDDbgKind = I->getContext().getMDKindID("dbg");
       unsigned locationid = 0;
-      if (MDNode *Dbg = I->getMetadata(MDDbgKind)) {
+      bool Approximate;
+      if (MDNode *Dbg = getLocation(I, Approximate, MDDbgKind)) {
         DILocation Loc(Dbg);
         locationid = Loc.getLineNumber() << 8;
         unsigned col = Loc.getColumnNumber();
-        if (col > 255)
+        if (col > 254)
+          col = 254;
+        if (Approximate)
           col = 255;
         locationid |= col;
 //      Loc.getFilename();
+      } else {
+        static int wcounters = 100000;
+        locationid = (wcounters++)<<8;
+        /*errs() << "fake location: " << (locationid>>8) << "\n";
+        I->dump();
+        I->getParent()->dump();*/
       }
       PN->addIncoming(ConstantInt::get(Type::getInt32Ty(BB->getContext()),
                                        locationid), BB);
@@ -467,7 +517,9 @@ namespace {
       //verifyFunction(*BB->getParent());
       Value *LimitV = expander.expandCodeFor(Limit, Limit->getType(), TI);
       //verifyFunction(*BB->getParent());
-      Value *Cond = new ICmpInst(TI, ICmpInst::ICMP_ULT, IdxV, LimitV);
+      Value *Cond = new ICmpInst(TI, strict ?
+                                 ICmpInst::ICMP_ULT :
+                                 ICmpInst::ICMP_ULE, IdxV, LimitV);
       //verifyFunction(*BB->getParent());
       BranchInst::Create(newBB, AbrtBB, Cond, TI);
       TI->eraseFromParent();
@@ -494,54 +546,43 @@ namespace {
       LHS = SE->getNoopOrZeroExtend(LHS, LTy);
       RHS = SE->getNoopOrZeroExtend(RHS, LTy);
     }
-    bool checkCondition(CallInst *CI, Instruction *I)
+    bool checkCond(Instruction *ICI, Instruction *I, bool equal)
+    {
+      for (Value::use_iterator JU=ICI->use_begin(),JUE=ICI->use_end();
+           JU != JUE; ++JU) {
+        if (BranchInst *BI = dyn_cast<BranchInst>(JU)) {
+          if (!BI->isConditional())
+            continue;
+          BasicBlock *S = BI->getSuccessor(equal);
+          if (DT->dominates(S, I->getParent()))
+            return true;
+        }
+        if (BinaryOperator *BI = dyn_cast<BinaryOperator>(JU)) {
+          if (BI->getOpcode() == Instruction::Or &&
+              checkCond(BI, I, equal))
+            return true;
+          if (BI->getOpcode() == Instruction::And &&
+              checkCond(BI, I, !equal))
+            return true;
+        }
+      }
+      return false;
+    }
+
+    bool checkCondition(Instruction *CI, Instruction *I)
     {
       for (Value::use_iterator U=CI->use_begin(),UE=CI->use_end();
            U != UE; ++U) {
         if (ICmpInst *ICI = dyn_cast<ICmpInst>(U)) {
           if (ICI->getOperand(0)->stripPointerCasts() == CI &&
               isa<ConstantPointerNull>(ICI->getOperand(1))) {
-            for (Value::use_iterator JU=ICI->use_begin(),JUE=ICI->use_end();
-                 JU != JUE; ++JU) {
-              if (BranchInst *BI = dyn_cast<BranchInst>(JU)) {
-                if (!BI->isConditional())
-                  continue;
-                BasicBlock *S = BI->getSuccessor(ICI->getPredicate() ==
-                                                 ICmpInst::ICMP_EQ);
-                if (DT->dominates(S, I->getParent()))
-                  return true;
-              }
-            }
+            if (checkCond(ICI, I, ICI->getPredicate() == ICmpInst::ICMP_EQ))
+              return true;
           }
         }
       }
       return false;
     }
-    static void printValue(llvm::raw_ostream &Out, llvm::Value *V) {
-      std::string DisplayName;
-      std::string Type;
-      unsigned Line;
-      std::string File;
-      std::string Dir;
-      if (!getLocationInfo(V, DisplayName, Type, Line, File, Dir)) {
-        Out << *V << "\n";
-        return;
-      }
-      Out << "'" << DisplayName << "' (" << File << ":" << Line << ")";
-    }
-
-    static void printLocation(llvm::raw_ostream &Out, llvm::Instruction *I) {
-      if (MDNode *N = I->getMetadata("dbg")) {
-        DILocation Loc(N);
-        Out << Loc.getFilename() << ":" << Loc.getLineNumber();
-        if (unsigned Col = Loc.getColumnNumber()) {
-          Out << ":" << Col;
-        }
-        Out << ": ";
-        return;
-      }
-      Out << *I << ":\n";
-    }
 
     bool validateAccess(Value *Pointer, Value *Length, Instruction *I)
     {
@@ -552,13 +593,13 @@ namespace {
         // get bounds
         Value *Bounds = getPointerBounds(SBase);
         if (!Bounds) {
-          printLocation(errs(), I);
+          printLocation(I, true);
           errs() << "no bounds for base ";
-          printValue(errs(), SBase);
+          printValue(SBase);
           errs() << " while checking access to ";
-          printValue(errs(), Pointer);
+          printValue(Pointer);
           errs() << " of length ";
-          printValue(errs(), Length);
+          printValue(Length);
           errs() << "\n";
 
           return false;
@@ -566,17 +607,17 @@ namespace {
 
         if (CallInst *CI = dyn_cast<CallInst>(Base->stripPointerCasts())) {
           if (I->getParent() == CI->getParent()) {
-            printLocation(errs(), I);
+            printLocation(I, true);
             errs() << "no null pointer check of pointer ";
-            printValue(errs(), Base);
+            printValue(Base, false, true);
             errs() << " obtained by function call";
             errs() << " before use in same block\n";
             return false;
           }
           if (!checkCondition(CI, I)) {
-            printLocation(errs(), I);
+            printLocation(I, true);
             errs() << "no null pointer check of pointer ";
-            printValue(errs(), Base);
+            printValue(Base, false, true);
             errs() << " obtained by function call";
             errs() << " before use\n";
             return false;
@@ -595,8 +636,16 @@ namespace {
 
         DEBUG(dbgs() << "Checking access to " << *Pointer << " of length " <<
               *Length << "\n");
-        if (OffsetP == Limit)
-          return true;
+        if (OffsetP == Limit) {
+          printLocation(I, true);
+          errs() << "OffsetP == Limit: " << *OffsetP << "\n";
+          errs() << " while checking access to ";
+          printValue(Pointer);
+          errs() << " of length ";
+          printValue(Length);
+          errs() << "\n";
+          return false;
+        }
 
         if (SLen == Limit) {
           if (const SCEVConstant *SC = dyn_cast<SCEVConstant>(OffsetP)) {
@@ -606,22 +655,29 @@ namespace {
           errs() << "SLen == Limit: " << *SLen << "\n";
           errs() << " while checking access to " << *Pointer << " of length "
             << *Length << " at " << *I << "\n";
-          return false;//TODO: insert abort
+          return false;
         }
 
+        bool valid = true;
+        SLen = SE->getAddExpr(OffsetP, SLen);
+        // check that offset + slen <= limit; 
+        // umax(offset+slen, limit) == limit is a sufficient (but not necessary
+        // condition)
         const SCEV *MaxL = SE->getUMaxExpr(SLen, Limit);
         if (MaxL != Limit) {
           DEBUG(dbgs() << "MaxL != Limit: " << *MaxL << ", " << *Limit << "\n");
-          return insertCheck(SLen, Limit, I);
+          valid &= insertCheck(SLen, Limit, I, false);
         }
 
         //TODO: nullpointer check
         const SCEV *Max = SE->getUMaxExpr(OffsetP, Limit);
         if (Max == Limit)
-          return true;
+          return valid;
         DEBUG(dbgs() << "Max != Limit: " << *Max << ", " << *Limit << "\n");
 
-        return insertCheck(OffsetP, Limit, I);
+        // check that offset < limit
+        valid &= insertCheck(OffsetP, Limit, I, true);
+        return valid;
     }
 
     bool validateAccess(Value *Pointer, unsigned size, Instruction *I)
diff --git a/libclamav/c++/Makefile.am b/libclamav/c++/Makefile.am
index 76323ae..91f91e5 100644
--- a/libclamav/c++/Makefile.am
+++ b/libclamav/c++/Makefile.am
@@ -46,7 +46,8 @@ libclamavcxx_la_LDFLAGS=-no-undefined
 libclamavcxx_la_CXXFLAGS = $(LLVM_CXXFLAGS)
 libclamavcxx_la_SOURCES = bytecode2llvm.cpp\
 			  ClamBCRTChecks.cpp\
-			  ClamBCModule.h
+			  ClamBCModule.h\
+			  ClamBCDiagnostics.h
 if BUILD_X86
 libclamavcxx_la_LIBADD+=libllvmx86codegen.la
 libclamavcxx_la_DEPENDENCIES+=libllvmx86codegen.la
@@ -68,7 +69,8 @@ endif
 
 libclamavcxx_la_LIBADD+=libllvmcodegen.la libllvmsystem.la
 
-LLVM_CXXFLAGS=-Woverloaded-virtual -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -Wno-variadic-macros
+LLVM_CXXFLAGS=-Woverloaded-virtual -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings
+unittest_CXXFLAGS=@NO_VARIADIC_MACROS@ @NO_MISSING_FIELD_INITIALIZERS@
 
 TBLGENFILES=llvm/include/llvm/Intrinsics.gen X86GenRegisterInfo.h.inc X86GenRegisterNames.inc X86GenRegisterInfo.inc X86GenInstrNames.inc X86GenInstrInfo.inc\
     X86GenAsmWriter.inc X86GenAsmWriter1.inc X86GenAsmMatcher.inc X86GenDAGISel.inc X86GenFastISel.inc X86GenCallingConv.inc\
@@ -717,6 +719,7 @@ libllvminterpreter_la_SOURCES=\
     llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp
 
 libgoogletest_la_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
+libgoogletest_la_CXXFLAGS=$(unittest_CXXFLAGS)
 libgoogletest_la_SOURCES=\
     llvm/utils/unittest/googletest/gtest-death-test.cc\
     llvm/utils/unittest/googletest/gtest-filepath.cc\
@@ -726,8 +729,8 @@ libgoogletest_la_SOURCES=\
     llvm/utils/unittest/googletest/gtest.cc\
     llvm/utils/unittest/UnitTestMain/TestMain.cpp
 
-#-Wno-variadic-macros
 llvmunittest_ADT_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
+llvmunittest_ADT_CXXFLAGS=$(unittest_CXXFLAGS)
 llvmunittest_ADT_LDADD=libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_ADT_SOURCES=\
     llvm/unittests/ADT/APFloatTest.cpp\
@@ -744,7 +747,7 @@ llvmunittest_ADT_SOURCES=\
     llvm/unittests/ADT/TwineTest.cpp
 
 llvmunittest_Support_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_Support_CXXFLAGS=$(unittest_CXXFLAGS)
 llvmunittest_Support_LDADD=libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_Support_SOURCES=\
     llvm/unittests/Support/AllocatorTest.cpp\
@@ -756,7 +759,7 @@ llvmunittest_Support_SOURCES=\
     llvm/unittests/Support/raw_ostream_test.cpp
 
 llvmunittest_VMCore_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_VMCore_CXXFLAGS=$(unittest_CXXFLAGS)
 llvmunittest_VMCore_LDADD=libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_VMCore_SOURCES=\
     llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp\
@@ -767,7 +770,7 @@ llvmunittest_VMCore_SOURCES=\
     llvm/unittests/VMCore/PassManagerTest.cpp
 
 llvmunittest_JIT_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_JIT_CXXFLAGS=$(unittest_CXXFLAGS)
 llvmunittest_JIT_LDADD=libgoogletest.la libllvmasmparser.la $(lli_LDADD)
 llvmunittest_JIT_SOURCES=\
     llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp\
@@ -775,7 +778,7 @@ llvmunittest_JIT_SOURCES=\
     llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
 
 llvmunittest_ExecutionEngine_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_ExecutionEngine_CXXFLAGS=$(unittest_CXXFLAGS)
 llvmunittest_ExecutionEngine_LDADD=libgoogletest.la libllvminterpreter.la libllvmsupport_nodups.la $(libclamavcxx_la_LIBADD) libllvmsystem.la
 llvmunittest_ExecutionEngine_SOURCES=\
     llvm/lib/CodeGen/IntrinsicLowering.cpp\
@@ -799,10 +802,6 @@ check_PROGRAMS=count not lli llc llvm-as llvm-dis llvmunittest_ADT llvmunittest_
 check_SCRIPTS=llvmcheck.sh
 TESTS_ENVIRONMENT=export GMAKE=@GMAKE@;
 TESTS=llvmunittest_ADT llvmunittest_Support llvmunittest_VMCore llvmunittest_ExecutionEngine llvmunittest_JIT
-# Disable LLVM make check for now, there are some things to fix first:
-#   - check python version (2.4 doesn't work, needs 2.5+)
-#   - run llvm's make check after clamav's was run
-#   - have a way to run only clamav's make check and not llvm's
 @ifGNUmake@ TESTS+=llvmcheck.sh
 
 libllvmasmprinter_la_CPPFLAGS=$(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/lib/Target/X86 \
@@ -921,5 +920,5 @@ dist-hook:
 	make -C llvm dist-hook
 	rm -f $(distdir)/llvm/include/llvm/Config/*.h $(distdir)/llvm/include/llvm/Config/*.def $(distdir)/llvm/Makefile.config $(distdir)/llvm/llvm.spec
 	rm -f $(distdir)/llvm/docs/doxygen.cfg $(distdir)/llvm/tools/llvmc/plugins/Base/Base.td $(distdir)/llvm/tools/llvm-config/llvm-config.in
-	rm -f $(distdir)/llvm/include/llvm/Support/DataTypes.h $(distdir)/llvm/config.log $(distdir)/llvm/config.status
+	rm -f $(distdir)/llvm/include/llvm/System/DataTypes.h $(distdir)/llvm/config.log $(distdir)/llvm/config.status
 
diff --git a/libclamav/c++/Makefile.in b/libclamav/c++/Makefile.in
index af0f8ff..8900575 100644
--- a/libclamav/c++/Makefile.in
+++ b/libclamav/c++/Makefile.in
@@ -94,9 +94,10 @@ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
 	config/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/check_gnu_make.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/cxx_flag_check.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -124,6 +125,10 @@ am_libgoogletest_la_OBJECTS = libgoogletest_la-gtest-death-test.lo \
 	libgoogletest_la-gtest-typed-test.lo libgoogletest_la-gtest.lo \
 	libgoogletest_la-TestMain.lo
 libgoogletest_la_OBJECTS = $(am_libgoogletest_la_OBJECTS)
+libgoogletest_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 libllvmarmcodegen_la_LIBADD =
 am__libllvmarmcodegen_la_SOURCES_DIST =  \
 	llvm/lib/CodeGen/IfConversion.cpp \
@@ -472,6 +477,10 @@ am_llvmunittest_ADT_OBJECTS = llvmunittest_ADT-APFloatTest.$(OBJEXT) \
 llvmunittest_ADT_OBJECTS = $(am_llvmunittest_ADT_OBJECTS)
 llvmunittest_ADT_DEPENDENCIES = libgoogletest.la \
 	libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
+llvmunittest_ADT_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_llvmunittest_ExecutionEngine_OBJECTS =  \
 	llvmunittest_ExecutionEngine-IntrinsicLowering.$(OBJEXT) \
 	llvmunittest_ExecutionEngine-ExecutionEngineTest.$(OBJEXT)
@@ -480,6 +489,10 @@ llvmunittest_ExecutionEngine_OBJECTS =  \
 llvmunittest_ExecutionEngine_DEPENDENCIES = libgoogletest.la \
 	libllvminterpreter.la libllvmsupport_nodups.la \
 	$(libclamavcxx_la_LIBADD) libllvmsystem.la
+llvmunittest_ExecutionEngine_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 am_llvmunittest_JIT_OBJECTS =  \
 	llvmunittest_JIT-JITEventListenerTest.$(OBJEXT) \
 	llvmunittest_JIT-JITMemoryManagerTest.$(OBJEXT) \
@@ -487,6 +500,10 @@ am_llvmunittest_JIT_OBJECTS =  \
 llvmunittest_JIT_OBJECTS = $(am_llvmunittest_JIT_OBJECTS)
 llvmunittest_JIT_DEPENDENCIES = libgoogletest.la libllvmasmparser.la \
 	$(lli_LDADD)
+llvmunittest_JIT_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_llvmunittest_Support_OBJECTS =  \
 	llvmunittest_Support-AllocatorTest.$(OBJEXT) \
 	llvmunittest_Support-ConstantRangeTest.$(OBJEXT) \
@@ -498,6 +515,10 @@ am_llvmunittest_Support_OBJECTS =  \
 llvmunittest_Support_OBJECTS = $(am_llvmunittest_Support_OBJECTS)
 llvmunittest_Support_DEPENDENCIES = libgoogletest.la \
 	libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
+llvmunittest_Support_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_llvmunittest_VMCore_OBJECTS =  \
 	llvmunittest_VMCore-CallGraphSCCPass.$(OBJEXT) \
 	llvmunittest_VMCore-LoopInfo.$(OBJEXT) \
@@ -508,6 +529,10 @@ am_llvmunittest_VMCore_OBJECTS =  \
 llvmunittest_VMCore_OBJECTS = $(am_llvmunittest_VMCore_OBJECTS)
 llvmunittest_VMCore_DEPENDENCIES = libgoogletest.la \
 	libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
+llvmunittest_VMCore_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_not_OBJECTS = not-not.$(OBJEXT)
 not_OBJECTS = $(am_not_OBJECTS)
 not_DEPENDENCIES = libllvmsystem.la
@@ -839,6 +864,8 @@ MAKEINFO = @MAKEINFO@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NO_MISSING_FIELD_INITIALIZERS = @NO_MISSING_FIELD_INITIALIZERS@
+NO_VARIADIC_MACROS = @NO_VARIADIC_MACROS@
 OBJDUMP = @OBJDUMP@
 OBJEXT = @OBJEXT@
 OTOOL = @OTOOL@
@@ -953,9 +980,11 @@ libclamavcxx_la_LDFLAGS = -no-undefined
 libclamavcxx_la_CXXFLAGS = $(LLVM_CXXFLAGS)
 libclamavcxx_la_SOURCES = bytecode2llvm.cpp\
 			  ClamBCRTChecks.cpp\
-			  ClamBCModule.h
+			  ClamBCModule.h\
+			  ClamBCDiagnostics.h
 
-LLVM_CXXFLAGS = -Woverloaded-virtual -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -Wno-variadic-macros
+LLVM_CXXFLAGS = -Woverloaded-virtual -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings
+unittest_CXXFLAGS = @NO_VARIADIC_MACROS@ @NO_MISSING_FIELD_INITIALIZERS@
 TBLGENFILES = llvm/include/llvm/Intrinsics.gen X86GenRegisterInfo.h.inc X86GenRegisterNames.inc X86GenRegisterInfo.inc X86GenInstrNames.inc X86GenInstrInfo.inc\
     X86GenAsmWriter.inc X86GenAsmWriter1.inc X86GenAsmMatcher.inc X86GenDAGISel.inc X86GenFastISel.inc X86GenCallingConv.inc\
     X86GenSubtarget.inc PPCGenInstrNames.inc PPCGenRegisterNames.inc PPCGenAsmWriter.inc PPCGenCodeEmitter.inc PPCGenRegisterInfo.h.inc PPCGenRegisterInfo.inc\
@@ -1484,6 +1513,7 @@ libllvminterpreter_la_SOURCES = \
     llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp
 
 libgoogletest_la_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
+libgoogletest_la_CXXFLAGS = $(unittest_CXXFLAGS)
 libgoogletest_la_SOURCES = \
     llvm/utils/unittest/googletest/gtest-death-test.cc\
     llvm/utils/unittest/googletest/gtest-filepath.cc\
@@ -1493,9 +1523,8 @@ libgoogletest_la_SOURCES = \
     llvm/utils/unittest/googletest/gtest.cc\
     llvm/utils/unittest/UnitTestMain/TestMain.cpp
 
-
-#-Wno-variadic-macros
 llvmunittest_ADT_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
+llvmunittest_ADT_CXXFLAGS = $(unittest_CXXFLAGS)
 llvmunittest_ADT_LDADD = libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_ADT_SOURCES = \
     llvm/unittests/ADT/APFloatTest.cpp\
@@ -1512,7 +1541,7 @@ llvmunittest_ADT_SOURCES = \
     llvm/unittests/ADT/TwineTest.cpp
 
 llvmunittest_Support_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_Support_CXXFLAGS = $(unittest_CXXFLAGS)
 llvmunittest_Support_LDADD = libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_Support_SOURCES = \
     llvm/unittests/Support/AllocatorTest.cpp\
@@ -1524,7 +1553,7 @@ llvmunittest_Support_SOURCES = \
     llvm/unittests/Support/raw_ostream_test.cpp
 
 llvmunittest_VMCore_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_VMCore_CXXFLAGS = $(unittest_CXXFLAGS)
 llvmunittest_VMCore_LDADD = libgoogletest.la libllvmsupport_nodups.la libllvmjit.la libllvmsystem.la
 llvmunittest_VMCore_SOURCES = \
     llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp\
@@ -1535,7 +1564,7 @@ llvmunittest_VMCore_SOURCES = \
     llvm/unittests/VMCore/PassManagerTest.cpp
 
 llvmunittest_JIT_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_JIT_CXXFLAGS = $(unittest_CXXFLAGS)
 llvmunittest_JIT_LDADD = libgoogletest.la libllvmasmparser.la $(lli_LDADD)
 llvmunittest_JIT_SOURCES = \
     llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp\
@@ -1543,7 +1572,7 @@ llvmunittest_JIT_SOURCES = \
     llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
 
 llvmunittest_ExecutionEngine_CPPFLAGS = $(LLVM_INCLUDES) $(LLVM_DEFS) -I$(top_srcdir)/llvm/utils/unittest/googletest/include
-#-Wno-variadic-macros
+llvmunittest_ExecutionEngine_CXXFLAGS = $(unittest_CXXFLAGS)
 llvmunittest_ExecutionEngine_LDADD = libgoogletest.la libllvminterpreter.la libllvmsupport_nodups.la $(libclamavcxx_la_LIBADD) libllvmsystem.la
 llvmunittest_ExecutionEngine_SOURCES = \
     llvm/lib/CodeGen/IntrinsicLowering.cpp\
@@ -1686,7 +1715,7 @@ clean-noinstLTLIBRARIES:
 libclamavcxx.la: $(libclamavcxx_la_OBJECTS) $(libclamavcxx_la_DEPENDENCIES) 
 	$(AM_V_CXXLD)$(libclamavcxx_la_LINK)  $(libclamavcxx_la_OBJECTS) $(libclamavcxx_la_LIBADD) $(LIBS)
 libgoogletest.la: $(libgoogletest_la_OBJECTS) $(libgoogletest_la_DEPENDENCIES) 
-	$(AM_V_CXXLD)$(CXXLINK)  $(libgoogletest_la_OBJECTS) $(libgoogletest_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libgoogletest_la_LINK)  $(libgoogletest_la_OBJECTS) $(libgoogletest_la_LIBADD) $(LIBS)
 libllvmarmcodegen.la: $(libllvmarmcodegen_la_OBJECTS) $(libllvmarmcodegen_la_DEPENDENCIES) 
 	$(AM_V_CXXLD)$(CXXLINK) $(am_libllvmarmcodegen_la_rpath) $(libllvmarmcodegen_la_OBJECTS) $(libllvmarmcodegen_la_LIBADD) $(LIBS)
 libllvmasmparser.la: $(libllvmasmparser_la_OBJECTS) $(libllvmasmparser_la_DEPENDENCIES) 
@@ -1753,19 +1782,19 @@ llvm-dis$(EXEEXT): $(llvm_dis_OBJECTS) $(llvm_dis_DEPENDENCIES)
 	$(AM_V_CXXLD)$(llvm_dis_LINK) $(llvm_dis_OBJECTS) $(llvm_dis_LDADD) $(LIBS)
 llvmunittest_ADT$(EXEEXT): $(llvmunittest_ADT_OBJECTS) $(llvmunittest_ADT_DEPENDENCIES) 
 	@rm -f llvmunittest_ADT$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(llvmunittest_ADT_OBJECTS) $(llvmunittest_ADT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(llvmunittest_ADT_LINK) $(llvmunittest_ADT_OBJECTS) $(llvmunittest_ADT_LDADD) $(LIBS)
 llvmunittest_ExecutionEngine$(EXEEXT): $(llvmunittest_ExecutionEngine_OBJECTS) $(llvmunittest_ExecutionEngine_DEPENDENCIES) 
 	@rm -f llvmunittest_ExecutionEngine$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(llvmunittest_ExecutionEngine_OBJECTS) $(llvmunittest_ExecutionEngine_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(llvmunittest_ExecutionEngine_LINK) $(llvmunittest_ExecutionEngine_OBJECTS) $(llvmunittest_ExecutionEngine_LDADD) $(LIBS)
 llvmunittest_JIT$(EXEEXT): $(llvmunittest_JIT_OBJECTS) $(llvmunittest_JIT_DEPENDENCIES) 
 	@rm -f llvmunittest_JIT$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(llvmunittest_JIT_OBJECTS) $(llvmunittest_JIT_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(llvmunittest_JIT_LINK) $(llvmunittest_JIT_OBJECTS) $(llvmunittest_JIT_LDADD) $(LIBS)
 llvmunittest_Support$(EXEEXT): $(llvmunittest_Support_OBJECTS) $(llvmunittest_Support_DEPENDENCIES) 
 	@rm -f llvmunittest_Support$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(llvmunittest_Support_OBJECTS) $(llvmunittest_Support_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(llvmunittest_Support_LINK) $(llvmunittest_Support_OBJECTS) $(llvmunittest_Support_LDADD) $(LIBS)
 llvmunittest_VMCore$(EXEEXT): $(llvmunittest_VMCore_OBJECTS) $(llvmunittest_VMCore_DEPENDENCIES) 
 	@rm -f llvmunittest_VMCore$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(llvmunittest_VMCore_OBJECTS) $(llvmunittest_VMCore_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(llvmunittest_VMCore_LINK) $(llvmunittest_VMCore_OBJECTS) $(llvmunittest_VMCore_LDADD) $(LIBS)
 not$(EXEEXT): $(not_OBJECTS) $(not_DEPENDENCIES) 
 	@rm -f not$(EXEEXT)
 	$(AM_V_CXXLD)$(not_LINK) $(not_OBJECTS) $(not_LDADD) $(LIBS)
@@ -2474,60 +2503,60 @@ libclamavcxx_la-ClamBCRTChecks.lo: ClamBCRTChecks.cpp
 @am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamavcxx_la_CXXFLAGS) $(CXXFLAGS) -c -o libclamavcxx_la-ClamBCRTChecks.lo `test -f 'ClamBCRTChecks.cpp' || echo '$(srcdir)/'`ClamBCRTChecks.cpp
 
 libgoogletest_la-gtest-death-test.lo: llvm/utils/unittest/googletest/gtest-death-test.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-death-test.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-death-test.Tpo -c -o libgoogletest_la-gtest-death-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-death-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-death-test.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-death-test.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-death-test.Tpo -c -o libgoogletest_la-gtest-death-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-death-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-death-test.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest-death-test.Tpo $(DEPDIR)/libgoogletest_la-gtest-death-test.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest-death-test.cc' object='libgoogletest_la-gtest-death-test.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-death-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-death-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-death-test.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-death-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-death-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-death-test.cc
 
 libgoogletest_la-gtest-filepath.lo: llvm/utils/unittest/googletest/gtest-filepath.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-filepath.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-filepath.Tpo -c -o libgoogletest_la-gtest-filepath.lo `test -f 'llvm/utils/unittest/googletest/gtest-filepath.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-filepath.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-filepath.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-filepath.Tpo -c -o libgoogletest_la-gtest-filepath.lo `test -f 'llvm/utils/unittest/googletest/gtest-filepath.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-filepath.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest-filepath.Tpo $(DEPDIR)/libgoogletest_la-gtest-filepath.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest-filepath.cc' object='libgoogletest_la-gtest-filepath.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-filepath.lo `test -f 'llvm/utils/unittest/googletest/gtest-filepath.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-filepath.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-filepath.lo `test -f 'llvm/utils/unittest/googletest/gtest-filepath.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-filepath.cc
 
 libgoogletest_la-gtest-port.lo: llvm/utils/unittest/googletest/gtest-port.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-port.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-port.Tpo -c -o libgoogletest_la-gtest-port.lo `test -f 'llvm/utils/unittest/googletest/gtest-port.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-port.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-port.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-port.Tpo -c -o libgoogletest_la-gtest-port.lo `test -f 'llvm/utils/unittest/googletest/gtest-port.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-port.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest-port.Tpo $(DEPDIR)/libgoogletest_la-gtest-port.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest-port.cc' object='libgoogletest_la-gtest-port.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-port.lo `test -f 'llvm/utils/unittest/googletest/gtest-port.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-port.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-port.lo `test -f 'llvm/utils/unittest/googletest/gtest-port.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-port.cc
 
 libgoogletest_la-gtest-test-part.lo: llvm/utils/unittest/googletest/gtest-test-part.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-test-part.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-test-part.Tpo -c -o libgoogletest_la-gtest-test-part.lo `test -f 'llvm/utils/unittest/googletest/gtest-test-part.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-test-part.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-test-part.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-test-part.Tpo -c -o libgoogletest_la-gtest-test-part.lo `test -f 'llvm/utils/unittest/googletest/gtest-test-part.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-test-part.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest-test-part.Tpo $(DEPDIR)/libgoogletest_la-gtest-test-part.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest-test-part.cc' object='libgoogletest_la-gtest-test-part.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-test-part.lo `test -f 'llvm/utils/unittest/googletest/gtest-test-part.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-test-part.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-test-part.lo `test -f 'llvm/utils/unittest/googletest/gtest-test-part.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-test-part.cc
 
 libgoogletest_la-gtest-typed-test.lo: llvm/utils/unittest/googletest/gtest-typed-test.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-typed-test.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-typed-test.Tpo -c -o libgoogletest_la-gtest-typed-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-typed-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-typed-test.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest-typed-test.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest-typed-test.Tpo -c -o libgoogletest_la-gtest-typed-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-typed-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-typed-test.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest-typed-test.Tpo $(DEPDIR)/libgoogletest_la-gtest-typed-test.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest-typed-test.cc' object='libgoogletest_la-gtest-typed-test.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-typed-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-typed-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-typed-test.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest-typed-test.lo `test -f 'llvm/utils/unittest/googletest/gtest-typed-test.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest-typed-test.cc
 
 libgoogletest_la-gtest.lo: llvm/utils/unittest/googletest/gtest.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest.Tpo -c -o libgoogletest_la-gtest.lo `test -f 'llvm/utils/unittest/googletest/gtest.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-gtest.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-gtest.Tpo -c -o libgoogletest_la-gtest.lo `test -f 'llvm/utils/unittest/googletest/gtest.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest.cc
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-gtest.Tpo $(DEPDIR)/libgoogletest_la-gtest.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/googletest/gtest.cc' object='libgoogletest_la-gtest.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest.lo `test -f 'llvm/utils/unittest/googletest/gtest.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest.cc
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-gtest.lo `test -f 'llvm/utils/unittest/googletest/gtest.cc' || echo '$(srcdir)/'`llvm/utils/unittest/googletest/gtest.cc
 
 libgoogletest_la-TestMain.lo: llvm/utils/unittest/UnitTestMain/TestMain.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-TestMain.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-TestMain.Tpo -c -o libgoogletest_la-TestMain.lo `test -f 'llvm/utils/unittest/UnitTestMain/TestMain.cpp' || echo '$(srcdir)/'`llvm/utils/unittest/UnitTestMain/TestMain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -MT libgoogletest_la-TestMain.lo -MD -MP -MF $(DEPDIR)/libgoogletest_la-TestMain.Tpo -c -o libgoogletest_la-TestMain.lo `test -f 'llvm/utils/unittest/UnitTestMain/TestMain.cpp' || echo '$(srcdir)/'`llvm/utils/unittest/UnitTestMain/TestMain.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgoogletest_la-TestMain.Tpo $(DEPDIR)/libgoogletest_la-TestMain.Plo
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/utils/unittest/UnitTestMain/TestMain.cpp' object='libgoogletest_la-TestMain.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-TestMain.lo `test -f 'llvm/utils/unittest/UnitTestMain/TestMain.cpp' || echo '$(srcdir)/'`llvm/utils/unittest/UnitTestMain/TestMain.cpp
+ at am__fastdepCXX_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgoogletest_la_CPPFLAGS) $(CPPFLAGS) $(libgoogletest_la_CXXFLAGS) $(CXXFLAGS) -c -o libgoogletest_la-TestMain.lo `test -f 'llvm/utils/unittest/UnitTestMain/TestMain.cpp' || echo '$(srcdir)/'`llvm/utils/unittest/UnitTestMain/TestMain.cpp
 
 libllvmarmcodegen_la-IfConversion.lo: llvm/lib/CodeGen/IfConversion.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libllvmarmcodegen_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libllvmarmcodegen_la-IfConversion.lo -MD -MP -MF $(DEPDIR)/libllvmarmcodegen_la-IfConversion.Tpo -c -o libllvmarmcodegen_la-IfConversion.lo `test -f 'llvm/lib/CodeGen/IfConversion.cpp' || echo '$(srcdir)/'`llvm/lib/CodeGen/IfConversion.cpp
@@ -5410,484 +5439,484 @@ llvm_dis-llvm-dis.obj: llvm/tools/llvm-dis/llvm-dis.cpp
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvm_dis_CPPFLAGS) $(CPPFLAGS) $(llvm_dis_CXXFLAGS) $(CXXFLAGS) -c -o llvm_dis-llvm-dis.obj `if test -f 'llvm/tools/llvm-dis/llvm-dis.cpp'; then $(CYGPATH_W) 'llvm/tools/llvm-dis/llvm-dis.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/tools/llvm-dis/llvm-dis.cpp'; fi`
 
 llvmunittest_ADT-APFloatTest.o: llvm/unittests/ADT/APFloatTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APFloatTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo -c -o llvmunittest_ADT-APFloatTest.o `test -f 'llvm/unittests/ADT/APFloatTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APFloatTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APFloatTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo -c -o llvmunittest_ADT-APFloatTest.o `test -f 'llvm/unittests/ADT/APFloatTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APFloatTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo $(DEPDIR)/llvmunittest_ADT-APFloatTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/APFloatTest.cpp' object='llvmunittest_ADT-APFloatTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APFloatTest.o `test -f 'llvm/unittests/ADT/APFloatTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APFloatTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APFloatTest.o `test -f 'llvm/unittests/ADT/APFloatTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APFloatTest.cpp
 
 llvmunittest_ADT-APFloatTest.obj: llvm/unittests/ADT/APFloatTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APFloatTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo -c -o llvmunittest_ADT-APFloatTest.obj `if test -f 'llvm/unittests/ADT/APFloatTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APFloatTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APFloatTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APFloatTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo -c -o llvmunittest_ADT-APFloatTest.obj `if test -f 'llvm/unittests/ADT/APFloatTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APFloatTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APFloatTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-APFloatTest.Tpo $(DEPDIR)/llvmunittest_ADT-APFloatTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/APFloatTest.cpp' object='llvmunittest_ADT-APFloatTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APFloatTest.obj `if test -f 'llvm/unittests/ADT/APFloatTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APFloatTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APFloatTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APFloatTest.obj `if test -f 'llvm/unittests/ADT/APFloatTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APFloatTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APFloatTest.cpp'; fi`
 
 llvmunittest_ADT-APIntTest.o: llvm/unittests/ADT/APIntTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APIntTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo -c -o llvmunittest_ADT-APIntTest.o `test -f 'llvm/unittests/ADT/APIntTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APIntTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APIntTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo -c -o llvmunittest_ADT-APIntTest.o `test -f 'llvm/unittests/ADT/APIntTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APIntTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo $(DEPDIR)/llvmunittest_ADT-APIntTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/APIntTest.cpp' object='llvmunittest_ADT-APIntTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APIntTest.o `test -f 'llvm/unittests/ADT/APIntTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APIntTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APIntTest.o `test -f 'llvm/unittests/ADT/APIntTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/APIntTest.cpp
 
 llvmunittest_ADT-APIntTest.obj: llvm/unittests/ADT/APIntTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APIntTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo -c -o llvmunittest_ADT-APIntTest.obj `if test -f 'llvm/unittests/ADT/APIntTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APIntTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APIntTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-APIntTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo -c -o llvmunittest_ADT-APIntTest.obj `if test -f 'llvm/unittests/ADT/APIntTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APIntTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APIntTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-APIntTest.Tpo $(DEPDIR)/llvmunittest_ADT-APIntTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/APIntTest.cpp' object='llvmunittest_ADT-APIntTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APIntTest.obj `if test -f 'llvm/unittests/ADT/APIntTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APIntTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APIntTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-APIntTest.obj `if test -f 'llvm/unittests/ADT/APIntTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/APIntTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/APIntTest.cpp'; fi`
 
 llvmunittest_ADT-DenseMapTest.o: llvm/unittests/ADT/DenseMapTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseMapTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo -c -o llvmunittest_ADT-DenseMapTest.o `test -f 'llvm/unittests/ADT/DenseMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseMapTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseMapTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo -c -o llvmunittest_ADT-DenseMapTest.o `test -f 'llvm/unittests/ADT/DenseMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseMapTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/DenseMapTest.cpp' object='llvmunittest_ADT-DenseMapTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseMapTest.o `test -f 'llvm/unittests/ADT/DenseMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseMapTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseMapTest.o `test -f 'llvm/unittests/ADT/DenseMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseMapTest.cpp
 
 llvmunittest_ADT-DenseMapTest.obj: llvm/unittests/ADT/DenseMapTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseMapTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo -c -o llvmunittest_ADT-DenseMapTest.obj `if test -f 'llvm/unittests/ADT/DenseMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseMapTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseMapTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo -c -o llvmunittest_ADT-DenseMapTest.obj `if test -f 'llvm/unittests/ADT/DenseMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseMapTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Tpo $(DEPDIR)/llvmunittest_ADT-DenseMapTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/DenseMapTest.cpp' object='llvmunittest_ADT-DenseMapTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseMapTest.obj `if test -f 'llvm/unittests/ADT/DenseMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseMapTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseMapTest.obj `if test -f 'llvm/unittests/ADT/DenseMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseMapTest.cpp'; fi`
 
 llvmunittest_ADT-DenseSetTest.o: llvm/unittests/ADT/DenseSetTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseSetTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo -c -o llvmunittest_ADT-DenseSetTest.o `test -f 'llvm/unittests/ADT/DenseSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseSetTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseSetTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo -c -o llvmunittest_ADT-DenseSetTest.o `test -f 'llvm/unittests/ADT/DenseSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseSetTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/DenseSetTest.cpp' object='llvmunittest_ADT-DenseSetTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseSetTest.o `test -f 'llvm/unittests/ADT/DenseSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseSetTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseSetTest.o `test -f 'llvm/unittests/ADT/DenseSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/DenseSetTest.cpp
 
 llvmunittest_ADT-DenseSetTest.obj: llvm/unittests/ADT/DenseSetTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseSetTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo -c -o llvmunittest_ADT-DenseSetTest.obj `if test -f 'llvm/unittests/ADT/DenseSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseSetTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-DenseSetTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo -c -o llvmunittest_ADT-DenseSetTest.obj `if test -f 'llvm/unittests/ADT/DenseSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseSetTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Tpo $(DEPDIR)/llvmunittest_ADT-DenseSetTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/DenseSetTest.cpp' object='llvmunittest_ADT-DenseSetTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseSetTest.obj `if test -f 'llvm/unittests/ADT/DenseSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseSetTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-DenseSetTest.obj `if test -f 'llvm/unittests/ADT/DenseSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/DenseSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/DenseSetTest.cpp'; fi`
 
 llvmunittest_ADT-ImmutableSetTest.o: llvm/unittests/ADT/ImmutableSetTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-ImmutableSetTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo -c -o llvmunittest_ADT-ImmutableSetTest.o `test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/ImmutableSetTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-ImmutableSetTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo -c -o llvmunittest_ADT-ImmutableSetTest.o `test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/ImmutableSetTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/ImmutableSetTest.cpp' object='llvmunittest_ADT-ImmutableSetTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-ImmutableSetTest.o `test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/ImmutableSetTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-ImmutableSetTest.o `test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/ImmutableSetTest.cpp
 
 llvmunittest_ADT-ImmutableSetTest.obj: llvm/unittests/ADT/ImmutableSetTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-ImmutableSetTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo -c -o llvmunittest_ADT-ImmutableSetTest.obj `if test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/ImmutableSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/ImmutableSetTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-ImmutableSetTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo -c -o llvmunittest_ADT-ImmutableSetTest.obj `if test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/ImmutableSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/ImmutableSetTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Tpo $(DEPDIR)/llvmunittest_ADT-ImmutableSetTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/ImmutableSetTest.cpp' object='llvmunittest_ADT-ImmutableSetTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-ImmutableSetTest.obj `if test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/ImmutableSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/ImmutableSetTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-ImmutableSetTest.obj `if test -f 'llvm/unittests/ADT/ImmutableSetTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/ImmutableSetTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/ImmutableSetTest.cpp'; fi`
 
 llvmunittest_ADT-SmallStringTest.o: llvm/unittests/ADT/SmallStringTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallStringTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo -c -o llvmunittest_ADT-SmallStringTest.o `test -f 'llvm/unittests/ADT/SmallStringTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallStringTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallStringTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo -c -o llvmunittest_ADT-SmallStringTest.o `test -f 'llvm/unittests/ADT/SmallStringTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallStringTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SmallStringTest.cpp' object='llvmunittest_ADT-SmallStringTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallStringTest.o `test -f 'llvm/unittests/ADT/SmallStringTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallStringTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallStringTest.o `test -f 'llvm/unittests/ADT/SmallStringTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallStringTest.cpp
 
 llvmunittest_ADT-SmallStringTest.obj: llvm/unittests/ADT/SmallStringTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallStringTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo -c -o llvmunittest_ADT-SmallStringTest.obj `if test -f 'llvm/unittests/ADT/SmallStringTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallStringTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallStringTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo -c -o llvmunittest_ADT-SmallStringTest.obj `if test -f 'llvm/unittests/ADT/SmallStringTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallStringTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Tpo $(DEPDIR)/llvmunittest_ADT-SmallStringTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SmallStringTest.cpp' object='llvmunittest_ADT-SmallStringTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallStringTest.obj `if test -f 'llvm/unittests/ADT/SmallStringTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallStringTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallStringTest.obj `if test -f 'llvm/unittests/ADT/SmallStringTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallStringTest.cpp'; fi`
 
 llvmunittest_ADT-SmallVectorTest.o: llvm/unittests/ADT/SmallVectorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallVectorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo -c -o llvmunittest_ADT-SmallVectorTest.o `test -f 'llvm/unittests/ADT/SmallVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallVectorTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallVectorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo -c -o llvmunittest_ADT-SmallVectorTest.o `test -f 'llvm/unittests/ADT/SmallVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallVectorTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SmallVectorTest.cpp' object='llvmunittest_ADT-SmallVectorTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallVectorTest.o `test -f 'llvm/unittests/ADT/SmallVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallVectorTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallVectorTest.o `test -f 'llvm/unittests/ADT/SmallVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SmallVectorTest.cpp
 
 llvmunittest_ADT-SmallVectorTest.obj: llvm/unittests/ADT/SmallVectorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallVectorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo -c -o llvmunittest_ADT-SmallVectorTest.obj `if test -f 'llvm/unittests/ADT/SmallVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallVectorTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SmallVectorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo -c -o llvmunittest_ADT-SmallVectorTest.obj `if test -f 'llvm/unittests/ADT/SmallVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallVectorTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Tpo $(DEPDIR)/llvmunittest_ADT-SmallVectorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SmallVectorTest.cpp' object='llvmunittest_ADT-SmallVectorTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallVectorTest.obj `if test -f 'llvm/unittests/ADT/SmallVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallVectorTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SmallVectorTest.obj `if test -f 'llvm/unittests/ADT/SmallVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SmallVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SmallVectorTest.cpp'; fi`
 
 llvmunittest_ADT-SparseBitVectorTest.o: llvm/unittests/ADT/SparseBitVectorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SparseBitVectorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo -c -o llvmunittest_ADT-SparseBitVectorTest.o `test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SparseBitVectorTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SparseBitVectorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo -c -o llvmunittest_ADT-SparseBitVectorTest.o `test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SparseBitVectorTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SparseBitVectorTest.cpp' object='llvmunittest_ADT-SparseBitVectorTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SparseBitVectorTest.o `test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SparseBitVectorTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SparseBitVectorTest.o `test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/SparseBitVectorTest.cpp
 
 llvmunittest_ADT-SparseBitVectorTest.obj: llvm/unittests/ADT/SparseBitVectorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SparseBitVectorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo -c -o llvmunittest_ADT-SparseBitVectorTest.obj `if test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SparseBitVectorTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-SparseBitVectorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo -c -o llvmunittest_ADT-SparseBitVectorTest.obj `if test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SparseBitVectorTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Tpo $(DEPDIR)/llvmunittest_ADT-SparseBitVectorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/SparseBitVectorTest.cpp' object='llvmunittest_ADT-SparseBitVectorTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SparseBitVectorTest.obj `if test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SparseBitVectorTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-SparseBitVectorTest.obj `if test -f 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/SparseBitVectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/SparseBitVectorTest.cpp'; fi`
 
 llvmunittest_ADT-StringMapTest.o: llvm/unittests/ADT/StringMapTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringMapTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo -c -o llvmunittest_ADT-StringMapTest.o `test -f 'llvm/unittests/ADT/StringMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringMapTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringMapTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo -c -o llvmunittest_ADT-StringMapTest.o `test -f 'llvm/unittests/ADT/StringMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringMapTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo $(DEPDIR)/llvmunittest_ADT-StringMapTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/StringMapTest.cpp' object='llvmunittest_ADT-StringMapTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringMapTest.o `test -f 'llvm/unittests/ADT/StringMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringMapTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringMapTest.o `test -f 'llvm/unittests/ADT/StringMapTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringMapTest.cpp
 
 llvmunittest_ADT-StringMapTest.obj: llvm/unittests/ADT/StringMapTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringMapTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo -c -o llvmunittest_ADT-StringMapTest.obj `if test -f 'llvm/unittests/ADT/StringMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringMapTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringMapTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo -c -o llvmunittest_ADT-StringMapTest.obj `if test -f 'llvm/unittests/ADT/StringMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringMapTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-StringMapTest.Tpo $(DEPDIR)/llvmunittest_ADT-StringMapTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/StringMapTest.cpp' object='llvmunittest_ADT-StringMapTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringMapTest.obj `if test -f 'llvm/unittests/ADT/StringMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringMapTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringMapTest.obj `if test -f 'llvm/unittests/ADT/StringMapTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringMapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringMapTest.cpp'; fi`
 
 llvmunittest_ADT-StringRefTest.o: llvm/unittests/ADT/StringRefTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringRefTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo -c -o llvmunittest_ADT-StringRefTest.o `test -f 'llvm/unittests/ADT/StringRefTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringRefTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringRefTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo -c -o llvmunittest_ADT-StringRefTest.o `test -f 'llvm/unittests/ADT/StringRefTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringRefTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo $(DEPDIR)/llvmunittest_ADT-StringRefTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/StringRefTest.cpp' object='llvmunittest_ADT-StringRefTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringRefTest.o `test -f 'llvm/unittests/ADT/StringRefTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringRefTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringRefTest.o `test -f 'llvm/unittests/ADT/StringRefTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/StringRefTest.cpp
 
 llvmunittest_ADT-StringRefTest.obj: llvm/unittests/ADT/StringRefTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringRefTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo -c -o llvmunittest_ADT-StringRefTest.obj `if test -f 'llvm/unittests/ADT/StringRefTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringRefTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringRefTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-StringRefTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo -c -o llvmunittest_ADT-StringRefTest.obj `if test -f 'llvm/unittests/ADT/StringRefTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringRefTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringRefTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-StringRefTest.Tpo $(DEPDIR)/llvmunittest_ADT-StringRefTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/StringRefTest.cpp' object='llvmunittest_ADT-StringRefTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringRefTest.obj `if test -f 'llvm/unittests/ADT/StringRefTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringRefTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringRefTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-StringRefTest.obj `if test -f 'llvm/unittests/ADT/StringRefTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/StringRefTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/StringRefTest.cpp'; fi`
 
 llvmunittest_ADT-TripleTest.o: llvm/unittests/ADT/TripleTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TripleTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo -c -o llvmunittest_ADT-TripleTest.o `test -f 'llvm/unittests/ADT/TripleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TripleTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TripleTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo -c -o llvmunittest_ADT-TripleTest.o `test -f 'llvm/unittests/ADT/TripleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TripleTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo $(DEPDIR)/llvmunittest_ADT-TripleTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/TripleTest.cpp' object='llvmunittest_ADT-TripleTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TripleTest.o `test -f 'llvm/unittests/ADT/TripleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TripleTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TripleTest.o `test -f 'llvm/unittests/ADT/TripleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TripleTest.cpp
 
 llvmunittest_ADT-TripleTest.obj: llvm/unittests/ADT/TripleTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TripleTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo -c -o llvmunittest_ADT-TripleTest.obj `if test -f 'llvm/unittests/ADT/TripleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TripleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TripleTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TripleTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo -c -o llvmunittest_ADT-TripleTest.obj `if test -f 'llvm/unittests/ADT/TripleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TripleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TripleTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-TripleTest.Tpo $(DEPDIR)/llvmunittest_ADT-TripleTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/TripleTest.cpp' object='llvmunittest_ADT-TripleTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TripleTest.obj `if test -f 'llvm/unittests/ADT/TripleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TripleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TripleTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TripleTest.obj `if test -f 'llvm/unittests/ADT/TripleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TripleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TripleTest.cpp'; fi`
 
 llvmunittest_ADT-TwineTest.o: llvm/unittests/ADT/TwineTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TwineTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo -c -o llvmunittest_ADT-TwineTest.o `test -f 'llvm/unittests/ADT/TwineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TwineTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TwineTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo -c -o llvmunittest_ADT-TwineTest.o `test -f 'llvm/unittests/ADT/TwineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TwineTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo $(DEPDIR)/llvmunittest_ADT-TwineTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/TwineTest.cpp' object='llvmunittest_ADT-TwineTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TwineTest.o `test -f 'llvm/unittests/ADT/TwineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TwineTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TwineTest.o `test -f 'llvm/unittests/ADT/TwineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ADT/TwineTest.cpp
 
 llvmunittest_ADT-TwineTest.obj: llvm/unittests/ADT/TwineTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TwineTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo -c -o llvmunittest_ADT-TwineTest.obj `if test -f 'llvm/unittests/ADT/TwineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TwineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TwineTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ADT-TwineTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo -c -o llvmunittest_ADT-TwineTest.obj `if test -f 'llvm/unittests/ADT/TwineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TwineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TwineTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ADT-TwineTest.Tpo $(DEPDIR)/llvmunittest_ADT-TwineTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ADT/TwineTest.cpp' object='llvmunittest_ADT-TwineTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TwineTest.obj `if test -f 'llvm/unittests/ADT/TwineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TwineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TwineTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ADT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ADT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ADT-TwineTest.obj `if test -f 'llvm/unittests/ADT/TwineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ADT/TwineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ADT/TwineTest.cpp'; fi`
 
 llvmunittest_ExecutionEngine-IntrinsicLowering.o: llvm/lib/CodeGen/IntrinsicLowering.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-IntrinsicLowering.o -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.o `test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp' || echo '$(srcdir)/'`llvm/lib/CodeGen/IntrinsicLowering.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-IntrinsicLowering.o -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.o `test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp' || echo '$(srcdir)/'`llvm/lib/CodeGen/IntrinsicLowering.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/CodeGen/IntrinsicLowering.cpp' object='llvmunittest_ExecutionEngine-IntrinsicLowering.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.o `test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp' || echo '$(srcdir)/'`llvm/lib/CodeGen/IntrinsicLowering.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.o `test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp' || echo '$(srcdir)/'`llvm/lib/CodeGen/IntrinsicLowering.cpp
 
 llvmunittest_ExecutionEngine-IntrinsicLowering.obj: llvm/lib/CodeGen/IntrinsicLowering.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-IntrinsicLowering.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.obj `if test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; then $(CYGPATH_W) 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/CodeGen/IntrinsicLowering.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-IntrinsicLowering.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.obj `if test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; then $(CYGPATH_W) 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/CodeGen/IntrinsicLowering.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Tpo $(DEPDIR)/llvmunittest_ExecutionEngine-IntrinsicLowering.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/CodeGen/IntrinsicLowering.cpp' object='llvmunittest_ExecutionEngine-IntrinsicLowering.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.obj `if test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; then $(CYGPATH_W) 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/CodeGen/IntrinsicLowering.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-IntrinsicLowering.obj `if test -f 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; then $(CYGPATH_W) 'llvm/lib/CodeGen/IntrinsicLowering.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/CodeGen/IntrinsicLowering.cpp'; fi`
 
 llvmunittest_ExecutionEngine-ExecutionEngineTest.o: llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-ExecutionEngineTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.o `test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-ExecutionEngineTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.o `test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' object='llvmunittest_ExecutionEngine-ExecutionEngineTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.o `test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.o `test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
 
 llvmunittest_ExecutionEngine-ExecutionEngineTest.obj: llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-ExecutionEngineTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.obj `if test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_ExecutionEngine-ExecutionEngineTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.obj `if test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Tpo $(DEPDIR)/llvmunittest_ExecutionEngine-ExecutionEngineTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp' object='llvmunittest_ExecutionEngine-ExecutionEngineTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.obj `if test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_ExecutionEngine_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_ExecutionEngine_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_ExecutionEngine-ExecutionEngineTest.obj `if test -f 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp'; fi`
 
 llvmunittest_JIT-JITEventListenerTest.o: llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITEventListenerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo -c -o llvmunittest_JIT-JITEventListenerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITEventListenerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo -c -o llvmunittest_JIT-JITEventListenerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' object='llvmunittest_JIT-JITEventListenerTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITEventListenerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITEventListenerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
 
 llvmunittest_JIT-JITEventListenerTest.obj: llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITEventListenerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo -c -o llvmunittest_JIT-JITEventListenerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITEventListenerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo -c -o llvmunittest_JIT-JITEventListenerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITEventListenerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp' object='llvmunittest_JIT-JITEventListenerTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITEventListenerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITEventListenerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp'; fi`
 
 llvmunittest_JIT-JITMemoryManagerTest.o: llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITMemoryManagerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo -c -o llvmunittest_JIT-JITMemoryManagerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITMemoryManagerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo -c -o llvmunittest_JIT-JITMemoryManagerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' object='llvmunittest_JIT-JITMemoryManagerTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITMemoryManagerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITMemoryManagerTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
 
 llvmunittest_JIT-JITMemoryManagerTest.obj: llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITMemoryManagerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo -c -o llvmunittest_JIT-JITMemoryManagerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITMemoryManagerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo -c -o llvmunittest_JIT-JITMemoryManagerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITMemoryManagerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp' object='llvmunittest_JIT-JITMemoryManagerTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITMemoryManagerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITMemoryManagerTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITMemoryManagerTest.cpp'; fi`
 
 llvmunittest_JIT-JITTest.o: llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo -c -o llvmunittest_JIT-JITTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo -c -o llvmunittest_JIT-JITTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' object='llvmunittest_JIT-JITTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITTest.o `test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' || echo '$(srcdir)/'`llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
 
 llvmunittest_JIT-JITTest.obj: llvm/unittests/ExecutionEngine/JIT/JITTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo -c -o llvmunittest_JIT-JITTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_JIT-JITTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo -c -o llvmunittest_JIT-JITTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_JIT-JITTest.Tpo $(DEPDIR)/llvmunittest_JIT-JITTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/ExecutionEngine/JIT/JITTest.cpp' object='llvmunittest_JIT-JITTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_JIT_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_JIT_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_JIT-JITTest.obj `if test -f 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/ExecutionEngine/JIT/JITTest.cpp'; fi`
 
 llvmunittest_Support-AllocatorTest.o: llvm/unittests/Support/AllocatorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-AllocatorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo -c -o llvmunittest_Support-AllocatorTest.o `test -f 'llvm/unittests/Support/AllocatorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/AllocatorTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-AllocatorTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo -c -o llvmunittest_Support-AllocatorTest.o `test -f 'llvm/unittests/Support/AllocatorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/AllocatorTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo $(DEPDIR)/llvmunittest_Support-AllocatorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/AllocatorTest.cpp' object='llvmunittest_Support-AllocatorTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-AllocatorTest.o `test -f 'llvm/unittests/Support/AllocatorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/AllocatorTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-AllocatorTest.o `test -f 'llvm/unittests/Support/AllocatorTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/AllocatorTest.cpp
 
 llvmunittest_Support-AllocatorTest.obj: llvm/unittests/Support/AllocatorTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-AllocatorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo -c -o llvmunittest_Support-AllocatorTest.obj `if test -f 'llvm/unittests/Support/AllocatorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/AllocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/AllocatorTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-AllocatorTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo -c -o llvmunittest_Support-AllocatorTest.obj `if test -f 'llvm/unittests/Support/AllocatorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/AllocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/AllocatorTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-AllocatorTest.Tpo $(DEPDIR)/llvmunittest_Support-AllocatorTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/AllocatorTest.cpp' object='llvmunittest_Support-AllocatorTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-AllocatorTest.obj `if test -f 'llvm/unittests/Support/AllocatorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/AllocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/AllocatorTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-AllocatorTest.obj `if test -f 'llvm/unittests/Support/AllocatorTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/AllocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/AllocatorTest.cpp'; fi`
 
 llvmunittest_Support-ConstantRangeTest.o: llvm/unittests/Support/ConstantRangeTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ConstantRangeTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo -c -o llvmunittest_Support-ConstantRangeTest.o `test -f 'llvm/unittests/Support/ConstantRangeTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ConstantRangeTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ConstantRangeTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo -c -o llvmunittest_Support-ConstantRangeTest.o `test -f 'llvm/unittests/Support/ConstantRangeTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ConstantRangeTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/ConstantRangeTest.cpp' object='llvmunittest_Support-ConstantRangeTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ConstantRangeTest.o `test -f 'llvm/unittests/Support/ConstantRangeTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ConstantRangeTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ConstantRangeTest.o `test -f 'llvm/unittests/Support/ConstantRangeTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ConstantRangeTest.cpp
 
 llvmunittest_Support-ConstantRangeTest.obj: llvm/unittests/Support/ConstantRangeTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ConstantRangeTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo -c -o llvmunittest_Support-ConstantRangeTest.obj `if test -f 'llvm/unittests/Support/ConstantRangeTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ConstantRangeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ConstantRangeTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ConstantRangeTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo -c -o llvmunittest_Support-ConstantRangeTest.obj `if test -f 'llvm/unittests/Support/ConstantRangeTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ConstantRangeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ConstantRangeTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Tpo $(DEPDIR)/llvmunittest_Support-ConstantRangeTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/ConstantRangeTest.cpp' object='llvmunittest_Support-ConstantRangeTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ConstantRangeTest.obj `if test -f 'llvm/unittests/Support/ConstantRangeTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ConstantRangeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ConstantRangeTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ConstantRangeTest.obj `if test -f 'llvm/unittests/Support/ConstantRangeTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ConstantRangeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ConstantRangeTest.cpp'; fi`
 
 llvmunittest_Support-MathExtrasTest.o: llvm/unittests/Support/MathExtrasTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-MathExtrasTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo -c -o llvmunittest_Support-MathExtrasTest.o `test -f 'llvm/unittests/Support/MathExtrasTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/MathExtrasTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-MathExtrasTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo -c -o llvmunittest_Support-MathExtrasTest.o `test -f 'llvm/unittests/Support/MathExtrasTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/MathExtrasTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/MathExtrasTest.cpp' object='llvmunittest_Support-MathExtrasTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-MathExtrasTest.o `test -f 'llvm/unittests/Support/MathExtrasTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/MathExtrasTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-MathExtrasTest.o `test -f 'llvm/unittests/Support/MathExtrasTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/MathExtrasTest.cpp
 
 llvmunittest_Support-MathExtrasTest.obj: llvm/unittests/Support/MathExtrasTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-MathExtrasTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo -c -o llvmunittest_Support-MathExtrasTest.obj `if test -f 'llvm/unittests/Support/MathExtrasTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/MathExtrasTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/MathExtrasTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-MathExtrasTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo -c -o llvmunittest_Support-MathExtrasTest.obj `if test -f 'llvm/unittests/Support/MathExtrasTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/MathExtrasTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/MathExtrasTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Tpo $(DEPDIR)/llvmunittest_Support-MathExtrasTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/MathExtrasTest.cpp' object='llvmunittest_Support-MathExtrasTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-MathExtrasTest.obj `if test -f 'llvm/unittests/Support/MathExtrasTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/MathExtrasTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/MathExtrasTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-MathExtrasTest.obj `if test -f 'llvm/unittests/Support/MathExtrasTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/MathExtrasTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/MathExtrasTest.cpp'; fi`
 
 llvmunittest_Support-RegexTest.o: llvm/unittests/Support/RegexTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-RegexTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo -c -o llvmunittest_Support-RegexTest.o `test -f 'llvm/unittests/Support/RegexTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/RegexTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-RegexTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo -c -o llvmunittest_Support-RegexTest.o `test -f 'llvm/unittests/Support/RegexTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/RegexTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo $(DEPDIR)/llvmunittest_Support-RegexTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/RegexTest.cpp' object='llvmunittest_Support-RegexTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-RegexTest.o `test -f 'llvm/unittests/Support/RegexTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/RegexTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-RegexTest.o `test -f 'llvm/unittests/Support/RegexTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/RegexTest.cpp
 
 llvmunittest_Support-RegexTest.obj: llvm/unittests/Support/RegexTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-RegexTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo -c -o llvmunittest_Support-RegexTest.obj `if test -f 'llvm/unittests/Support/RegexTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/RegexTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/RegexTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-RegexTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo -c -o llvmunittest_Support-RegexTest.obj `if test -f 'llvm/unittests/Support/RegexTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/RegexTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/RegexTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-RegexTest.Tpo $(DEPDIR)/llvmunittest_Support-RegexTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/RegexTest.cpp' object='llvmunittest_Support-RegexTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-RegexTest.obj `if test -f 'llvm/unittests/Support/RegexTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/RegexTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/RegexTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-RegexTest.obj `if test -f 'llvm/unittests/Support/RegexTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/RegexTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/RegexTest.cpp'; fi`
 
 llvmunittest_Support-TypeBuilderTest.o: llvm/unittests/Support/TypeBuilderTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-TypeBuilderTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo -c -o llvmunittest_Support-TypeBuilderTest.o `test -f 'llvm/unittests/Support/TypeBuilderTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/TypeBuilderTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-TypeBuilderTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo -c -o llvmunittest_Support-TypeBuilderTest.o `test -f 'llvm/unittests/Support/TypeBuilderTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/TypeBuilderTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/TypeBuilderTest.cpp' object='llvmunittest_Support-TypeBuilderTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-TypeBuilderTest.o `test -f 'llvm/unittests/Support/TypeBuilderTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/TypeBuilderTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-TypeBuilderTest.o `test -f 'llvm/unittests/Support/TypeBuilderTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/TypeBuilderTest.cpp
 
 llvmunittest_Support-TypeBuilderTest.obj: llvm/unittests/Support/TypeBuilderTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-TypeBuilderTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo -c -o llvmunittest_Support-TypeBuilderTest.obj `if test -f 'llvm/unittests/Support/TypeBuilderTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/TypeBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/TypeBuilderTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-TypeBuilderTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo -c -o llvmunittest_Support-TypeBuilderTest.obj `if test -f 'llvm/unittests/Support/TypeBuilderTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/TypeBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/TypeBuilderTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Tpo $(DEPDIR)/llvmunittest_Support-TypeBuilderTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/TypeBuilderTest.cpp' object='llvmunittest_Support-TypeBuilderTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-TypeBuilderTest.obj `if test -f 'llvm/unittests/Support/TypeBuilderTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/TypeBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/TypeBuilderTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-TypeBuilderTest.obj `if test -f 'llvm/unittests/Support/TypeBuilderTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/TypeBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/TypeBuilderTest.cpp'; fi`
 
 llvmunittest_Support-ValueHandleTest.o: llvm/unittests/Support/ValueHandleTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ValueHandleTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo -c -o llvmunittest_Support-ValueHandleTest.o `test -f 'llvm/unittests/Support/ValueHandleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ValueHandleTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ValueHandleTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo -c -o llvmunittest_Support-ValueHandleTest.o `test -f 'llvm/unittests/Support/ValueHandleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ValueHandleTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/ValueHandleTest.cpp' object='llvmunittest_Support-ValueHandleTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ValueHandleTest.o `test -f 'llvm/unittests/Support/ValueHandleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ValueHandleTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ValueHandleTest.o `test -f 'llvm/unittests/Support/ValueHandleTest.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/ValueHandleTest.cpp
 
 llvmunittest_Support-ValueHandleTest.obj: llvm/unittests/Support/ValueHandleTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ValueHandleTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo -c -o llvmunittest_Support-ValueHandleTest.obj `if test -f 'llvm/unittests/Support/ValueHandleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ValueHandleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ValueHandleTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-ValueHandleTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo -c -o llvmunittest_Support-ValueHandleTest.obj `if test -f 'llvm/unittests/Support/ValueHandleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ValueHandleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ValueHandleTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Tpo $(DEPDIR)/llvmunittest_Support-ValueHandleTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/ValueHandleTest.cpp' object='llvmunittest_Support-ValueHandleTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ValueHandleTest.obj `if test -f 'llvm/unittests/Support/ValueHandleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ValueHandleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ValueHandleTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-ValueHandleTest.obj `if test -f 'llvm/unittests/Support/ValueHandleTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/ValueHandleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/ValueHandleTest.cpp'; fi`
 
 llvmunittest_Support-raw_ostream_test.o: llvm/unittests/Support/raw_ostream_test.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-raw_ostream_test.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo -c -o llvmunittest_Support-raw_ostream_test.o `test -f 'llvm/unittests/Support/raw_ostream_test.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/raw_ostream_test.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-raw_ostream_test.o -MD -MP -MF $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo -c -o llvmunittest_Support-raw_ostream_test.o `test -f 'llvm/unittests/Support/raw_ostream_test.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/raw_ostream_test.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/raw_ostream_test.cpp' object='llvmunittest_Support-raw_ostream_test.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-raw_ostream_test.o `test -f 'llvm/unittests/Support/raw_ostream_test.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/raw_ostream_test.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-raw_ostream_test.o `test -f 'llvm/unittests/Support/raw_ostream_test.cpp' || echo '$(srcdir)/'`llvm/unittests/Support/raw_ostream_test.cpp
 
 llvmunittest_Support-raw_ostream_test.obj: llvm/unittests/Support/raw_ostream_test.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-raw_ostream_test.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo -c -o llvmunittest_Support-raw_ostream_test.obj `if test -f 'llvm/unittests/Support/raw_ostream_test.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/raw_ostream_test.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/raw_ostream_test.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_Support-raw_ostream_test.obj -MD -MP -MF $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo -c -o llvmunittest_Support-raw_ostream_test.obj `if test -f 'llvm/unittests/Support/raw_ostream_test.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/raw_ostream_test.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/raw_ostream_test.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Tpo $(DEPDIR)/llvmunittest_Support-raw_ostream_test.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/Support/raw_ostream_test.cpp' object='llvmunittest_Support-raw_ostream_test.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-raw_ostream_test.obj `if test -f 'llvm/unittests/Support/raw_ostream_test.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/raw_ostream_test.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/raw_ostream_test.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_Support_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_Support_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_Support-raw_ostream_test.obj `if test -f 'llvm/unittests/Support/raw_ostream_test.cpp'; then $(CYGPATH_W) 'llvm/unittests/Support/raw_ostream_test.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/Support/raw_ostream_test.cpp'; fi`
 
 llvmunittest_VMCore-CallGraphSCCPass.o: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-CallGraphSCCPass.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo -c -o llvmunittest_VMCore-CallGraphSCCPass.o `test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-CallGraphSCCPass.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo -c -o llvmunittest_VMCore-CallGraphSCCPass.o `test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' object='llvmunittest_VMCore-CallGraphSCCPass.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-CallGraphSCCPass.o `test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-CallGraphSCCPass.o `test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
 
 llvmunittest_VMCore-CallGraphSCCPass.obj: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-CallGraphSCCPass.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo -c -o llvmunittest_VMCore-CallGraphSCCPass.obj `if test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-CallGraphSCCPass.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo -c -o llvmunittest_VMCore-CallGraphSCCPass.obj `if test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Tpo $(DEPDIR)/llvmunittest_VMCore-CallGraphSCCPass.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp' object='llvmunittest_VMCore-CallGraphSCCPass.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-CallGraphSCCPass.obj `if test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-CallGraphSCCPass.obj `if test -f 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp'; fi`
 
 llvmunittest_VMCore-LoopInfo.o: llvm/lib/Analysis/LoopInfo.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopInfo.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo -c -o llvmunittest_VMCore-LoopInfo.o `test -f 'llvm/lib/Analysis/LoopInfo.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopInfo.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopInfo.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo -c -o llvmunittest_VMCore-LoopInfo.o `test -f 'llvm/lib/Analysis/LoopInfo.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopInfo.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/LoopInfo.cpp' object='llvmunittest_VMCore-LoopInfo.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopInfo.o `test -f 'llvm/lib/Analysis/LoopInfo.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopInfo.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopInfo.o `test -f 'llvm/lib/Analysis/LoopInfo.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopInfo.cpp
 
 llvmunittest_VMCore-LoopInfo.obj: llvm/lib/Analysis/LoopInfo.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopInfo.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo -c -o llvmunittest_VMCore-LoopInfo.obj `if test -f 'llvm/lib/Analysis/LoopInfo.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopInfo.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopInfo.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo -c -o llvmunittest_VMCore-LoopInfo.obj `if test -f 'llvm/lib/Analysis/LoopInfo.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopInfo.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Tpo $(DEPDIR)/llvmunittest_VMCore-LoopInfo.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/LoopInfo.cpp' object='llvmunittest_VMCore-LoopInfo.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopInfo.obj `if test -f 'llvm/lib/Analysis/LoopInfo.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopInfo.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopInfo.obj `if test -f 'llvm/lib/Analysis/LoopInfo.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopInfo.cpp'; fi`
 
 llvmunittest_VMCore-LoopPass.o: llvm/lib/Analysis/LoopPass.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopPass.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo -c -o llvmunittest_VMCore-LoopPass.o `test -f 'llvm/lib/Analysis/LoopPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopPass.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopPass.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo -c -o llvmunittest_VMCore-LoopPass.o `test -f 'llvm/lib/Analysis/LoopPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopPass.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo $(DEPDIR)/llvmunittest_VMCore-LoopPass.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/LoopPass.cpp' object='llvmunittest_VMCore-LoopPass.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopPass.o `test -f 'llvm/lib/Analysis/LoopPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopPass.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopPass.o `test -f 'llvm/lib/Analysis/LoopPass.cpp' || echo '$(srcdir)/'`llvm/lib/Analysis/LoopPass.cpp
 
 llvmunittest_VMCore-LoopPass.obj: llvm/lib/Analysis/LoopPass.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopPass.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo -c -o llvmunittest_VMCore-LoopPass.obj `if test -f 'llvm/lib/Analysis/LoopPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopPass.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-LoopPass.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo -c -o llvmunittest_VMCore-LoopPass.obj `if test -f 'llvm/lib/Analysis/LoopPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopPass.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-LoopPass.Tpo $(DEPDIR)/llvmunittest_VMCore-LoopPass.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/lib/Analysis/LoopPass.cpp' object='llvmunittest_VMCore-LoopPass.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopPass.obj `if test -f 'llvm/lib/Analysis/LoopPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopPass.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-LoopPass.obj `if test -f 'llvm/lib/Analysis/LoopPass.cpp'; then $(CYGPATH_W) 'llvm/lib/Analysis/LoopPass.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/lib/Analysis/LoopPass.cpp'; fi`
 
 llvmunittest_VMCore-ConstantsTest.o: llvm/unittests/VMCore/ConstantsTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-ConstantsTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo -c -o llvmunittest_VMCore-ConstantsTest.o `test -f 'llvm/unittests/VMCore/ConstantsTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/ConstantsTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-ConstantsTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo -c -o llvmunittest_VMCore-ConstantsTest.o `test -f 'llvm/unittests/VMCore/ConstantsTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/ConstantsTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/ConstantsTest.cpp' object='llvmunittest_VMCore-ConstantsTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-ConstantsTest.o `test -f 'llvm/unittests/VMCore/ConstantsTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/ConstantsTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-ConstantsTest.o `test -f 'llvm/unittests/VMCore/ConstantsTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/ConstantsTest.cpp
 
 llvmunittest_VMCore-ConstantsTest.obj: llvm/unittests/VMCore/ConstantsTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-ConstantsTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo -c -o llvmunittest_VMCore-ConstantsTest.obj `if test -f 'llvm/unittests/VMCore/ConstantsTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/ConstantsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/ConstantsTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-ConstantsTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo -c -o llvmunittest_VMCore-ConstantsTest.obj `if test -f 'llvm/unittests/VMCore/ConstantsTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/ConstantsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/ConstantsTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Tpo $(DEPDIR)/llvmunittest_VMCore-ConstantsTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/ConstantsTest.cpp' object='llvmunittest_VMCore-ConstantsTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-ConstantsTest.obj `if test -f 'llvm/unittests/VMCore/ConstantsTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/ConstantsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/ConstantsTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-ConstantsTest.obj `if test -f 'llvm/unittests/VMCore/ConstantsTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/ConstantsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/ConstantsTest.cpp'; fi`
 
 llvmunittest_VMCore-MetadataTest.o: llvm/unittests/VMCore/MetadataTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-MetadataTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo -c -o llvmunittest_VMCore-MetadataTest.o `test -f 'llvm/unittests/VMCore/MetadataTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/MetadataTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-MetadataTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo -c -o llvmunittest_VMCore-MetadataTest.o `test -f 'llvm/unittests/VMCore/MetadataTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/MetadataTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/MetadataTest.cpp' object='llvmunittest_VMCore-MetadataTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-MetadataTest.o `test -f 'llvm/unittests/VMCore/MetadataTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/MetadataTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-MetadataTest.o `test -f 'llvm/unittests/VMCore/MetadataTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/MetadataTest.cpp
 
 llvmunittest_VMCore-MetadataTest.obj: llvm/unittests/VMCore/MetadataTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-MetadataTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo -c -o llvmunittest_VMCore-MetadataTest.obj `if test -f 'llvm/unittests/VMCore/MetadataTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/MetadataTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/MetadataTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-MetadataTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo -c -o llvmunittest_VMCore-MetadataTest.obj `if test -f 'llvm/unittests/VMCore/MetadataTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/MetadataTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/MetadataTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Tpo $(DEPDIR)/llvmunittest_VMCore-MetadataTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/MetadataTest.cpp' object='llvmunittest_VMCore-MetadataTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-MetadataTest.obj `if test -f 'llvm/unittests/VMCore/MetadataTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/MetadataTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/MetadataTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-MetadataTest.obj `if test -f 'llvm/unittests/VMCore/MetadataTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/MetadataTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/MetadataTest.cpp'; fi`
 
 llvmunittest_VMCore-PassManagerTest.o: llvm/unittests/VMCore/PassManagerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-PassManagerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo -c -o llvmunittest_VMCore-PassManagerTest.o `test -f 'llvm/unittests/VMCore/PassManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/PassManagerTest.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-PassManagerTest.o -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo -c -o llvmunittest_VMCore-PassManagerTest.o `test -f 'llvm/unittests/VMCore/PassManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/PassManagerTest.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/PassManagerTest.cpp' object='llvmunittest_VMCore-PassManagerTest.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-PassManagerTest.o `test -f 'llvm/unittests/VMCore/PassManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/PassManagerTest.cpp
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-PassManagerTest.o `test -f 'llvm/unittests/VMCore/PassManagerTest.cpp' || echo '$(srcdir)/'`llvm/unittests/VMCore/PassManagerTest.cpp
 
 llvmunittest_VMCore-PassManagerTest.obj: llvm/unittests/VMCore/PassManagerTest.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-PassManagerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo -c -o llvmunittest_VMCore-PassManagerTest.obj `if test -f 'llvm/unittests/VMCore/PassManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/PassManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/PassManagerTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -MT llvmunittest_VMCore-PassManagerTest.obj -MD -MP -MF $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo -c -o llvmunittest_VMCore-PassManagerTest.obj `if test -f 'llvm/unittests/VMCore/PassManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/PassManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/PassManagerTest.cpp'; fi`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Tpo $(DEPDIR)/llvmunittest_VMCore-PassManagerTest.Po
 @am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='llvm/unittests/VMCore/PassManagerTest.cpp' object='llvmunittest_VMCore-PassManagerTest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-PassManagerTest.obj `if test -f 'llvm/unittests/VMCore/PassManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/PassManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/PassManagerTest.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(llvmunittest_VMCore_CPPFLAGS) $(CPPFLAGS) $(llvmunittest_VMCore_CXXFLAGS) $(CXXFLAGS) -c -o llvmunittest_VMCore-PassManagerTest.obj `if test -f 'llvm/unittests/VMCore/PassManagerTest.cpp'; then $(CYGPATH_W) 'llvm/unittests/VMCore/PassManagerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/llvm/unittests/VMCore/PassManagerTest.cpp'; fi`
 
 not-not.o: llvm/utils/not/not.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(not_CPPFLAGS) $(CPPFLAGS) $(not_CXXFLAGS) $(CXXFLAGS) -MT not-not.o -MD -MP -MF $(DEPDIR)/not-not.Tpo -c -o not-not.o `test -f 'llvm/utils/not/not.cpp' || echo '$(srcdir)/'`llvm/utils/not/not.cpp
@@ -7869,10 +7898,6 @@ uninstall-am:
 
 @MAINTAINER_MODE_TRUE at ARMGenSubtarget.inc: llvm/lib/Target/ARM/ARM.td $(TBLGEN)
 @MAINTAINER_MODE_TRUE@	$(TBLGEN_V) $(TBLGEN_FLAGS_ARM) -gen-subtarget -o $@ $<
-# Disable LLVM make check for now, there are some things to fix first:
-#   - check python version (2.4 doesn't work, needs 2.5+)
-#   - run llvm's make check after clamav's was run
-#   - have a way to run only clamav's make check and not llvm's
 @ifGNUmake@ TESTS+=llvmcheck.sh
 
 #bytecode2llvm.cpp: build-llvm
@@ -7919,7 +7944,7 @@ dist-hook:
 	make -C llvm dist-hook
 	rm -f $(distdir)/llvm/include/llvm/Config/*.h $(distdir)/llvm/include/llvm/Config/*.def $(distdir)/llvm/Makefile.config $(distdir)/llvm/llvm.spec
 	rm -f $(distdir)/llvm/docs/doxygen.cfg $(distdir)/llvm/tools/llvmc/plugins/Base/Base.td $(distdir)/llvm/tools/llvm-config/llvm-config.in
-	rm -f $(distdir)/llvm/include/llvm/Support/DataTypes.h $(distdir)/llvm/config.log $(distdir)/llvm/config.status
+	rm -f $(distdir)/llvm/include/llvm/System/DataTypes.h $(distdir)/llvm/config.log $(distdir)/llvm/config.status
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libclamav/c++/aclocal.m4 b/libclamav/c++/aclocal.m4
index b715094..557b5ac 100644
--- a/libclamav/c++/aclocal.m4
+++ b/libclamav/c++/aclocal.m4
@@ -1034,6 +1034,7 @@ AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([m4/check_gnu_make.m4])
+m4_include([m4/cxx_flag_check.m4])
 m4_include([m4/libtool.m4])
 m4_include([m4/ltoptions.m4])
 m4_include([m4/ltsugar.m4])
diff --git a/libclamav/c++/bytecode2llvm.cpp b/libclamav/c++/bytecode2llvm.cpp
index 003894e..22b5413 100644
--- a/libclamav/c++/bytecode2llvm.cpp
+++ b/libclamav/c++/bytecode2llvm.cpp
@@ -25,6 +25,8 @@
 #include <sys/time.h>
 #endif
 #include "ClamBCModule.h"
+#include "ClamBCDiagnostics.h"
+#include "llvm/Analysis/DebugInfo.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/BitVector.h"
 #include "llvm/ADT/PostOrderIterator.h"
@@ -73,6 +75,7 @@
 #include <csetjmp>
 #include <new>
 #include <cerrno>
+#include <string>
 
 #include "llvm/Config/config.h"
 #if !ENABLE_THREADS
@@ -1176,6 +1179,8 @@ public:
 			    Value *Dest = Values[inst->u.binop[1]];
 			    const PointerType *PTy = cast<PointerType>(Dest->getType());
 			    Op0 = convertOperand(func, PTy->getElementType(), inst->u.binop[0]);
+			    PTy = PointerType::getUnqual(Op0->getType());
+			    Dest = Builder.CreateBitCast(Dest, PTy);
 			    Builder.CreateStore(Op0, Dest);
 			    break;
 			}
@@ -1295,7 +1300,7 @@ public:
 			    Value *Dst = convertOperand(func, inst, inst->u.three[0]);
 			    Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context)));
 			    Value *Src = convertOperand(func, inst, inst->u.three[1]);
-			    Src = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context)));
+			    Src = Builder.CreatePointerCast(Src, PointerType::getUnqual(Type::getInt8Ty(Context)));
 			    Value *Len = convertOperand(func, Type::getInt32Ty(Context), inst->u.three[2]);
 			    CallInst *c = Builder.CreateCall4(CF->FMemmove, Dst, Src, Len,
 								ConstantInt::get(Type::getInt32Ty(Context), 1));
@@ -1308,7 +1313,7 @@ public:
 			    Value *Dst = convertOperand(func, inst, inst->u.three[0]);
 			    Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context)));
 			    Value *Src = convertOperand(func, inst, inst->u.three[1]);
-			    Src = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context)));
+			    Src = Builder.CreatePointerCast(Src, PointerType::getUnqual(Type::getInt8Ty(Context)));
 			    Value *Len = convertOperand(func, EE->getTargetData()->getIntPtrType(Context), inst->u.three[2]);
 			    CallInst *c = Builder.CreateCall3(CF->FRealmemcmp, Dst, Src, Len);
 			    c->setTailCall(true);
@@ -1428,6 +1433,7 @@ public:
 		if (verifyFunction(*F, PrintMessageAction) == 0) {
 			DEBUG(errs() << "Generating code\n");
 			// Codegen current function as executable machine code.
+			EE->getPointerToFunction(Functions[j]);
 			void *code = EE->getPointerToFunction(F);
 			DEBUG(errs() << "Code generation finished\n");
 
@@ -1472,6 +1478,7 @@ static void addFunctionProtos(struct CommonFunctions *CF, ExecutionEngine *EE, M
 
     EE->addGlobalMapping(CF->FHandler, (void*)(intptr_t)jit_exception_handler);
     EE->InstallLazyFunctionCreator(noUnknownFunctions);
+    EE->getPointerToFunction(CF->FHandler);
 
     std::vector<const Type*> args;
     args.push_back(PointerType::getUnqual(Type::getInt8Ty(Context)));
@@ -1527,12 +1534,15 @@ static void addFunctionProtos(struct CommonFunctions *CF, ExecutionEngine *EE, M
     CF->FRealmemset = Function::Create(DummyTy, GlobalValue::ExternalLinkage,
 					     "memset", M);
     EE->addGlobalMapping(CF->FRealmemset, (void*)(intptr_t)memset);
+    EE->getPointerToFunction(CF->FRealmemset);
     CF->FRealMemmove = Function::Create(DummyTy, GlobalValue::ExternalLinkage,
 					      "memmove", M);
     EE->addGlobalMapping(CF->FRealMemmove, (void*)(intptr_t)memmove);
+    EE->getPointerToFunction(CF->FRealMemmove);
     CF->FRealmemcpy = Function::Create(DummyTy, GlobalValue::ExternalLinkage,
 					     "memcpy", M);
     EE->addGlobalMapping(CF->FRealmemcpy, (void*)(intptr_t)memcpy);
+    EE->getPointerToFunction(CF->FRealmemcpy);
 
     args.clear();
     args.push_back(PointerType::getUnqual(Type::getInt8Ty(Context)));
@@ -1542,6 +1552,7 @@ static void addFunctionProtos(struct CommonFunctions *CF, ExecutionEngine *EE, M
 				 args, false);
     CF->FRealmemcmp = Function::Create(FuncTy_5, GlobalValue::ExternalLinkage, "memcmp", M);
     EE->addGlobalMapping(CF->FRealmemcmp, (void*)(intptr_t)memcmp);
+    EE->getPointerToFunction(CF->FRealmemcmp);
 }
 
 }
@@ -1751,10 +1762,21 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
 		case 7:
 		    dest = (void*)(intptr_t)cli_apicalls7[api->idx];
 		    break;
+		case 8:
+		    dest = (void*)(intptr_t)cli_apicalls8[api->idx];
+		    break;
+		case 9:
+		    dest = (void*)(intptr_t)cli_apicalls9[api->idx];
+		    break;
 		default:
 		    llvm_unreachable("invalid api type");
 	    }
+	    if (!dest) {
+		std::string reason((Twine("No mapping for builtin api ")+api->name).str());
+		llvm_error_handler(0, reason);
+	    }
 	    EE->addGlobalMapping(F, dest);
+	    EE->getPointerToFunction(F);
 	    apiFuncs[i] = F;
 	}
 
@@ -1774,6 +1796,7 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
 	Function *SFail = Function::Create(FTy, Function::ExternalLinkage,
 					      "__stack_chk_fail", M);
 	EE->addGlobalMapping(SFail, (void*)(intptr_t)jit_ssp_handler);
+        EE->getPointerToFunction(SFail);
 
 	for (unsigned i=0;i<bcs->count;i++) {
 	    const struct cli_bc *bc = &bcs->all_bcs[i];
@@ -1991,8 +2014,10 @@ void cli_bytecode_debug_printsrc(const struct cli_bc_ctx *ctx)
 	return;
     }
     assert(ctx->line < lines->linev.size());
-    SMDiagnostic diag(ctx->file, ctx->line ? ctx->line : -1,
-		 ctx->col ? ctx->col-1 : -1,
+
+    int line = (int)ctx->line ? (int)ctx->line : -1;
+    int col = (int)ctx->col ? (int)ctx->col : -1;
+    SMDiagnostic diag(ctx->file, line, col,
 		 "", std::string(lines->linev[ctx->line-1], lines->linev[ctx->line]-1));
     diag.Print("[trace]", errs());
 }
@@ -2002,3 +2027,51 @@ void cli_bytecode_printversion()
 {
   cl::PrintVersionMessage();
 }
+
+void cli_printcxxver()
+{
+    /* Try to print information about some commonly used compilers */
+#ifdef __GNUC__
+    printf("GNU C++: %s (%u.%u.%u)\n", __VERSION__, __GNUC__, __GNUC_MINOR__,
+	   __GNUC_PATCHLEVEL__);
+#endif
+#ifdef __INTEL_COMPILER
+    printf("Intel Compiler C++ %u\n", __INTEL_COMPILER);
+#endif
+#ifdef _MSC_VER
+    printf("Microsoft Visual C++ %u\n", _MSC_VER);
+#endif
+}
+
+namespace ClamBCModule {
+void stop(const char *msg, llvm::Function* F, llvm::Instruction* I)
+{
+    llvm::errs() << msg << "\n";
+}
+}
+
+void printValue(llvm::Value *V, bool a, bool b) {
+    std::string DisplayName;
+    std::string Type;
+    unsigned Line;
+    std::string File;
+    std::string Dir;
+    if (!getLocationInfo(V, DisplayName, Type, Line, File, Dir)) {
+	errs() << *V << "\n";
+	return;
+    }
+    errs() << "'" << DisplayName << "' (" << File << ":" << Line << ")";
+}
+
+void printLocation(llvm::Instruction *I, bool a, bool b) {
+    if (MDNode *N = I->getMetadata("dbg")) {
+	DILocation Loc(N);
+	errs() << Loc.getFilename() << ":" << Loc.getLineNumber();
+	if (unsigned Col = Loc.getColumnNumber()) {
+  	    errs() << ":" << Col;
+  	}
+  	errs() << ": ";
+  	return;
+    }
+    errs() << *I << ":\n";
+}
diff --git a/libclamav/c++/configure b/libclamav/c++/configure
index 2afdbf7..c953b8e 100755
--- a/libclamav/c++/configure
+++ b/libclamav/c++/configure
@@ -748,6 +748,8 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+NO_MISSING_FIELD_INITIALIZERS
+NO_VARIADIC_MACROS
 BUILD_ARM_FALSE
 BUILD_ARM_TRUE
 BUILD_PPC_FALSE
@@ -2027,6 +2029,48 @@ fi
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
+
+# ac_fn_cxx_try_run LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_cxx_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_run
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -5088,13 +5132,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5091: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5135: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5094: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5138: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5097: output\"" >&5)
+  (eval echo "\"\$as_me:5141: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -6300,7 +6344,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6303 "configure"' > conftest.$ac_ext
+  echo '#line 6347 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8356,11 +8400,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8359: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8403: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8363: \$? = $ac_status" >&5
+   echo "$as_me:8407: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8695,11 +8739,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8698: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8742: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8702: \$? = $ac_status" >&5
+   echo "$as_me:8746: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8800,11 +8844,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8803: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8847: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8807: \$? = $ac_status" >&5
+   echo "$as_me:8851: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8855,11 +8899,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8858: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8902: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8862: \$? = $ac_status" >&5
+   echo "$as_me:8906: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -11239,7 +11283,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11242 "configure"
+#line 11286 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11335,7 +11379,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11338 "configure"
+#line 11382 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13291,11 +13335,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13294: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13338: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13298: \$? = $ac_status" >&5
+   echo "$as_me:13342: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13390,11 +13434,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13393: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13437: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13397: \$? = $ac_status" >&5
+   echo "$as_me:13441: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13442,11 +13486,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13445: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13489: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13449: \$? = $ac_status" >&5
+   echo "$as_me:13493: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14530,6 +14574,72 @@ $as_echo "ok ($target_cpu-$target_os)" >&6; }
     esac
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working libstdc++" >&5
+$as_echo_n "checking for working libstdc++... " >&6; }
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test "$cross_compiling" = yes; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+	#include <iostream>
+	int main()
+	{
+	    // this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
+	    std::cout << "test";
+	    return 0;
+	}
+
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "failed
+See \`config.log' for more details." "$LINENO" 5; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+	#include <iostream>
+	int main()
+	{
+	    // this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
+	    std::cout << "test";
+	    return 0;
+    }
+
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "failed
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 build_x86=no
 build_ppc=no
 build_arm=no
@@ -14554,6 +14664,11 @@ freebsd[45]*)
 freebsd*)
     THREAD_LIBS="-lthr"
     ;;
+darwin*)
+    # none required
+    THREAD_LIBS=
+    ;;
+
 *)
     THREAD_LIBS="-pthread"
 esac
@@ -14589,6 +14704,15 @@ else
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking optional compiler flags" >&5
+$as_echo_n "checking optional compiler flags... " >&6; }
+NO_VARIADIC_MACROS=`$CXX -Wno-variadic-macros -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-variadic-macros`
+
+NO_MISSING_FIELD_INITIALIZERS=`$CXX -Wno-missing-field-initializers -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-missing-field-initializers`
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS" >&5
+$as_echo "$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS" >&6; }
+
 ac_config_files="$ac_config_files Makefile"
 
 cat >confcache <<\_ACEOF
diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac
index 817fe61..f58a967 100644
--- a/libclamav/c++/configure.ac
+++ b/libclamav/c++/configure.ac
@@ -115,6 +115,34 @@ if test "$enable_llvm" = "auto"; then
     esac
 fi
 
+dnl bb #1971 - doesn't work with older libstdc++ version at link/runtime
+AC_MSG_CHECKING([for working libstdc++])
+AC_LANG_PUSH([C++])
+AC_RUN_IFELSE(
+    AC_LANG_SOURCE([[
+	#include <iostream>
+	int main()
+	{
+	    // this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
+	    std::cout << "test";
+	    return 0;
+    }
+    ]]),[AC_MSG_RESULT([yes])],
+    [AC_MSG_FAILURE([failed])],
+[AC_LINK_IFELSE(
+    AC_LANG_SOURCE([[
+	#include <iostream>
+	int main()
+	{
+	    // this causes an @GLIBCXX_3.4.9 symbol to be linked in -O2 mode
+	    std::cout << "test";
+	    return 0;
+	}
+    ]]), [AC_MSG_RESULT([yes])],
+    [AC_MSG_FAILURE([failed])]
+)])
+AC_LANG_POP([C++])
+
 build_x86=no
 build_ppc=no
 build_arm=no
@@ -139,6 +167,11 @@ freebsd[[45]]*)
 freebsd*)
     THREAD_LIBS="-lthr"
     ;;
+darwin*)
+    # none required
+    THREAD_LIBS=
+    ;;
+
 *)
     THREAD_LIBS="-pthread"
 esac
@@ -153,6 +186,11 @@ AM_CONDITIONAL(BUILD_X86, [test "$build_x86" = "yes"])
 AM_CONDITIONAL(BUILD_PPC, [test "$build_ppc" = "yes"])
 AM_CONDITIONAL(BUILD_ARM, [test "$build_arm" = "yes"])
 
+AC_MSG_CHECKING([optional compiler flags])
+CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
+CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
+AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
+
 AC_OUTPUT([
     Makefile
 ])
diff --git a/libclamav/c++/llvm/Makefile.rules b/libclamav/c++/llvm/Makefile.rules
index 20e642a..1d4decc 100644
--- a/libclamav/c++/llvm/Makefile.rules
+++ b/libclamav/c++/llvm/Makefile.rules
@@ -388,7 +388,6 @@ endif
 # If REQUIRES_RTTI=1 is specified then don't disable run-time type id.
 ifneq ($(REQUIRES_RTTI), 1)
   CXX.Flags += -fno-rtti
-  CXXFLAGS += -fno-rtti
 endif
 
 ifdef ENABLE_COVERAGE
diff --git a/libclamav/c++/llvm/autoconf/configure.ac b/libclamav/c++/llvm/autoconf/configure.ac
index e199b52..ba2a044 100644
--- a/libclamav/c++/llvm/autoconf/configure.ac
+++ b/libclamav/c++/llvm/autoconf/configure.ac
@@ -1294,12 +1294,12 @@ AC_LINK_IFELSE(
         return 0;
       }
     ]]),
-  AC_LANG_POP([C++])
   AC_MSG_RESULT(yes)
   AC_DEFINE(LLVM_MULTITHREADED, 1, Build multithreading support into LLVM),
   AC_MSG_RESULT(no)
   AC_DEFINE(LLVM_MULTITHREADED, 0, Build multithreading support into LLVM)
   AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
+AC_LANG_POP([C++])
 
 
 dnl===-----------------------------------------------------------------------===
diff --git a/libclamav/c++/llvm/configure b/libclamav/c++/llvm/configure
index 18409b5..ec34230 100755
--- a/libclamav/c++/llvm/configure
+++ b/libclamav/c++/llvm/configure
@@ -2115,6 +2115,52 @@ fi
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_run
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -9544,7 +9590,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 9547 "configure"
+#line 9593 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12407,13 +12453,7 @@ int main() {
       }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+if ac_fn_cxx_try_link "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
@@ -12430,6 +12470,12 @@ $as_echo "$as_me: WARNING: LLVM will be built thread-unsafe because atomic built
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 
 
 
diff --git a/libclamav/c++/llvm/include/llvm/ADT/SmallVector.h b/libclamav/c++/llvm/include/llvm/ADT/SmallVector.h
index 89acefd..6299739 100644
--- a/libclamav/c++/llvm/include/llvm/ADT/SmallVector.h
+++ b/libclamav/c++/llvm/include/llvm/ADT/SmallVector.h
@@ -59,7 +59,7 @@ protected:
   // number of union instances for the space, which guarantee maximal alignment.
 #ifdef __GNUC__
   typedef char U;
-  U FirstEl __attribute__((aligned));
+  U FirstEl __attribute__((aligned(8)));
 #else
   union U {
     double D;
diff --git a/libclamav/c++/llvm/lib/CodeGen/LiveInterval.cpp b/libclamav/c++/llvm/lib/CodeGen/LiveInterval.cpp
index 7af25dd..465b306 100644
--- a/libclamav/c++/llvm/lib/CodeGen/LiveInterval.cpp
+++ b/libclamav/c++/llvm/lib/CodeGen/LiveInterval.cpp
@@ -303,7 +303,6 @@ void LiveInterval::removeRange(SlotIndex Start, SlotIndex End,
           // otherwise mark it as ~1U so it can be nuked later.
           if (ValNo->id == getNumValNums()-1) {
             do {
-              VNInfo *VNI = valnos.back();
               valnos.pop_back();
             } while (!valnos.empty() && valnos.back()->isUnused());
           } else {
@@ -350,7 +349,6 @@ void LiveInterval::removeValNo(VNInfo *ValNo) {
   // otherwise mark it as ~1U so it can be nuked later.
   if (ValNo->id == getNumValNums()-1) {
     do {
-      VNInfo *VNI = valnos.back();
       valnos.pop_back();
     } while (!valnos.empty() && valnos.back()->isUnused());
   } else {
@@ -577,7 +575,6 @@ void LiveInterval::MergeValueInAsValue(
         // mark it as ~1U so it can be nuked later.
         if (V1->id == getNumValNums()-1) {
           do {
-            VNInfo *VNI = valnos.back();
             valnos.pop_back();
           } while (!valnos.empty() && valnos.back()->isUnused());
         } else {
@@ -745,7 +742,6 @@ VNInfo* LiveInterval::MergeValueNumberInto(VNInfo *V1, VNInfo *V2) {
   // ~1U so it can be nuked later.
   if (V1->id == getNumValNums()-1) {
     do {
-      VNInfo *VNI = valnos.back();
       valnos.pop_back();
     } while (valnos.back()->isUnused());
   } else {
diff --git a/libclamav/c++/llvm/lib/ExecutionEngine/JIT/JIT.cpp b/libclamav/c++/llvm/lib/ExecutionEngine/JIT/JIT.cpp
index b6c3367..4fc7d5a 100644
--- a/libclamav/c++/llvm/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/libclamav/c++/llvm/lib/ExecutionEngine/JIT/JIT.cpp
@@ -255,7 +255,12 @@ public:
     MutexGuard guard(Lock);
     JITs.erase(jit);
   }
-  void *getPointerToNamedFunction(const char *Name) const {
+  bool empty() {
+    MutexGuard guard(Lock);
+    return JITs.empty();
+  }
+  void *getPointerToNamedFunction(const char *Name,
+                                  bool AbortOnFailure = true) const {
     MutexGuard guard(Lock);
     assert(JITs.size() != 0 && "No Jit registered");
     //search function in every instance of JIT
@@ -267,7 +272,19 @@ public:
     }
     // The function is not available : fallback on the first created (will
     // search in symbol of the current program/library)
-    return (*JITs.begin())->getPointerToNamedFunction(Name);
+    return (*JITs.begin())->getPointerToNamedFunction(Name, AbortOnFailure);
+  }
+  void *getPointerToGlobalIfAvailable(GlobalValue *V) const {
+    MutexGuard guard(Lock);
+    assert(JITs.size() != 0 && "No Jit registered");
+    //search function in every instance of JIT
+    for (SmallPtrSet<JIT*, 1>::const_iterator Jit = JITs.begin(),
+           end = JITs.end();
+         Jit != end; ++Jit) {
+      if (void *Ptr = (*Jit)->getPointerToGlobalIfAvailable(V))
+	return Ptr;
+    }
+    return 0;
   }
 };
 ManagedStatic<JitPool> AllJits;
@@ -283,6 +300,22 @@ extern "C" {
   }
 }
 
+extern "C" {
+  // getPointerToNamedFunctionOrNull - same as the above, but returns
+  // NULL instead of aborting if the function cannot be found.
+  void *getPointerToNamedFunctionOrNull(const char *Name) {
+    return !AllJits->empty() ? AllJits->getPointerToNamedFunction(Name, false) : 0;
+  }
+}
+
+extern "C" {
+  // getPointerToGlobalIfAvailable - same as the above, but for global
+  // variables, and only for those that have been codegened already.
+  void *getPointerToGlobalIfAvailable(GlobalValue *V) {
+    return !AllJits->empty() ? AllJits->getPointerToGlobalIfAvailable(V) : 0;
+  }
+}
+
 JIT::JIT(Module *M, TargetMachine &tm, TargetJITInfo &tji,
          JITMemoryManager *JMM, CodeGenOpt::Level OptLevel, bool GVsWithCode)
   : ExecutionEngine(M), TM(tm), TJI(tji), AllocateGVsWithCode(GVsWithCode),
diff --git a/libclamav/c++/llvm/lib/Support/Allocator.cpp b/libclamav/c++/llvm/lib/Support/Allocator.cpp
index 7433247..d7cc20b 100644
--- a/libclamav/c++/llvm/lib/Support/Allocator.cpp
+++ b/libclamav/c++/llvm/lib/Support/Allocator.cpp
@@ -83,7 +83,7 @@ void BumpPtrAllocator::Reset(size_t Size, size_t Alignment, DTorFunction DTor) {
   MemSlab *Slab = CurSlab;
   while (Slab) {
     char *End = Slab == CurSlab ? CurPtr : (char*)Slab + Slab->Size;
-    for (char *Ptr = (char*)Slab+1; Ptr < End; Ptr += Size) {
+    for (char *Ptr = (char*)(Slab+1); Ptr < End; Ptr += Size) {
 	Ptr = AlignPtr(Ptr, Alignment);
 	if (Ptr + Size <= End)
 	    DTor(Ptr);
diff --git a/libclamav/c++/llvm/lib/Support/regengine.inc b/libclamav/c++/llvm/lib/Support/regengine.inc
index 0f27cfd..bf55543 100644
--- a/libclamav/c++/llvm/lib/Support/regengine.inc
+++ b/libclamav/c++/llvm/lib/Support/regengine.inc
@@ -72,11 +72,11 @@ struct match {
 	struct re_guts *g;
 	int eflags;
 	llvm_regmatch_t *pmatch;	/* [nsub+1] (0 element unused) */
-	char *offp;		/* offsets work from here */
-	char *beginp;		/* start of string -- virtual NUL precedes */
-	char *endp;		/* end of string -- virtual NUL here */
-	char *coldp;		/* can be no match starting before here */
-	char **lastpos;		/* [nplus+1] */
+	const char *offp;		/* offsets work from here */
+	const char *beginp;		/* start of string -- virtual NUL precedes */
+	const char *endp;		/* end of string -- virtual NUL here */
+	const char *coldp;		/* can be no match starting before here */
+	const char **lastpos;		/* [nplus+1] */
 	STATEVARS;
 	states st;		/* current states */
 	states fresh;		/* states for a fresh start */
@@ -84,11 +84,14 @@ struct match {
 	states empty;		/* empty set of states */
 };
 
-static int matcher(struct re_guts *, char *, size_t, llvm_regmatch_t[], int);
-static char *dissect(struct match *, char *, char *, sopno, sopno);
-static char *backref(struct match *, char *, char *, sopno, sopno, sopno, int);
-static char *fast(struct match *, char *, char *, sopno, sopno);
-static char *slow(struct match *, char *, char *, sopno, sopno);
+static int matcher(struct re_guts *, const char *, size_t,
+                   llvm_regmatch_t[], int);
+static const char *dissect(struct match *, const char *, const char *, sopno,
+                           sopno);
+static const char *backref(struct match *, const char *, const char *, sopno,
+                           sopno, sopno, int);
+static const char *fast(struct match *, const char *, const char *, sopno, sopno);
+static const char *slow(struct match *, const char *, const char *, sopno, sopno);
 static states step(struct re_guts *, sopno, sopno, states, int, states);
 #define MAX_RECURSION	100
 #define	BOL	(OUT+1)
@@ -125,18 +128,19 @@ static int nope = 0;
  - matcher - the actual matching engine
  */
 static int			/* 0 success, REG_NOMATCH failure */
-matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[],
+matcher(struct re_guts *g, const char *string, size_t nmatch,
+        llvm_regmatch_t pmatch[],
     int eflags)
 {
-	char *endp;
+	const char *endp;
 	size_t i;
 	struct match mv;
 	struct match *m = &mv;
-	char *dp;
+	const char *dp;
 	const sopno gf = g->firststate+1;	/* +1 for OEND */
 	const sopno gl = g->laststate;
-	char *start;
-	char *stop;
+	const char *start;
+	const char *stop;
 
 	/* simplify the situation where possible */
 	if (g->cflags&REG_NOSUB)
@@ -216,7 +220,7 @@ matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[]
 			dp = dissect(m, m->coldp, endp, gf, gl);
 		} else {
 			if (g->nplus > 0 && m->lastpos == NULL)
-				m->lastpos = (char **)malloc((g->nplus+1) *
+				m->lastpos = (const char **)malloc((g->nplus+1) *
 							sizeof(char *));
 			if (g->nplus > 0 && m->lastpos == NULL) {
 				free(m->pmatch);
@@ -287,21 +291,22 @@ matcher(struct re_guts *g, char *string, size_t nmatch, llvm_regmatch_t pmatch[]
 /*
  - dissect - figure out what matched what, no back references
  */
-static char *			/* == stop (success) always */
-dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
+static const char *			/* == stop (success) always */
+dissect(struct match *m, const char *start, const char *stop, sopno startst,
+        sopno stopst)
 {
 	int i;
 	sopno ss;	/* start sop of current subRE */
 	sopno es;	/* end sop of current subRE */
-	char *sp;	/* start of string matched by it */
-	char *stp;	/* string matched by it cannot pass here */
-	char *rest;	/* start of rest of string */
-	char *tail;	/* string unmatched by rest of RE */
+	const char *sp;	/* start of string matched by it */
+	const char *stp;	/* string matched by it cannot pass here */
+	const char *rest;	/* start of rest of string */
+	const char *tail;	/* string unmatched by rest of RE */
 	sopno ssub;	/* start sop of subsubRE */
 	sopno esub;	/* end sop of subsubRE */
-	char *ssp;	/* start of string matched by subsubRE */
-	char *sep;	/* end of string matched by subsubRE */
-	char *oldssp;	/* previous ssp */
+	const char *ssp;	/* start of string matched by subsubRE */
+	const char *sep;	/* end of string matched by subsubRE */
+	const char *oldssp;	/* previous ssp */
 
 	AT("diss", start, stop, startst, stopst);
 	sp = start;
@@ -360,7 +365,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
 			esub = es - 1;
 			/* did innards match? */
 			if (slow(m, sp, rest, ssub, esub) != NULL) {
-				char *dp = dissect(m, sp, rest, ssub, esub);
+				const char *dp = dissect(m, sp, rest, ssub, esub);
 				(void)dp; /* avoid warning if assertions off */
 				assert(dp == rest);
 			} else		/* no */
@@ -400,7 +405,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
 			assert(sep == rest);	/* must exhaust substring */
 			assert(slow(m, ssp, sep, ssub, esub) == rest);
 			{
-				char *dp = dissect(m, ssp, sep, ssub, esub);
+				const char *dp = dissect(m, ssp, sep, ssub, esub);
 				(void)dp; /* avoid warning if assertions off */
 				assert(dp == sep);
 			}
@@ -438,7 +443,7 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
 					assert(OP(m->g->strip[esub]) == O_CH);
 			}
 			{
-				char *dp = dissect(m, sp, rest, ssub, esub);
+				const char *dp = dissect(m, sp, rest, ssub, esub);
 				(void)dp; /* avoid warning if assertions off */
 				assert(dp == rest);
 			}
@@ -474,17 +479,17 @@ dissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
 /*
  - backref - figure out what matched what, figuring in back references
  */
-static char *			/* == stop (success) or NULL (failure) */
-backref(struct match *m, char *start, char *stop, sopno startst, sopno stopst,
-    sopno lev, int rec)			/* PLUS nesting level */
+static const char *			/* == stop (success) or NULL (failure) */
+backref(struct match *m, const char *start, const char *stop, sopno startst,
+        sopno stopst, sopno lev, int rec)			/* PLUS nesting level */
 {
 	int i;
 	sopno ss;	/* start sop of current subRE */
-	char *sp;	/* start of string matched by it */
+	const char *sp;	/* start of string matched by it */
 	sopno ssub;	/* start sop of subsubRE */
 	sopno esub;	/* end sop of subsubRE */
-	char *ssp;	/* start of string matched by subsubRE */
-	char *dp;
+	const char *ssp;	/* start of string matched by subsubRE */
+	const char *dp;
 	size_t len;
 	int hard;
 	sop s;
@@ -674,18 +679,19 @@ backref(struct match *m, char *start, char *stop, sopno startst, sopno stopst,
 /*
  - fast - step through the string at top speed
  */
-static char *			/* where tentative match ended, or NULL */
-fast(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
+static const char *			/* where tentative match ended, or NULL */
+fast(struct match *m, const char *start, const char *stop, sopno startst,
+     sopno stopst)
 {
 	states st = m->st;
 	states fresh = m->fresh;
 	states tmp = m->tmp;
-	char *p = start;
+	const char *p = start;
 	int c = (start == m->beginp) ? OUT : *(start-1);
 	int lastc;	/* previous c */
 	int flagch;
 	int i;
-	char *coldp;	/* last p after which no match was underway */
+	const char *coldp;	/* last p after which no match was underway */
 
 	CLEAR(st);
 	SET1(st, startst);
@@ -758,18 +764,19 @@ fast(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
 /*
  - slow - step through the string more deliberately
  */
-static char *			/* where it ended */
-slow(struct match *m, char *start, char *stop, sopno startst, sopno stopst)
+static const char *			/* where it ended */
+slow(struct match *m, const char *start, const char *stop, sopno startst,
+     sopno stopst)
 {
 	states st = m->st;
 	states empty = m->empty;
 	states tmp = m->tmp;
-	char *p = start;
+	const char *p = start;
 	int c = (start == m->beginp) ? OUT : *(start-1);
 	int lastc;	/* previous c */
 	int flagch;
 	int i;
-	char *matchp;	/* last p at which a match ended */
+	const char *matchp;	/* last p at which a match ended */
 
 	AT("slow", start, stop, startst, stopst);
 	CLEAR(st);
diff --git a/libclamav/c++/llvm/lib/Support/regexec.c b/libclamav/c++/llvm/lib/Support/regexec.c
index 7d70f6e..41fb2ea 100644
--- a/libclamav/c++/llvm/lib/Support/regexec.c
+++ b/libclamav/c++/llvm/lib/Support/regexec.c
@@ -155,7 +155,7 @@ llvm_regexec(const llvm_regex_t *preg, const char *string, size_t nmatch,
 	eflags = GOODFLAGS(eflags);
 
 	if (g->nstates <= (long)(CHAR_BIT*sizeof(states1)) && !(eflags&REG_LARGE))
-		return(smatcher(g, (char *)string, nmatch, pmatch, eflags));
+		return(smatcher(g, string, nmatch, pmatch, eflags));
 	else
-		return(lmatcher(g, (char *)string, nmatch, pmatch, eflags));
+		return(lmatcher(g, string, nmatch, pmatch, eflags));
 }
diff --git a/libclamav/c++/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/libclamav/c++/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 3d81afa..167a0e6 100644
--- a/libclamav/c++/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/libclamav/c++/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -2450,6 +2450,9 @@ void PrepareTailCall(SelectionDAG &DAG, SDValue &InFlag, SDValue &Chain,
   InFlag = Chain.getValue(1);
 }
 
+extern "C" void *getPointerToNamedFunctionOrNull(const char *Name);
+extern "C" void *getPointerToGlobalIfAvailable(GlobalValue *Value);
+
 static
 unsigned PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag,
                      SDValue &Chain, DebugLoc dl, int SPDiff, bool isTailCall,
@@ -2462,6 +2465,29 @@ unsigned PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag,
 
   unsigned CallOpc = isSVR4ABI ? PPCISD::CALL_SVR4 : PPCISD::CALL_Darwin;
 
+  // XXX Work around for http://llvm.org/bugs/show_bug.cgi?id=5201
+  // and http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=399
+  // for Shark.
+  //
+  // If the callee is an ExternalSymbol node, and the symbol can be
+  // resolved to a function pointer, then insert that pointer as a
+  // constant.  This causes the next block of code to fall into the
+  // block that emits an indirect call.  This works around
+  //
+  // This works for Shark because the only kinds of call that Shark
+  // makes that do not already fall into the indirect call block are
+  // calls to pre-existing external functions.
+  if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
+    void *FuncPtr = getPointerToNamedFunctionOrNull(S->getSymbol());
+    if (FuncPtr)
+      Callee = DAG.getConstant((uint64_t) FuncPtr, PtrVT);
+  }
+  if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
+    void *FuncPtr = getPointerToGlobalIfAvailable(G->getGlobal());
+    if (FuncPtr)
+      Callee = DAG.getConstant((uint64_t) FuncPtr, PtrVT);
+  }
+
   // If the callee is a GlobalAddress/ExternalSymbol node (quite common, every
   // direct call is) turn it into a TargetGlobalAddress/TargetExternalSymbol
   // node so that legalize doesn't hack it.
diff --git a/libclamav/c++/llvm/lib/Target/X86/X86.h b/libclamav/c++/llvm/lib/Target/X86/X86.h
index d76d811..924424d 100644
--- a/libclamav/c++/llvm/lib/Target/X86/X86.h
+++ b/libclamav/c++/llvm/lib/Target/X86/X86.h
@@ -67,6 +67,12 @@ TargetAsmBackend *createX86_64AsmBackend(const Target &, MCAssembler &);
 ///
 FunctionPass *createEmitX86CodeToMemory();
 
+/// createX86MaxStackAlignmentHeuristicPass - This function returns a pass
+/// which determines whether the frame pointer register should be
+/// reserved in case dynamic stack alignment is later required.
+///
+FunctionPass *createX86MaxStackAlignmentHeuristicPass();
+
 extern Target TheX86_32Target, TheX86_64Target;
 
 } // End llvm namespace
diff --git a/libclamav/c++/llvm/lib/Target/X86/X86MachineFunctionInfo.h b/libclamav/c++/llvm/lib/Target/X86/X86MachineFunctionInfo.h
index 4b2529b..a916c63 100644
--- a/libclamav/c++/llvm/lib/Target/X86/X86MachineFunctionInfo.h
+++ b/libclamav/c++/llvm/lib/Target/X86/X86MachineFunctionInfo.h
@@ -52,6 +52,10 @@ class X86MachineFunctionInfo : public MachineFunctionInfo {
   /// relocation models.
   unsigned GlobalBaseReg;
 
+  /// ReserveFP - whether the function should reserve the frame pointer
+  /// when allocating, even if there may not actually be a frame pointer used.
+  bool ReserveFP;
+
 public:
   X86MachineFunctionInfo() : ForceFramePointer(false),
                              CalleeSavedFrameSize(0),
@@ -68,7 +72,8 @@ public:
       ReturnAddrIndex(0),
       TailCallReturnAddrDelta(0),
       SRetReturnReg(0),
-      GlobalBaseReg(0) {}
+      GlobalBaseReg(0),
+      ReserveFP(false) {}
   
   bool getForceFramePointer() const { return ForceFramePointer;} 
   void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; }
@@ -90,6 +95,9 @@ public:
 
   unsigned getGlobalBaseReg() const { return GlobalBaseReg; }
   void setGlobalBaseReg(unsigned Reg) { GlobalBaseReg = Reg; }
+
+  bool getReserveFP() const { return ReserveFP; }
+  void setReserveFP(bool reserveFP) { ReserveFP = reserveFP; }
 };
 
 } // End llvm namespace
diff --git a/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.cpp b/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 4aeeecb..4fe4d0a 100644
--- a/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -1489,3 +1489,46 @@ unsigned getX86SubSuperRegister(unsigned Reg, EVT VT, bool High) {
 }
 
 #include "X86GenRegisterInfo.inc"
+
+namespace {
+  struct MSAH : public MachineFunctionPass {
+    static char ID;
+    MSAH() : MachineFunctionPass(&ID) {}
+
+    virtual bool runOnMachineFunction(MachineFunction &MF) {
+      const X86TargetMachine *TM =
+        static_cast<const X86TargetMachine *>(&MF.getTarget());
+      const X86RegisterInfo *X86RI = TM->getRegisterInfo();
+      MachineRegisterInfo &RI = MF.getRegInfo();
+      X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
+      unsigned StackAlignment = X86RI->getStackAlignment();
+
+      // Be over-conservative: scan over all vreg defs and find whether vector
+      // registers are used. If yes, there is a possibility that vector register
+      // will be spilled and thus require dynamic stack realignment.
+      for (unsigned RegNum = TargetRegisterInfo::FirstVirtualRegister;
+           RegNum < RI.getLastVirtReg(); ++RegNum)
+        if (RI.getRegClass(RegNum)->getAlignment() > StackAlignment) {
+          FuncInfo->setReserveFP(true);
+          return true;
+        }
+
+      // Nothing to do
+      return false;
+    }
+
+    virtual const char *getPassName() const {
+      return "X86 Maximal Stack Alignment Check";
+    }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesCFG();
+      MachineFunctionPass::getAnalysisUsage(AU);
+    }
+  };
+
+  char MSAH::ID = 0;
+}
+
+FunctionPass*
+llvm::createX86MaxStackAlignmentHeuristicPass() { return new MSAH(); }
diff --git a/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.td b/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.td
index ed2ce6c..0a6f657 100644
--- a/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.td
+++ b/libclamav/c++/llvm/lib/Target/X86/X86RegisterInfo.td
@@ -352,11 +352,12 @@ def GR8 : RegisterClass<"X86", [i8],  8,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       // Does the function dedicate RBP / EBP to being a frame ptr?
       if (!Subtarget.is64Bit())
         // In 32-mode, none of the 8-bit registers aliases EBP or ESP.
         return begin() + 8;
-      else if (RI->hasFP(MF))
+      else if (RI->hasFP(MF) || MFI->getReserveFP())
         // If so, don't allocate SPL or BPL.
         return array_endof(X86_GR8_AO_64) - 1;
       else
@@ -396,9 +397,10 @@ def GR16 : RegisterClass<"X86", [i16], 16,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       if (Subtarget.is64Bit()) {
         // Does the function dedicate RBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate SP or BP.
           return array_endof(X86_GR16_AO_64) - 1;
         else
@@ -406,7 +408,7 @@ def GR16 : RegisterClass<"X86", [i16], 16,
           return array_endof(X86_GR16_AO_64);
       } else {
         // Does the function dedicate EBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate SP or BP.
           return begin() + 6;
         else
@@ -447,9 +449,10 @@ def GR32 : RegisterClass<"X86", [i32], 32,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       if (Subtarget.is64Bit()) {
         // Does the function dedicate RBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate ESP or EBP.
           return array_endof(X86_GR32_AO_64) - 1;
         else
@@ -457,7 +460,7 @@ def GR32 : RegisterClass<"X86", [i32], 32,
           return array_endof(X86_GR32_AO_64);
       } else {
         // Does the function dedicate EBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate ESP or EBP.
           return begin() + 6;
         else
@@ -484,9 +487,11 @@ def GR64 : RegisterClass<"X86", [i64], 64,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       if (!Subtarget.is64Bit())
         return begin();  // None of these are allocatable in 32-bit.
-      if (RI->hasFP(MF)) // Does the function dedicate RBP to being a frame ptr?
+      // Does the function dedicate RBP to being a frame ptr?
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         return end()-3;  // If so, don't allocate RIP, RSP or RBP
       else
         return end()-2;  // If not, just don't allocate RIP or RSP
@@ -582,8 +587,9 @@ def GR16_NOREX : RegisterClass<"X86", [i16], 16,
     GR16_NOREXClass::allocation_order_end(const MachineFunction &MF) const {
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       // Does the function dedicate RBP / EBP to being a frame ptr?
-      if (RI->hasFP(MF))
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         // If so, don't allocate SP or BP.
         return end() - 2;
       else
@@ -604,8 +610,9 @@ def GR32_NOREX : RegisterClass<"X86", [i32], 32,
     GR32_NOREXClass::allocation_order_end(const MachineFunction &MF) const {
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       // Does the function dedicate RBP / EBP to being a frame ptr?
-      if (RI->hasFP(MF))
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         // If so, don't allocate ESP or EBP.
         return end() - 2;
       else
@@ -626,8 +633,9 @@ def GR64_NOREX : RegisterClass<"X86", [i64], 64,
     GR64_NOREXClass::allocation_order_end(const MachineFunction &MF) const {
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       // Does the function dedicate RBP to being a frame ptr?
-      if (RI->hasFP(MF))
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         // If so, don't allocate RIP, RSP or RBP.
         return end() - 3;
       else
@@ -668,9 +676,10 @@ def GR32_NOSP : RegisterClass<"X86", [i32], 32,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       if (Subtarget.is64Bit()) {
         // Does the function dedicate RBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate EBP.
           return array_endof(X86_GR32_NOSP_AO_64) - 1;
         else
@@ -678,7 +687,7 @@ def GR32_NOSP : RegisterClass<"X86", [i32], 32,
           return array_endof(X86_GR32_NOSP_AO_64);
       } else {
         // Does the function dedicate EBP to being a frame ptr?
-        if (RI->hasFP(MF))
+        if (RI->hasFP(MF) || MFI->getReserveFP())
           // If so, don't allocate EBP.
           return begin() + 6;
         else
@@ -703,9 +712,11 @@ def GR64_NOSP : RegisterClass<"X86", [i64], 64,
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
       const X86Subtarget &Subtarget = TM.getSubtarget<X86Subtarget>();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       if (!Subtarget.is64Bit())
         return begin();  // None of these are allocatable in 32-bit.
-      if (RI->hasFP(MF)) // Does the function dedicate RBP to being a frame ptr?
+      // Does the function dedicate RBP to being a frame ptr?
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         return end()-1;  // If so, don't allocate RBP
       else
         return end();  // If not, any reg in this class is ok.
@@ -726,8 +737,9 @@ def GR64_NOREX_NOSP : RegisterClass<"X86", [i64], 64,
   {
       const TargetMachine &TM = MF.getTarget();
       const TargetRegisterInfo *RI = TM.getRegisterInfo();
+      const X86MachineFunctionInfo *MFI = MF.getInfo<X86MachineFunctionInfo>();
       // Does the function dedicate RBP to being a frame ptr?
-      if (RI->hasFP(MF))
+      if (RI->hasFP(MF) || MFI->getReserveFP())
         // If so, don't allocate RBP.
         return end() - 1;
       else
diff --git a/libclamav/c++/llvm/lib/Target/X86/X86TargetMachine.cpp b/libclamav/c++/llvm/lib/Target/X86/X86TargetMachine.cpp
index 56ddaf8..98f0dc0 100644
--- a/libclamav/c++/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/libclamav/c++/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -160,6 +160,7 @@ bool X86TargetMachine::addInstSelector(PassManagerBase &PM,
 
 bool X86TargetMachine::addPreRegAlloc(PassManagerBase &PM,
                                       CodeGenOpt::Level OptLevel) {
+  PM.add(createX86MaxStackAlignmentHeuristicPass());
   return false;  // -print-machineinstr shouldn't print after this.
 }
 
diff --git a/libclamav/c++/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/libclamav/c++/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 7b1e9c0..f58ca6c 100644
--- a/libclamav/c++/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/libclamav/c++/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -955,7 +955,8 @@ static bool ValueIsOnlyUsedLocallyOrStoredToOneGlobal(Instruction *V,
       continue; // Otherwise, storing through it, or storing into GV... fine.
     }
     
-    if (isa<GetElementPtrInst>(Inst)) {
+    // Must index into the array and into the struct.
+    if (isa<GetElementPtrInst>(Inst) && Inst->getNumOperands() >= 3) {
       if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(Inst, GV, PHIs))
         return false;
       continue;
diff --git a/libclamav/c++/llvm/test/ExecutionEngine/2003-01-04-ArgumentBug.ll b/libclamav/c++/llvm/test/ExecutionEngine/2003-01-04-ArgumentBug.ll
deleted file mode 100644
index 5d37e96..0000000
--- a/libclamav/c++/llvm/test/ExecutionEngine/2003-01-04-ArgumentBug.ll
+++ /dev/null
@@ -1,14 +0,0 @@
-; RUN: llvm-as %s -o %t.bc
-; RUN: lli %t.bc > /dev/null
-
-define i32 @foo(i32 %X, i32 %Y, double %A) {
-	%cond212 = fcmp une double %A, 1.000000e+00		; <i1> [#uses=1]
-	%cast110 = zext i1 %cond212 to i32		; <i32> [#uses=1]
-	ret i32 %cast110
-}
-
-define i32 @main() {
-	%reg212 = call i32 @foo( i32 0, i32 1, double 1.000000e+00 )		; <i32> [#uses=1]
-	ret i32 %reg212
-}
-
diff --git a/libclamav/c++/llvm/autoconf/m4/cxx_flag_check.m4 b/libclamav/c++/m4/cxx_flag_check.m4
similarity index 100%
copy from libclamav/c++/llvm/autoconf/m4/cxx_flag_check.m4
copy to libclamav/c++/m4/cxx_flag_check.m4
diff --git a/libclamav/cab.c b/libclamav/cab.c
index 3ab4812..5b2452d 100644
--- a/libclamav/cab.c
+++ b/libclamav/cab.c
@@ -277,24 +277,24 @@ int cab_open(int fd, off_t offset, struct cab_archive *cab)
 	}
     }
 
-    if(cab->flags & 0x0001) { /* preceeding cabinet */
+    if(cab->flags & 0x0001) { /* preceding cabinet */
 	/* name */
 	pt = cab_readstr(fd, &ret);
 	if(ret)
 	    return ret;
 	if(cab_chkname(pt, 0))
-	    cli_dbgmsg("CAB: Invalid name of preceeding cabinet\n");
+	    cli_dbgmsg("CAB: Invalid name of preceding cabinet\n");
 	else
-	    cli_dbgmsg("CAB: Preceeding cabinet name: %s\n", pt);
+	    cli_dbgmsg("CAB: Preceding cabinet name: %s\n", pt);
 	free(pt);
 	/* info */
 	pt = cab_readstr(fd, &ret);
 	if(ret)
 	    return ret;
 	if(cab_chkname(pt, 0))
-	    cli_dbgmsg("CAB: Invalid info for preceeding cabinet\n");
+	    cli_dbgmsg("CAB: Invalid info for preceding cabinet\n");
 	else
-	    cli_dbgmsg("CAB: Preceeding cabinet info: %s\n", pt);
+	    cli_dbgmsg("CAB: Preceding cabinet info: %s\n", pt);
 	free(pt);
     }
 
diff --git a/libclamav/cache.c b/libclamav/cache.c
index 5a8380e..aeb745a 100644
--- a/libclamav/cache.c
+++ b/libclamav/cache.c
@@ -33,6 +33,14 @@
 #include "cache.h"
 #include "fmap.h"
 
+#ifdef CL_THREAD_SAFE
+static pthread_mutex_t pool_mutex = PTHREAD_MUTEX_INITIALIZER;
+#else
+#define pthread_mutex_lock(x) 0
+#define pthread_mutex_unlock(x)
+#define pthread_mutex_init(a, b) 0
+#define pthread_mutex_destroy(a) do { } while(0)
+#endif
 
 /* The number of root trees and the chooser function 
    Each tree is protected by a mutex against concurrent access */
@@ -158,7 +166,6 @@ static inline void lru_addtail(struct cache_set *map, struct cache_key *newkey)
     map->lru_tail = newkey;
 }
 
-static pthread_mutex_t pool_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void cacheset_add(struct cache_set *map, unsigned char *md5, size_t size, mpool_t *mempool);
 static int cacheset_init(struct cache_set *map, mpool_t *mempool);
@@ -575,7 +582,9 @@ static inline void cacheset_add(struct cache_set *cs, unsigned char *md5, size_t
 
 struct CACHE {
     struct cache_set cacheset;
+#ifdef CL_THREAD_SAFE
     pthread_mutex_t mutex;
+#endif
 };
 
 /* Allocates the trees for the engine cache */
diff --git a/libclamav/clamav.h b/libclamav/clamav.h
index 7535b97..e083e4b 100644
--- a/libclamav/clamav.h
+++ b/libclamav/clamav.h
@@ -109,6 +109,8 @@ typedef enum {
 #define CL_SCAN_PARTIAL_MESSAGE         0x40000
 #define CL_SCAN_HEURISTIC_PRECEDENCE    0x80000
 
+#define CL_SCAN_INTERNAL_COLLECT_SHA    0x80000000 /* Enables hash output in sha-collect builds - for internal use only */
+
 /* recommended scan settings */
 #define CL_SCAN_STDOPT		(CL_SCAN_ARCHIVE | CL_SCAN_MAIL | CL_SCAN_OLE2 | CL_SCAN_PDF | CL_SCAN_HTML | CL_SCAN_PE | CL_SCAN_ALGORITHMIC | CL_SCAN_ELF)
 
diff --git a/libclamav/clambc.h b/libclamav/clambc.h
index c268b05..4351567 100644
--- a/libclamav/clambc.h
+++ b/libclamav/clambc.h
@@ -26,12 +26,14 @@ struct bytecode_metadata {
     char *compiler;
     char *sigmaker;
     uint64_t timestamp;
-    unsigned long maxStack, maxMem;
-    unsigned long maxTime;
+    unsigned formatlevel;
+    unsigned minfunc, maxfunc;
+    unsigned maxresource;/* reserved */
     unsigned targetExclude;
 };
 
-#define BC_FUNC_LEVEL 6
+#define BC_FORMAT_096 6
+#define BC_FORMAT_LEVEL 7
 #define BC_HEADER "ClamBC"
 
 enum bc_opcode {
@@ -124,8 +126,11 @@ enum bc_global {
   GLOBAL_VIRUSNAMES,
   GLOBAL_PEDATA,
   GLOBAL_FILESIZE,
+  GLOBAL_MATCH_OFFSETS,
   _LAST_GLOBAL
 };
 
 #define BC_START_TID 69
+
+
 #endif
diff --git a/libclamav/cvd.c b/libclamav/cvd.c
index 0de7aa8..42ab23b 100644
--- a/libclamav/cvd.c
+++ b/libclamav/cvd.c
@@ -554,14 +554,16 @@ int cl_cvdverify(const char *file)
     return ret;
 }
 
-int cli_cvdload(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, unsigned int cld, const char *dbname)
+int cli_cvdload(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, unsigned int cld, const char *filename)
 {
-	struct cl_cvd cvd;
+	struct cl_cvd cvd, dupcvd;
+	FILE *dupfs;
 	int ret;
 	time_t s_time;
 	int cfd;
 	struct cli_dbio dbio;
 	struct cli_dbinfo *dbinfo = NULL;
+	char *dupname;
 
     cli_dbgmsg("in cli_cvdload()\n");
 
@@ -569,7 +571,31 @@ int cli_cvdload(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigne
     if((ret = cli_cvdverify(fs, &cvd, cld)))
 	return ret;
 
-    if(strstr(dbname, "daily.")) {
+    /* check for duplicate db */
+    dupname = cli_strdup(filename);
+    if(!dupname)
+	return CL_EMEM;
+    dupname[strlen(dupname) - 2] = (cld ? 'v' : 'l');
+    if(!access(dupname, R_OK) && (dupfs = fopen(dupname, "rb"))) {
+	if((ret = cli_cvdverify(dupfs, &dupcvd, !cld))) {
+	    fclose(dupfs);
+	    free(dupname);
+	    return ret;
+	}
+	fclose(dupfs);
+	if(dupcvd.version > cvd.version) {
+	    cli_warnmsg("Detected duplicate databases %s and %s. The %s database is older and will not be loaded, you should manually remove it from the database directory.\n", filename, dupname, filename);
+	    free(dupname);
+	    return CL_SUCCESS;
+	} else if(dupcvd.version == cvd.version && !cld) {
+	    cli_warnmsg("Detected duplicate databases %s and %s, please manually remove one of them\n", filename, dupname);
+	    free(dupname);
+	    return CL_SUCCESS;
+	}
+    }
+    free(dupname);
+
+    if(strstr(filename, "daily.")) {
 	time(&s_time);
 	if(cvd.stime > s_time) {
 	    if(cvd.stime - (unsigned int ) s_time > 3600) {
diff --git a/libclamav/cvd.h b/libclamav/cvd.h
index 9b0c09c..e51c2b4 100644
--- a/libclamav/cvd.h
+++ b/libclamav/cvd.h
@@ -36,7 +36,7 @@ struct cli_dbio {
     SHA256_CTX sha256ctx;
 };
 
-int cli_cvdload(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, unsigned int cld, const char *dbname);
+int cli_cvdload(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, unsigned int cld, const char *filename);
 int cli_cvdunpack(const char *file, const char *dir);
 
 #endif
diff --git a/libclamav/dconf.c b/libclamav/dconf.c
index 77f40a0..552a01a 100644
--- a/libclamav/dconf.c
+++ b/libclamav/dconf.c
@@ -258,7 +258,7 @@ void cli_dconf_print(struct cli_dconf *dconf)
 		continue;
 	} else if(!strcmp(modules[i].mname, "BYTECODE")) {
 	    if(!bytecode) {
-		cli_dbgmsg("Module BYTECODE %s\n", dconf->phishing ? "On" : "Off");
+		cli_dbgmsg("Module BYTECODE %s\n", dconf->bytecode ? "On" : "Off");
 		bytecode = 1;
 	    }
 	    if(dconf->bytecode)
diff --git a/libclamav/entconv.c b/libclamav/entconv.c
index c073ac0..56e45da 100644
--- a/libclamav/entconv.c
+++ b/libclamav/entconv.c
@@ -735,16 +735,16 @@ static int in_iconv_u16(const m_area_t* in_m_area, iconv_t* iconv_struct, m_area
 				/* not enough space in output buffer */
 				break;
 			}
-			cli_dbgmsg(MODULE_NAME "iconv error:%s\n", cli_strerror(errno, err, sizeof(err)));
+			/*cli_dbgmsg(MODULE_NAME "iconv error:%s\n", cli_strerror(errno, err, sizeof(err)));*/
 		} else if(outleft == outleft_last) {
 			cli_dbgmsg(MODULE_NAME "iconv stall (no output)\n");
 		} else {
 			/* everything ok */
 			continue;
 		}
-		cli_dbgmsg(MODULE_NAME "resuming (inleft:%lu, outleft:%lu, inpos:%ld, %ld)\n",
+		/*cli_dbgmsg(MODULE_NAME "resuming (inleft:%lu, outleft:%lu, inpos:%ld, %ld)\n",
 					inleft, outleft, input - (char*)in_m_area->buffer,
-					out - (char*)out_m_area->buffer);
+					out - (char*)out_m_area->buffer);*/
 		/* output raw byte, and resume at next byte */
 		if(outleft < 2) break;
 		outleft -= 2;
diff --git a/libclamav/filtering.c b/libclamav/filtering.c
index 9300172..39b8ee4 100644
--- a/libclamav/filtering.c
+++ b/libclamav/filtering.c
@@ -266,6 +266,7 @@ struct char_spec {
 	uint8_t start;
 	uint8_t end;
 	uint8_t step;
+	uint8_t negative;
 };
 
 static inline unsigned char spec_ith_char(const struct char_spec *spec, unsigned i)
@@ -279,7 +280,7 @@ static inline unsigned char spec_ith_char(const struct char_spec *spec, unsigned
 	return i;
 }
 
-static const struct char_spec full_range = {NULL, 0,0xff,1};
+static const struct char_spec full_range = {NULL, 0,0xff,1,0};
 
 static inline int spec_is_fullrange(const struct char_spec *spec0, const struct char_spec *spec1)
 {
@@ -292,6 +293,24 @@ static inline int spec_is_fullrange(const struct char_spec *spec0, const struct
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 #endif
 
+#define SPEC_FOREACH(spec0, k0, spec1, k1) do {\
+    unsigned char c0 = spec_ith_char(spec0, k0);\
+    unsigned char c1 = spec_ith_char(spec1, k1);\
+    unsigned c0end, c1end, cc0,cc1;\
+    c0end = spec0->negative ? 255 : c0;\
+    c1end = spec1->negative ? 255 : c1;\
+    cc0 = spec0->negative ? 0 : c0;\
+    cc1 = spec1->negative ? 0 : c1;\
+    for (;cc0 <= c0end;cc0++) {\
+	for (;cc1 <= c1end; cc1++) {\
+	    uint16_t a = cc0 | (cc1<<8);\
+	    if (spec0->negative && cc0 == c0)\
+	    continue;\
+	    if (spec1->negative && cc1 == c1)\
+	    continue;
+
+#define SPEC_END_FOR }}} while(0)
+
 enum badness {
 	reject,
 	/* try to avoid if possible */
@@ -343,11 +362,10 @@ static inline void get_score(enum badness badness, unsigned i, const struct filt
 	/* at most 256 iterations here, otherwise base would be negative */
 	for(k0=spec0->start;k0 <= spec0->end;k0 += spec0->step) {
 		for(k1=spec1->start;k1 <= spec1->end;k1 += spec1->step) {
-			unsigned char c0 = spec_ith_char(spec0, k0);
-			unsigned char c1 = spec_ith_char(spec1, k1);
-			uint16_t a = c0 | (c1<<8);
+		    SPEC_FOREACH(spec0, k0, spec1, k1) {
 			num_introduced += filter_isset(m, i, a);
 			num_end_introduced += filter_end_isset(m, i, a);
+		    } SPEC_END_FOR;
 		}
 	}
 	*score = base - num_introduced;
@@ -396,8 +414,12 @@ static inline void add_choice(struct choice *choices, unsigned *cnt, unsigned i,
 
 static inline int32_t spec_iter(const struct char_spec *spec)
 {
-	assert(spec->step);
-	return (1 + spec->end - spec->start)/spec->step;
+    unsigned count;
+    assert(spec->step);
+    count = (1 + spec->end - spec->start)/spec->step;
+    if (spec->negative) /* all chars except itself are added */
+	count *= 254;
+    return count;
 }
 
 int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
@@ -412,11 +434,12 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 	int32_t best_score = -0x7fffffff;
 	unsigned best_score_i = 0;
 	unsigned best_score_len = 0;
-	struct char_spec *spec0, *spec1;
+	struct char_spec *spec0 = NULL, *spec1 = NULL;
 
 	struct choice choices[MAX_CHOICES];
 	unsigned choices_cnt = 0;
 	unsigned prefix_len = pat->prefix_length;
+	unsigned speci;
 
 	j = MIN(prefix_len + pat->length, MAXPATLEN);
 	for(i=0;i<j;i++) {
@@ -431,11 +454,22 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 		return filter_add_static(m, patc, j, pat->virname);
 	}
 	cli_perf_log_count(TRIE_ORIG_LEN, j > 8 ? 8 : j);
+	i = 0;
+	if (!prefix_len) {
+	    while ((pat->pattern[i] & CLI_MATCH_WILDCARD) == CLI_MATCH_SPECIAL) {
+		/* we support only ALT_CHAR, skip the rest */
+		if (pat->special_table[altcnt]->type == 1)
+		    break;
+		altcnt++;
+		i++;
+	    }
+	}
 	/* transform AC characters into our representation */
-	for (i=0;i<j && !stop; i++) {
-		struct char_spec *spec = &chars[i];
+	for (speci=0;i<j && !stop; speci++,i++) {
+		struct char_spec *spec = &chars[speci];
 		const uint16_t p = i < prefix_len ? pat->prefix[i] : pat->pattern[i - prefix_len];
 		spec->alt = NULL;
+		spec->negative = 0;
 		switch (p & CLI_MATCH_WILDCARD) {
 			case CLI_MATCH_CHAR:
 				spec->start = spec->end = (uint8_t)p;
@@ -450,6 +484,7 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 				assert(pat->special_table);
 				/* assert(altcnt < pat->alt); */
 				assert(pat->special_table[altcnt]);
+				spec->negative = pat->special_table[altcnt]->negative;
 				switch (pat->special_table[altcnt++]->type) {
 				    case 1: /* ALT_CHAR */
 					spec->start = 0;
@@ -459,8 +494,7 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 					break;
 				    default:
 					stop = 1;
-					break;
-					/* TODO: should something be done here?
+					break;	/* TODO: should something be done here?
 					 * */
 				}
 				break;
@@ -479,8 +513,8 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 				return -1;
 		}
 	}
-	if (stop) --i;
-	j = i;
+	if (stop) --speci;
+	j = speci;
 	if (j < 2) {
 		if (stop)
 			cli_warnmsg("Don't know how to create filter for: %s\n",pat->virname);
@@ -508,6 +542,10 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 				for(k1=spec1->start;k1 <= spec1->end;k1 += spec1->step) {
 					unsigned char c0 = spec_ith_char(spec0, k0);
 					unsigned char c1 = spec_ith_char(spec1, k1);
+					if (spec0->negative || spec1->negative) {
+					    scor = avoid_anywhere;
+					    break;
+					}
 					if ((!c0 && !c1) || (c0 == 0xff && c1 == 0xff)) {
 						scor = avoid_first;
 						break;
@@ -630,26 +668,28 @@ int  filter_add_acpatt(struct filter *m, const struct cli_ac_patt *pat)
 
 		for(k0=spec0->start;k0 <= spec0->end;k0 += spec0->step) {
 			for(k1=spec1->start;k1 <= spec1->end;k1 += spec1->step) {
-				unsigned char c0 = spec_ith_char(spec0, k0);
-				unsigned char c1 = spec_ith_char(spec1, k1);
-				if (!c0 && !c1 && !i) {
+			    SPEC_FOREACH(spec0, k0, spec1, k1) {
+				if (!cc0 && !cc1 && !i) {
 					detailed_dbg("filter (warning): subsignature begins with zero: %s\n",pat->virname);
 				}
-				filter_set_atpos(m, i, c0 | (c1<<8));
+				filter_set_atpos(m, i, a);
+			    } SPEC_END_FOR;
 			}
 		}
 	}
 
 	j  = best_score_len - 2;
-	for (k0=spec0->start;k0 <= spec0->end;k0 += spec0->step) {
+	if (spec0 && spec1) {
+	    for (k0=spec0->start;k0 <= spec0->end;k0 += spec0->step) {
 		for (k1=spec1->start;k1 <= spec1->end;k1 += spec1->step) {
-			unsigned char c0 = spec_ith_char(spec0, k0);
-			unsigned char c1 = spec_ith_char(spec1, k1);
-			if (!c0 && !c1) {
-				detailed_dbg("filter (warning): subsignature ends with zero: %s\n",pat->virname);
+		    SPEC_FOREACH(spec0, k0, spec1, k1) {
+			if (!cc0 && !cc1) {
+			    detailed_dbg("filter (warning): subsignature ends with zero: %s\n",pat->virname);
 			}
-			filter_set_end(m, j, c0 | (c1<<8));
+			filter_set_end(m, j, a);
+		    } SPEC_END_FOR;
 		}
+	    }
 	}
 	return j+2;
 }
@@ -699,7 +739,6 @@ __hot__ int filter_search_ext(const struct filter *m, const unsigned char *data,
 	uint8_t state = ~0;
 	const uint8_t *B = m->B;
 	const uint8_t *End = m->end;
-	uint8_t shortest, longest=0;
 
 	if (len < 2) return -1;
 	/* look for first match */
diff --git a/libclamav/fmap.c b/libclamav/fmap.c
index 19d5b4f..19437eb 100644
--- a/libclamav/fmap.c
+++ b/libclamav/fmap.c
@@ -35,6 +35,7 @@
 #include <sys/mman.h>
 #endif
 #endif
+#include <errno.h>
 
 #ifdef C_LINUX
 #include <pthread.h>
@@ -91,13 +92,15 @@ pthread_mutex_t fmap_mutex = PTHREAD_MUTEX_INITIALIZER;
    which may in turn prevent some mmap constants to be defined */
 ssize_t pread(int fd, void *buf, size_t count, off_t offset);
 
-fmap_t *fmap(int fd, off_t offset, size_t len) {
+
+fmap_t *fmap_check_empty(int fd, off_t offset, size_t len, int *empty) {
     unsigned int pages, mapsz, hdrsz;
     unsigned short dumb = 1;
     int pgsz = cli_getpagesize();
     struct stat st;
     fmap_t *m;
 
+    *empty = 0;
     if(fstat(fd, &st)) {
 	cli_warnmsg("fmap: fstat failed\n");
 	return NULL;
@@ -108,7 +111,8 @@ fmap_t *fmap(int fd, off_t offset, size_t len) {
     }
     if(!len) len = st.st_size - offset; /* bound checked later */
     if(!len) {
-	cli_warnmsg("fmap: attempted void mapping\n");
+	cli_dbgmsg("fmap: attempted void mapping\n");
+	*empty = 1;
 	return NULL;
     }
     if(!CLI_ISCONTAINED(0, st.st_size, offset, len)) {
@@ -192,7 +196,7 @@ static void fmap_aging(fmap_t *m) {
 		/* and we mmap the page over so the kernel knows there's nothing good in there */
 		fmap_lock;
 		if(mmap(pptr, m->pgsz, PROT_READ | PROT_WRITE, MAP_FIXED|MAP_PRIVATE|ANONYMOUS_MAP, -1, 0) == MAP_FAILED)
-		    cli_warnmsg("fmap_aging: kernel hates you\n");
+		    cli_dbgmsg("fmap_aging: kernel hates you\n");
 		fmap_unlock;
 	    }
 	    m->paged -= avail;
@@ -203,8 +207,8 @@ static void fmap_aging(fmap_t *m) {
 
 
 static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count, unsigned int lock_count) {
-    size_t readsz = 0, got;
-    char *pptr = NULL;
+    size_t readsz = 0, eintr_off, got;
+    char *pptr = NULL, err[256];
     uint32_t s;
     unsigned int i, page = first_page, force_read = 0;
 
@@ -271,10 +275,27 @@ static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count,
 		}
 	    }
 
-	    if((got=pread(m->fd, pptr, readsz, m->offset + first_page * m->pgsz)) != readsz) {
-		cli_warnmsg("pread fail: page %u pages %u map-offset %lu - asked for %lu bytes, got %lu\n", first_page, m->pages, (long unsigned int)m->offset, (long unsigned int)readsz, (long unsigned int)got);
+	    eintr_off = 0;
+	    while(readsz) {
+		got=pread(m->fd, pptr, readsz, eintr_off + m->offset + first_page * m->pgsz);
+
+		if(got < 0 && errno == EINTR)
+		    continue;
+
+		if(got > 0) {
+		    pptr += got;
+		    eintr_off += got;
+		    readsz -= got;
+		    continue;
+		}
+
+		if(got <0)
+		    cli_errmsg("fmap_readpage: pread error: %s\n", cli_strerror(errno, err, sizeof(err)));
+		else
+		    cli_warnmsg("fmap_readpage: pread fail: asked for %lu bytes @ offset %lu, got %lu\n", (long unsigned int)readsz, (long unsigned int)(eintr_off + m->offset + first_page * m->pgsz), (long unsigned int)got);
 		return 1;
 	    }
+
 	    pptr = NULL;
 	    force_read = 0;
 	    readsz = 0;
@@ -308,10 +329,8 @@ static void *fmap_need(fmap_t *m, size_t at, size_t len, int lock) {
     if(!len)
 	return NULL;
 
-    if(!CLI_ISCONTAINED(0, m->len, at, len)) {
-	cli_dbgmsg("fmap: attempted oof need\n");
+    if(!CLI_ISCONTAINED(0, m->len, at, len))
 	return NULL;
-    }
 
     fmap_aging(m);
 
@@ -495,13 +514,14 @@ void *fmap_gets(fmap_t *m, char *dst, size_t *at, size_t max_len) {
 
 /* vvvvv WIN32 STUFF BELOW vvvvv */
 
-fmap_t *fmap(int fd, off_t offset, size_t len) { /* WIN32 */
+fmap_t *fmap_check_empty(int fd, off_t offset, size_t len, int *empty) { /* WIN32 */
     unsigned int pages, mapsz, hdrsz;
     unsigned short dumb = 1;
     int pgsz = cli_getpagesize();
     struct stat st;
     fmap_t *m;
 
+    *empty = 0;
     if(fstat(fd, &st)) {
 	cli_warnmsg("fmap: fstat failed\n");
 	return NULL;
@@ -512,7 +532,8 @@ fmap_t *fmap(int fd, off_t offset, size_t len) { /* WIN32 */
     }
     if(!len) len = st.st_size - offset; /* bound checked later */
     if(!len) {
-	cli_warnmsg("fmap: attempted void mapping\n");
+	cli_dbgmsg("fmap: attempted void mapping\n");
+	*empty = 1;
 	return NULL;
     }
     if(!CLI_ISCONTAINED(0, st.st_size, offset, len)) {
@@ -563,10 +584,9 @@ void funmap(fmap_t *m) { /* WIN32 */
 }
 
 static void *fmap_need(fmap_t *m, size_t at, size_t len) { /* WIN32 */
-    if(!CLI_ISCONTAINED(0, m->len, at, len)) {
-	cli_dbgmsg("fmap: attempted oof need\n");
+    if(!CLI_ISCONTAINED(0, m->len, at, len))
 	return NULL;
-    }
+
     if(!len)
 	return NULL;
     return (void *)((char *)m->data + at);
@@ -633,6 +653,11 @@ void *fmap_gets(fmap_t *m, char *dst, size_t *at, size_t max_len) { /* WIN32 */
 
 /* vvvvv SHARED STUFF BELOW vvvvv */
 
+fmap_t *fmap(int fd, off_t offset, size_t len) {
+    int unused;
+    return fmap_check_empty(fd, offset, len, &unused);
+}
+
 int fmap_readn(fmap_t *m, void *dst, size_t at, size_t len) {
     char *src;
 
diff --git a/libclamav/fmap.h b/libclamav/fmap.h
index dc8181b..eaeae91 100644
--- a/libclamav/fmap.h
+++ b/libclamav/fmap.h
@@ -48,6 +48,7 @@ typedef struct {
 } fmap_t;
 
 fmap_t *fmap(int fd, off_t offset, size_t len);
+fmap_t *fmap_check_empty(int fd, off_t offset, size_t len, int *empty);
 void funmap(fmap_t *m);
 void *fmap_need_off(fmap_t *m, size_t at, size_t len);
 void *fmap_need_off_once(fmap_t *m, size_t at, size_t len);
diff --git a/libclamav/hashtab.c b/libclamav/hashtab.c
index dcab06d..bb01f50 100644
--- a/libclamav/hashtab.c
+++ b/libclamav/hashtab.c
@@ -348,6 +348,15 @@ const struct cli_element* cli_hashtab_insert(struct cli_hashtable *s, const char
 	return NULL;
 }
 
+void cli_hashtab_delete(struct cli_hashtable *s,const char* key,const size_t len)
+{
+    struct cli_element *el = cli_hashtab_find(s, key, len);
+    if (!el || el->key == DELETED_KEY)
+	return;
+    free((void*)el->key);
+    el->key = DELETED_KEY;
+}
+
 void cli_hashtab_clear(struct cli_hashtable *s)
 {
 	size_t i;
@@ -579,3 +588,139 @@ int cli_hashset_contains_maybe_noalloc(const struct cli_hashset *hs, const uint3
 	return 0;
     return cli_hashset_contains(hs, key);
 }
+
+int cli_map_init(struct cli_map *m, int32_t keysize, int32_t valuesize,
+		  int32_t capacity)
+{
+    if (keysize <= 0 || valuesize < 0 || capacity <= 0)
+	return -CL_EARG;
+    memset(m, 0, sizeof(*m));
+    cli_hashtab_init(&m->htab, 16);
+    m->keysize = keysize;
+    m->valuesize = valuesize;
+    m->last_insert = -1;
+    m->last_find = -1;
+    return 0;
+}
+
+int  cli_map_addkey(struct cli_map *m, const void *key, int32_t keysize)
+{
+    unsigned n;
+    struct cli_element *el;
+    if (m->keysize != keysize)
+	return -CL_EARG;
+    el = cli_hashtab_find(&m->htab, key, keysize);
+    if (el) {
+	m->last_insert = el->data;
+	return 0;
+    }
+    n = m->nvalues + 1;
+    if (m->valuesize) {
+	void *v;
+	v = cli_realloc(m->u.sized_values, n*m->valuesize);
+	if (!v)
+	    return -CL_EMEM;
+	m->u.sized_values = v;
+	memset((char*)m->u.sized_values + (n-1)*m->valuesize, 0, m->valuesize);
+    } else {
+	struct cli_map_value *v;
+	v = cli_realloc(m->u.unsized_values, n*sizeof(*m->u.unsized_values));
+	if (!v)
+	    return -CL_EMEM;
+	m->u.unsized_values = v;
+	memset(&m->u.unsized_values[n-1], 0, sizeof(*m->u.unsized_values));
+    }
+    m->nvalues = n;
+    if (!cli_hashtab_insert(&m->htab, key, keysize, n-1))
+	return -CL_EMEM;
+    m->last_insert = n-1;
+    return 1;
+}
+
+int  cli_map_removekey(struct cli_map *m, const void *key, int32_t keysize)
+{
+    struct cli_element *el;
+    if (m->keysize != keysize)
+	return -CL_EARG;
+    el = cli_hashtab_find(&m->htab, key, keysize);
+    if (!el)
+	return 0;
+    if (el->data >= m->nvalues || el->data < 0)
+	return -CL_EARG;
+    if (!m->valuesize) {
+	struct cli_map_value *v = &m->u.unsized_values[el->data];
+	free(v->value);
+	v->value = NULL;
+	v->valuesize = 0;
+    } else {
+	char *v = (char*)m->u.sized_values + el->data * m->valuesize;
+	memset(v, 0, m->valuesize);
+    }
+    cli_hashtab_delete(&m->htab, key, keysize);
+    return 1;
+}
+
+int  cli_map_setvalue(struct cli_map *m, const void* value, int32_t valuesize)
+{
+    if ((m->valuesize && m->valuesize != valuesize)
+	|| m->last_insert >= m->nvalues || m->last_insert < 0)
+	return -CL_EARG;
+    if (m->valuesize) {
+	memcpy((char*)m->u.sized_values + m->last_insert * m->valuesize,
+	       value, valuesize);
+    } else {
+	struct cli_map_value *v = &m->u.unsized_values[m->last_insert];
+	if (v->value)
+	    free(v->value);
+	v->value = cli_malloc(valuesize);
+	if (!v->value)
+	    return -CL_EMEM;
+	memcpy(v->value, value, valuesize);
+	v->valuesize = valuesize;
+    }
+    return 0;
+}
+
+int  cli_map_find(struct cli_map *m, const void *key, int32_t keysize)
+{
+    struct cli_element *el;
+    if (m->keysize != keysize)
+	return -CL_EARG;
+    el = cli_hashtab_find(&m->htab, key, keysize);
+    if (!el)
+	return 0;
+    m->last_find = el->data;
+    return 1;
+}
+
+int  cli_map_getvalue_size(struct cli_map *m)
+{
+    if (m->valuesize)
+	return m->valuesize;
+    if (m->last_find < 0 || m->last_find >= m->nvalues)
+	return -CL_EARG;
+    return m->u.unsized_values[m->last_find].valuesize;
+}
+
+void* cli_map_getvalue(struct cli_map *m)
+{
+    if (m->last_find < 0 || m->last_find >= m->nvalues)
+	return NULL;
+    if (m->valuesize)
+	return (char*)m->u.sized_values + m->last_find*m->valuesize;
+    return m->u.unsized_values[m->last_find].value;
+}
+
+void cli_map_delete(struct cli_map *m)
+{
+    cli_hashtab_free(&m->htab);
+    if (!m->valuesize) {
+	unsigned i;
+	for (i=0;i<m->nvalues;i++)
+	    free(m->u.unsized_values[i].value);
+	free(m->u.unsized_values);
+    } else {
+	free(m->u.sized_values);
+    }
+    memset(m, 0, sizeof(*m));
+}
diff --git a/libclamav/hashtab.h b/libclamav/hashtab.h
index 8ab6786..ca1670b 100644
--- a/libclamav/hashtab.h
+++ b/libclamav/hashtab.h
@@ -75,8 +75,6 @@ struct cli_hashtable {
 	STRUCT_PROFILE
 };
 
-
-
 int cli_hashtab_generate_c(const struct cli_hashtable *s,const char* name);
 struct cli_element* cli_hashtab_find(const struct cli_hashtable *s, const char* key, const size_t len);
 int cli_hashtab_init(struct cli_hashtable *s,size_t capacity);
@@ -87,6 +85,34 @@ void cli_hashtab_free(struct cli_hashtable *s);
 int cli_hashtab_load(FILE* in, struct cli_hashtable *s);
 int cli_hashtab_store(const struct cli_hashtable *s,FILE* out);
 
+/* a hashtable that stores the values too */
+struct cli_map_value {
+    void *value;
+    int32_t valuesize;
+};
+
+struct cli_map {
+    struct cli_hashtable htab;
+    union {
+	struct cli_map_value *unsized_values;
+	void *sized_values;
+    } u;
+    uint32_t nvalues;
+    int32_t keysize;
+    int32_t valuesize;
+    int32_t last_insert;
+    int32_t last_find;
+};
+int cli_map_init(struct cli_map *m, int32_t keysize, int32_t valuesize,
+		  int32_t capacity);
+int  cli_map_addkey(struct cli_map *m, const void *key, int32_t keysize);
+int  cli_map_removekey(struct cli_map *m, const void *key, int32_t keysize);
+int  cli_map_setvalue(struct cli_map *m, const void* value, int32_t valuesize);
+int  cli_map_find(struct cli_map *m, const void *key, int32_t keysize);
+int  cli_map_getvalue_size(struct cli_map *m);
+void*  cli_map_getvalue(struct cli_map *m);
+void cli_map_delete(struct cli_map *m);
+
 /* A set of unique keys. */
 struct cli_hashset {
 	uint32_t* keys;
diff --git a/libclamav/ishield.c b/libclamav/ishield.c
index bbdec10..3987a9f 100644
--- a/libclamav/ishield.c
+++ b/libclamav/ishield.c
@@ -480,7 +480,6 @@ static int is_parse_hdr(cli_ctx *ctx, struct IS_CABSTUFF *c) {
     int ret = CL_BREAK;
     char hash[33], *hdr;
     fmap_t *map = *ctx->fmap;
-    size_t mp_hdrsz;
 
     struct IS_HDR *h1;
     struct IS_OBJECTS *objs;
diff --git a/libclamav/libclamav.map b/libclamav/libclamav.map
index 643a283..e0cbc3c 100644
--- a/libclamav/libclamav.map
+++ b/libclamav/libclamav.map
@@ -28,8 +28,6 @@ CLAMAV_PUBLIC {
     cl_statinidir;
     cl_countsigs;
     cl_strerror;
-  local:
-    *;
 };
 CLAMAV_PRIVATE {
   global:
@@ -173,6 +171,7 @@ CLAMAV_PRIVATE {
     cli_bytecode_debug_printsrc;
     cli_bytecode_printversion;
     cli_bytecode_describe;
+    cli_printcxxver;
   local:
     *;
 };
diff --git a/libclamav/matcher-ac.c b/libclamav/matcher-ac.c
index e495b95..3e69da3 100644
--- a/libclamav/matcher-ac.c
+++ b/libclamav/matcher-ac.c
@@ -1072,9 +1072,12 @@ inline static int ac_addtype(struct cli_matched_type **list, cli_file_t type, of
 
 static inline void lsig_sub_matched(const struct cli_matcher *root, struct cli_ac_data *mdata, uint32_t lsigid1, uint32_t lsigid2, uint32_t realoff)
 {
+    if(realoff != CLI_OFF_NONE)
+	mdata->lsigcnt[lsigid1][lsigid2]++;
+
     if(mdata->lsigsuboff[lsigid1][lsigid2] == CLI_OFF_NONE)
 	mdata->lsigsuboff[lsigid1][lsigid2] = realoff;
-    else if (mdata->lsigcnt[lsigid1][lsigid2] == 1) {
+    else if (mdata->lsigcnt[lsigid1][lsigid2] > 1) {
 	/* Check that the previous match had a macro match following it at the 
 	 * correct distance. This check is only done after the 1st match.*/
 	const struct cli_lsig_tdb *tdb = &root->ac_lsigtable[lsigid1]->tdb;
@@ -1099,9 +1102,8 @@ static inline void lsig_sub_matched(const struct cli_matcher *root, struct cli_a
 	    last_macroprev_match + smin > last_macro_match ||
 	    last_macroprev_match + smax < last_macro_match) {
 	    cli_dbgmsg("Canceled false lsig macro match\n");
-	    /* Previous match was false, cancel it and make this match the first
-	     * one.*/
-	    mdata->lsigcnt[lsigid1][lsigid2] = 0;
+	    /* Previous match was false - cancel it */
+	    mdata->lsigcnt[lsigid1][lsigid2]--;
 	    mdata->lsigsuboff[lsigid1][lsigid2] = realoff;
 	} else {
 	    /* mark the macro sig itself matched */
@@ -1109,9 +1111,6 @@ static inline void lsig_sub_matched(const struct cli_matcher *root, struct cli_a
 	    mdata->lsigsuboff[lsigid1][lsigid2+1] = last_macro_match;
 	}
     }
-    if (realoff != CLI_OFF_NONE) {
-	mdata->lsigcnt[lsigid1][lsigid2]++;
-    }
 }
 
 void cli_ac_chkmacro(struct cli_matcher *root, struct cli_ac_data *data, unsigned lsigid1)
@@ -1182,13 +1181,13 @@ int cli_ac_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
 			    continue;
 			}
 			realoff = offset + bp - pt->prefix_length;
-			if(patt->offdata[0] == CLI_OFF_VERSION) {
+			if(pt->offdata[0] == CLI_OFF_VERSION) {
 			    if(!cli_hashset_contains_maybe_noalloc(&mdata->vinfo, realoff)) {
 				pt = pt->next_same;
 				continue;
 			    }
 			    cli_dbgmsg("cli_ac_scanbuff: VI match for offset %x\n", realoff);
-			} else if (patt->offdata[0] == CLI_OFF_MACRO) {
+			} else if(pt->offdata[0] == CLI_OFF_MACRO) {
 			    mdata->macro_lastmatch[patt->offdata[1]] = realoff;
 			    pt = pt->next_same;
 			    continue;
@@ -1618,7 +1617,7 @@ int cli_ac_addsig(struct cli_matcher *root, const char *virname, const char *hex
 			break;
 		    }
 
-		    if(!(c = cli_mpool_hex2str(root->mempool, h))) {
+		    if(!(c = (char*)cli_mpool_hex2str(root->mempool, h))) {
 			free(h);
 			error = CL_EMALFDB;
 			break;
diff --git a/libclamav/matcher-bm.c b/libclamav/matcher-bm.c
index a4ae60a..3dd7714 100644
--- a/libclamav/matcher-bm.c
+++ b/libclamav/matcher-bm.c
@@ -271,6 +271,8 @@ int cli_bm_scanbuff(const unsigned char *buffer, uint32_t length, const char **v
     if(offdata) {
 	if(!offdata->cnt)
 	    return CL_CLEAN;
+	if(offdata->pos == offdata->cnt)
+	    offdata->pos--;
 	for(; offdata->pos && offdata->offtab[offdata->pos] > offset; offdata->pos--);
 	if(offdata->offtab[offdata->pos] < offset)
 	    offdata->pos++;
diff --git a/libclamav/matcher.c b/libclamav/matcher.c
index 7c927ff..c09658c 100644
--- a/libclamav/matcher.c
+++ b/libclamav/matcher.c
@@ -51,6 +51,11 @@
 #include "filtering.h"
 #include "perflogging.h"
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+#include "sha256.h"
+#include "sha1.h"
+#endif
+
 #ifdef CLI_PERF_LOGGING
 
 static inline void PERF_LOG_FILTER(int32_t pos, int32_t length, int8_t trie)
@@ -387,6 +392,36 @@ int cli_checkfp(unsigned char *digest, size_t size, cli_ctx *ctx)
 	sprintf(md5 + i * 2, "%02x", digest[i]);
     md5[32] = 0;
     cli_dbgmsg("FP SIGNATURE: %s:%u:%s\n", md5, (unsigned int) size, *ctx->virname ? *ctx->virname : "Name");
+
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if((ctx->options & CL_SCAN_INTERNAL_COLLECT_SHA) && ctx->sha_collect>0) {
+        SHA1Context sha1;
+        SHA256_CTX sha256;
+        fmap_t *map = *ctx->fmap;
+        char *ptr;
+        uint8_t shash1[SHA1_HASH_SIZE*2+1];
+        uint8_t shash256[SHA256_HASH_SIZE*2+1];
+
+        if((ptr = fmap_need_off_once(map, 0, size))) {
+            sha256_init(&sha256);
+            sha256_update(&sha256, ptr, size);
+            sha256_final(&sha256, &shash256[SHA256_HASH_SIZE]);
+            for(i=0; i<SHA256_HASH_SIZE; i++)
+                sprintf((char *)shash256+i*2, "%02x", shash256[SHA256_HASH_SIZE+i]);
+
+            SHA1Init(&sha1);
+            SHA1Update(&sha1, ptr, size);
+            SHA1Final(&sha1, &shash1[SHA1_HASH_SIZE]);
+            for(i=0; i<SHA1_HASH_SIZE; i++)
+                sprintf((char *)shash1+i*2, "%02x", shash1[SHA1_HASH_SIZE+i]);
+
+	    cli_errmsg("COLLECT:%s:%s:%u:%s:%s\n", shash256, shash1, size, *ctx->virname, ctx->entry_filename);
+        } else
+            cli_errmsg("can't compute sha\n!");
+        ctx->sha_collect = -1;
+    }
+#endif
+
     return CL_VIRUS;
 }
 
@@ -402,34 +437,92 @@ static int matchicon(cli_ctx *ctx, const char *grp1, const char *grp2)
 
 int cli_scandesc(int desc, cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli_matched_type **ftoffset, unsigned int acmode)
 {
-    int ret = CL_EMEM;
+    int ret = CL_EMEM, empty;
     fmap_t *map = *ctx->fmap;
 
-    if((*ctx->fmap = fmap(desc, 0, 0))) {
+    if((*ctx->fmap = fmap_check_empty(desc, 0, 0, &empty))) {
 	ret = cli_fmap_scandesc(ctx, ftype, ftonly, ftoffset, acmode, NULL);
 	map->dont_cache_flag = (*ctx->fmap)->dont_cache_flag;
 	funmap(*ctx->fmap);
     }
     *ctx->fmap = map;
+    if(empty)
+	return CL_CLEAN;
     return ret;
 }
 
+int cli_lsig_eval(cli_ctx *ctx, struct cli_matcher *root, struct cli_ac_data *acdata)
+{
+	unsigned int i, evalcnt;
+	uint64_t evalids;
+	int (*einfo)(fmap_t *, struct cli_exe_info *) = NULL;
+	struct cli_exe_info exeinfo;
+	fmap_t *map = *ctx->fmap;
+
+    for(i = 0; i < root->ac_lsigs; i++) {
+	evalcnt = 0;
+	evalids = 0;
+	cli_ac_chkmacro(root, acdata, i);
+	if(cli_ac_chklsig(root->ac_lsigtable[i]->logic, root->ac_lsigtable[i]->logic + strlen(root->ac_lsigtable[i]->logic), acdata->lsigcnt[i], &evalcnt, &evalids, 0) == 1) {
+	    if(root->ac_lsigtable[i]->tdb.container && root->ac_lsigtable[i]->tdb.container[0] != ctx->container_type)
+		continue;
+	    if(root->ac_lsigtable[i]->tdb.filesize && (root->ac_lsigtable[i]->tdb.filesize[0] > map->len || root->ac_lsigtable[i]->tdb.filesize[1] < map->len))
+		continue;
+
+	    if(root->ac_lsigtable[i]->tdb.ep || root->ac_lsigtable[i]->tdb.nos) {
+		einfo = NULL;
+		if(root->type == 1)
+		    einfo = cli_peheader;
+		else if(root->type == 6)
+		    einfo = cli_elfheader;
+		else if(root->type == 9)
+		    einfo = cli_machoheader;
+		if(!einfo)
+		    continue;
+		memset(&exeinfo, 0, sizeof(exeinfo));
+		if(einfo(map, &exeinfo))
+		    continue;
+		if(exeinfo.section)
+		    free(exeinfo.section);
+		if(root->ac_lsigtable[i]->tdb.ep && (root->ac_lsigtable[i]->tdb.ep[0] > exeinfo.ep || root->ac_lsigtable[i]->tdb.ep[1] < exeinfo.ep))
+		    continue;
+		if(root->ac_lsigtable[i]->tdb.nos && (root->ac_lsigtable[i]->tdb.nos[0] > exeinfo.nsections || root->ac_lsigtable[i]->tdb.nos[1] < exeinfo.nsections))
+		    continue;
+	    }
+	    if(root->ac_lsigtable[i]->tdb.icongrp1 || root->ac_lsigtable[i]->tdb.icongrp2) {
+		if(matchicon(ctx, root->ac_lsigtable[i]->tdb.icongrp1, root->ac_lsigtable[i]->tdb.icongrp2) == CL_VIRUS) {
+		    if(ctx->virname)
+			*ctx->virname = root->ac_lsigtable[i]->virname;
+		    return CL_VIRUS;
+		} else {
+		    continue;
+		}
+	    }
+	    if(!root->ac_lsigtable[i]->bc_idx) {
+		if(ctx->virname)
+		    *ctx->virname = root->ac_lsigtable[i]->virname;
+		return CL_VIRUS;
+	    }
+	    if(cli_bytecode_runlsig(ctx, &ctx->engine->bcs, root->ac_lsigtable[i]->bc_idx, ctx->virname, acdata->lsigcnt[i], acdata->lsigsuboff[i], map) == CL_VIRUS) {
+		return CL_VIRUS;
+	    }
+	}
+    }
+    return CL_CLEAN;
+}
 
 int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli_matched_type **ftoffset, unsigned int acmode, unsigned char *refhash)
 {
  	unsigned char *buff;
 	int ret = CL_CLEAN, type = CL_CLEAN, bytes;
-	unsigned int i, evalcnt, bm_offmode = 0;
+	unsigned int i, bm_offmode = 0;
 	uint32_t maxpatlen, offset = 0;
-	uint64_t evalids;
 	struct cli_ac_data gdata, tdata;
 	struct cli_bm_off toff;
 	cli_md5_ctx md5ctx;
 	unsigned char digest[16];
 	struct cli_matcher *groot = NULL, *troot = NULL;
 	fmap_t *map = *ctx->fmap;
-	int (*einfo)(fmap_t *, struct cli_exe_info *) = NULL;
-	struct cli_exe_info exeinfo;
 
     if(!ctx->engine) {
 	cli_errmsg("cli_scandesc: engine == NULL\n");
@@ -529,60 +622,8 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli
 	offset += bytes - maxpatlen;
     }
 
-#define LSIGEVAL(xroot, xdata) \
-    for(i = 0; i < xroot->ac_lsigs; i++) { \
-	evalcnt = 0; \
-	evalids = 0; \
-	cli_ac_chkmacro(xroot, &xdata, i);\
-	if(cli_ac_chklsig(xroot->ac_lsigtable[i]->logic, xroot->ac_lsigtable[i]->logic + strlen(xroot->ac_lsigtable[i]->logic), xdata.lsigcnt[i], &evalcnt, &evalids, 0) == 1) { \
-	    if(xroot->ac_lsigtable[i]->tdb.container && xroot->ac_lsigtable[i]->tdb.container[0] != ctx->container_type) \
-		continue; \
-	    if(xroot->ac_lsigtable[i]->tdb.filesize && (xroot->ac_lsigtable[i]->tdb.filesize[0] > map->len || xroot->ac_lsigtable[i]->tdb.filesize[1] < map->len)) \
-		continue; \
-	    \
-	    if(xroot->ac_lsigtable[i]->tdb.ep || xroot->ac_lsigtable[i]->tdb.nos) { \
-		einfo = NULL; \
-		if(xroot->type == 1) \
-		    einfo = cli_peheader; \
-		else if(xroot->type == 6) \
-		    einfo = cli_elfheader; \
-		else if(xroot->type == 9) \
-		    einfo = cli_machoheader; \
-		if(!einfo) \
-		    continue; \
-		memset(&exeinfo, 0, sizeof(exeinfo)); \
-		if(einfo(map, &exeinfo)) \
-		    continue; \
-		if(exeinfo.section) \
-		    free(exeinfo.section); \
-		if(xroot->ac_lsigtable[i]->tdb.ep && (xroot->ac_lsigtable[i]->tdb.ep[0] > exeinfo.ep || xroot->ac_lsigtable[i]->tdb.ep[1] < exeinfo.ep)) \
-		    continue; \
-		if(xroot->ac_lsigtable[i]->tdb.nos && (xroot->ac_lsigtable[i]->tdb.nos[0] > exeinfo.nsections || xroot->ac_lsigtable[i]->tdb.nos[1] < exeinfo.nsections)) \
-		    continue; \
-	    } \
-	    if(xroot->ac_lsigtable[i]->tdb.icongrp1 || xroot->ac_lsigtable[i]->tdb.icongrp2) { \
-		if(matchicon(ctx, xroot->ac_lsigtable[i]->tdb.icongrp1, xroot->ac_lsigtable[i]->tdb.icongrp2) == CL_VIRUS) { \
-		    ret = CL_VIRUS; \
-		    break; \
-		} else { \
-		    continue; \
-		} \
-	    } \
-	    if(!xroot->ac_lsigtable[i]->bc_idx) { \
-		if(ctx->virname) \
-		    *ctx->virname = xroot->ac_lsigtable[i]->virname; \
-		ret = CL_VIRUS; \
-		break; \
-	    } \
-	    if(cli_bytecode_runlsig(ctx, &ctx->engine->bcs, xroot->ac_lsigtable[i]->bc_idx, ctx->virname, xdata.lsigcnt[i], xdata.lsigsuboff[i], map) == CL_VIRUS) { \
-		ret = CL_VIRUS; \
-		break; \
-	    } \
-	} \
-    }
-
     if(troot) {
-	LSIGEVAL(troot, tdata);
+	ret = cli_lsig_eval(ctx, troot, &tdata);
 	cli_ac_freedata(&tdata);
 	if(bm_offmode)
 	    cli_bm_freeoff(&toff);
@@ -590,7 +631,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli
 
     if(groot) {
 	if(ret != CL_VIRUS)
-	    LSIGEVAL(groot, gdata);
+	    ret = cli_lsig_eval(ctx, groot, &gdata);
 	cli_ac_freedata(&gdata);
     }
 
diff --git a/libclamav/matcher.h b/libclamav/matcher.h
index 2d5d020..c2ae651 100644
--- a/libclamav/matcher.h
+++ b/libclamav/matcher.h
@@ -165,6 +165,7 @@ int cli_scanbuff(const unsigned char *buffer, uint32_t length, uint32_t offset,
 
 int cli_scandesc(int desc, cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli_matched_type **ftoffset, unsigned int acmode);
 int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli_matched_type **ftoffset, unsigned int acmode, unsigned char *refhash);
+int cli_lsig_eval(cli_ctx *ctx, struct cli_matcher *root, struct cli_ac_data *acdata);
 int cli_caloff(const char *offstr, struct cli_target_info *info, fmap_t *map, unsigned int target, uint32_t *offdata, uint32_t *offset_min, uint32_t *offset_max);
 
 int cli_checkfp(unsigned char *digest, size_t size, cli_ctx *ctx);
diff --git a/libclamav/mpool.c b/libclamav/mpool.c
index 5388f8d..98b5bc7 100644
--- a/libclamav/mpool.c
+++ b/libclamav/mpool.c
@@ -278,7 +278,11 @@ struct MP *mpool_create() {
   sz = align_to_pagesize(&mp, MIN_FRAGSIZE);
   mp.u.mpm.usize = align_to_voidptr(sizeof(struct MPMAP));
   mp.u.mpm.size = sz - align_to_voidptr(sizeof(mp));
+#ifndef _WIN32
   if ((mpool_p = (struct MP *)mmap(NULL, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE|ANONYMOUS_MAP, -1, 0)) == MAP_FAILED)
+#else
+  if(!(mpool_p = (struct MP *)VirtualAlloc(NULL, sz, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE)))
+#endif
     return NULL;
 #ifdef CL_DEBUG
   memset(mpool_p, ALLOCPOISON, sz);
@@ -298,13 +302,21 @@ void mpool_destroy(struct MP *mp) {
 #ifdef CL_DEBUG
     memset(mpm, FREEPOISON, mpmsize);
 #endif
+#ifndef _WIN32
     munmap((void *)mpm, mpmsize);
+#else
+    VirtualFree(mpm, 0, MEM_RELEASE);
+#endif
   }
   mpmsize = mp->u.mpm.size;
 #ifdef CL_DEBUG
   memset(mp, FREEPOISON, mpmsize + align_to_voidptr(sizeof(*mp)));
 #endif
+#ifndef _WIN32
   munmap((void *)mp, mpmsize + align_to_voidptr(sizeof(*mp)));
+#else
+  VirtualFree(mp, 0, MEM_RELEASE);
+#endif
   spam("Map destroyed @%p\n", mp);
 }
 
@@ -323,7 +335,11 @@ void mpool_flush(struct MP *mp) {
 #ifdef CL_DEBUG
 	    memset((char *)mpm + mused, FREEPOISON, mpm->size - mused);
 #endif
+#ifndef _WIN32
 	    munmap((char *)mpm + mused, mpm->size - mused);
+#else
+	    VirtualFree((char *)mpm + mused, mpm->size - mused, MEM_DECOMMIT);
+#endif
 	    mpm->size = mused;
 	}
 	used += mpm->size;
@@ -334,7 +350,11 @@ void mpool_flush(struct MP *mp) {
 #ifdef CL_DEBUG
 	memset((char *)mp + mused, FREEPOISON, mp->u.mpm.size + align_to_voidptr(sizeof(*mp)) - mused);
 #endif
+#ifndef _WIN32
 	munmap((char *)mp + mused, mp->u.mpm.size + align_to_voidptr(sizeof(*mp)) - mused);
+#else
+	VirtualFree((char *)mp + mused, mp->u.mpm.size + align_to_voidptr(sizeof(*mp)) - mused, MEM_DECOMMIT);
+#endif
 	mp->u.mpm.size = mused - align_to_voidptr(sizeof(*mp));
     }
     used += mp->u.mpm.size;
@@ -412,8 +432,12 @@ void *mpool_malloc(struct MP *mp, size_t size) {
   i = align_to_pagesize(mp, needed + align_to_voidptr(sizeof(*mpm)));
   else
   i = align_to_pagesize(mp, MIN_FRAGSIZE);
-  
+
+#ifndef _WIN32
   if ((mpm = (struct MPMAP *)mmap(NULL, i, PROT_READ | PROT_WRITE, MAP_PRIVATE|ANONYMOUS_MAP, -1, 0)) == MAP_FAILED) {
+#else
+  if (!(mpm = (struct MPMAP *)VirtualAlloc(NULL, i, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) {
+#endif
     cli_errmsg("mpool_malloc(): Can't allocate memory (%lu bytes).\n", (unsigned long int)i);
     spam("failed to alloc %u bytes (%u requested)\n", i, size);
     return NULL;
@@ -501,7 +525,7 @@ unsigned char *cli_mpool_hex2str(mpool_t *mp, const char *hex) {
     }
 
     str = mpool_malloc(mp, (len/2) + 1);
-    if (cli_hex2str_to(hex, str, len) == -1) {
+    if (cli_hex2str_to(hex, (char*)str, len) == -1) {
 	mpool_free(mp, str);
 	return NULL;
     }
diff --git a/libclamav/others.c b/libclamav/others.c
index efdcea6..3637fe3 100644
--- a/libclamav/others.c
+++ b/libclamav/others.c
@@ -355,7 +355,11 @@ int cl_engine_set_num(struct cl_engine *engine, enum cl_engine_field field, long
 	    engine->maxfilesize = num;
 	    break;
 	case CL_ENGINE_MAX_RECURSION:
-	    engine->maxreclevel = num;
+	    if(!num) {
+		cli_warnmsg("MaxRecursion: the value of 0 is not allowed, using default: %u\n", CLI_DEFAULT_MAXRECLEVEL);
+		engine->maxreclevel = CLI_DEFAULT_MAXRECLEVEL;
+	    } else
+		engine->maxreclevel = num;
 	    break;
 	case CL_ENGINE_MAX_FILES:
 	    engine->maxfiles = num;
diff --git a/libclamav/others.h b/libclamav/others.h
index 1cec6fc..f775477 100644
--- a/libclamav/others.h
+++ b/libclamav/others.h
@@ -53,7 +53,7 @@
  * in re-enabling affected modules.
  */
 
-#define CL_FLEVEL 51
+#define CL_FLEVEL 53
 #define CL_FLEVEL_DCONF	CL_FLEVEL
 #define CL_FLEVEL_SIGTOOL CL_FLEVEL
 
@@ -122,6 +122,10 @@ typedef struct cli_ctx_tag {
     struct cli_dconf *dconf;
     fmap_t **fmap;
     bitset_t* hook_lsig_matches;
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    char entry_filename[2048];
+    int sha_collect;
+#endif
 } cli_ctx;
 
 
diff --git a/libclamav/pdf.c b/libclamav/pdf.c
index 1b84bdb..e359da7 100644
--- a/libclamav/pdf.c
+++ b/libclamav/pdf.c
@@ -451,10 +451,12 @@ cli_pdf(const char *dir, cli_ctx *ctx, off_t offset)
 			}
 			if(ret) {
 				unsigned char *t;
+				unsigned size;
 
 				real_streamlen = ret;
 				/* free unused trailing bytes */
-				t = (unsigned char *)cli_realloc(tmpbuf,calculated_streamlen);
+				size = real_streamlen > calculated_streamlen ? real_streamlen : calculated_streamlen;
+				t = (unsigned char *)cli_realloc(tmpbuf,size);
 				if(t == NULL) {
 					free(tmpbuf);
 					close(fout);
diff --git a/libclamav/pe.c b/libclamav/pe.c
index 323f408..1caaf9e 100644
--- a/libclamav/pe.c
+++ b/libclamav/pe.c
@@ -108,6 +108,14 @@ if((ndesc = open(tempfile, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, S_IRWXU)) < 0) { \
     } \
 }
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+#define SHA_OFF do { ctx->sha_collect = -1; } while(0)
+#define SHA_RESET do { ctx->sha_collect = sha_collect; } while(0)
+#else
+#define SHA_OFF do {} while(0)
+#define SHA_RESET do {} while(0)
+#endif
+
 #define FSGCASE(NAME,FREESEC) \
     case 0: /* Unpacked and NOT rebuilt */ \
 	cli_dbgmsg(NAME": Successfully decompressed\n"); \
@@ -148,12 +156,15 @@ if((ndesc = open(tempfile, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, S_IRWXU)) < 0) { \
         free(exe_sections); \
 	lseek(ndesc, 0, SEEK_SET); \
 	cli_dbgmsg("***** Scanning rebuilt PE file *****\n"); \
+	SHA_OFF; \
 	if(cli_magic_scandesc(ndesc, ctx) == CL_VIRUS) { \
 	    close(ndesc); \
 	    CLI_TMPUNLK(); \
 	    free(tempfile); \
+	    SHA_RESET; \
 	    return CL_VIRUS; \
 	} \
+	SHA_RESET; \
 	close(ndesc); \
 	CLI_TMPUNLK(); \
 	free(tempfile); \
@@ -511,7 +522,7 @@ int cli_scanpe(cli_ctx *ctx, icon_groupset *iconset)
 	char *src = NULL, *dest = NULL;
 	int ndesc, ret = CL_CLEAN, upack = 0, native=0;
 	size_t fsize;
-	uint32_t valign, falign, hdr_size, j, offset;
+	uint32_t valign, falign, hdr_size, j;
 	struct cli_exe_section *exe_sections;
 	struct cli_matcher *md5_sect;
 	char timestr[32];
@@ -519,7 +530,9 @@ int cli_scanpe(cli_ctx *ctx, icon_groupset *iconset)
 	struct cli_bc_ctx *bc_ctx;
 	fmap_t *map;
 	struct cli_pe_hook_data pedata;
-
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+	int sha_collect = ctx->sha_collect;
+#endif
 
     if(!ctx) {
 	cli_errmsg("cli_scanpe: ctx == NULL\n");
@@ -1922,13 +1935,16 @@ int cli_scanpe(cli_ctx *ctx, icon_groupset *iconset)
 	    cli_dbgmsg("UPX/FSG: Decompressed data saved in %s\n", tempfile);
 
 	cli_dbgmsg("***** Scanning decompressed file *****\n");
+	SHA_OFF;
 	if((ret = cli_magic_scandesc(ndesc, ctx)) == CL_VIRUS) {
 	    close(ndesc);
 	    CLI_TMPUNLK();
 	    free(tempfile);
+	    SHA_RESET;
 	    return CL_VIRUS;
 	}
 
+	SHA_RESET;
 	close(ndesc);
 	CLI_TMPUNLK();
 	free(tempfile);
@@ -2506,6 +2522,8 @@ int cli_peheader(fmap_t *map, struct cli_exe_info *peinfo)
 
 		    while(sfi_sz > 6) { /* enum all stringtables - RESUMABLE */
 			uint32_t st_sz = cli_readint32(vptr) & 0xffff;
+			uint8_t *next_vptr = vptr + st_sz;
+			uint32_t next_sfi_sz = sfi_sz - st_sz;
 
 			if(st_sz > sfi_sz || st_sz <= 24) {
 			    /* - the content is larger than the container
@@ -2520,38 +2538,44 @@ int cli_peheader(fmap_t *map, struct cli_exe_info *peinfo)
 			while(st_sz > 6) {  /* enum all strings - RESUMABLE */
 			    uint32_t s_sz, s_key_sz, s_val_sz;
 
-			    s_sz = s_val_sz = cli_readint32(vptr);
-			    s_sz &= 0xffff;
-			    s_val_sz = (s_val_sz & 0xffff0000)>>15;
-			    if(s_sz > st_sz || s_sz <= 6 + 2 + 2 || s_val_sz > s_sz - 6 - 2 - 2) {
+			    s_sz = (cli_readint32(vptr) & 0xffff) + 3;
+			    s_sz &= ~3;
+			    if(s_sz > st_sz || s_sz <= 6 + 2 + 8) {
 				/* - the content is larger than the container
-				 * - there's no room for a minimal string (headers(6) + key(2) + padding(2))
+				 * - there's no room for a minimal string
 				 * - there's no room for the value */
 				st_sz = 0;
 				sfi_sz = 0;
 				break; /* force a hard fail */
 			    }
 
-			    if(!s_val_sz) {
-				/* skip unset value */
-				vptr += s_sz;
-				st_sz -= s_sz;
-				continue;
-			    }
-
 			    /* ~wcstrlen(key) */
-			    for(s_key_sz = 0; s_key_sz < s_sz - 6 - s_val_sz; s_key_sz += 2) {
-				if(vptr[6+s_key_sz] || vptr[6+s_key_sz+1]) continue;
+			    for(s_key_sz = 6; s_key_sz+1 < s_sz; s_key_sz += 2) {
+				if(vptr[s_key_sz] || vptr[s_key_sz+1]) continue;
 				s_key_sz += 2;
 				break;
 			    }
-			    if(s_key_sz >= s_sz - 6 - s_val_sz) {
+
+			    s_key_sz += 3;
+			    s_key_sz &= ~3;
+
+			    if(s_key_sz >= s_sz) {
 				/* key overflow */
 				vptr += s_sz;
 				st_sz -= s_sz;
 				continue;
 			    }
 
+			    s_val_sz = s_sz - s_key_sz;
+			    s_key_sz -= 6;
+
+			    if(s_val_sz <= 2) {
+				/* skip unset value */
+				vptr += s_sz;
+				st_sz -= s_sz;
+				continue;
+			    }
+
 			    if(cli_hashset_addkey(peinfo->vinfo, (uint32_t)(vptr - baseptr + 6))) {
 				cli_errmsg("cli_peheader: Unable to add rva to vinfo hashset\n");
 				cli_hashset_destroy(peinfo->vinfo);
@@ -2565,13 +2589,11 @@ int cli_peheader(fmap_t *map, struct cli_exe_info *peinfo)
 				char *k, *v, *s;
 
 				/* FIXME: skip too long strings */
-				k = cli_utf16toascii(vptr + 6, s_key_sz);
+				k = cli_utf16toascii((const char*)vptr + 6, s_key_sz);
 				if(k) {
-				    s_key_sz += 6 + 3;
-				    s_key_sz &= ~3;
-				    v = cli_utf16toascii(vptr + s_key_sz, s_val_sz);
+				    v = cli_utf16toascii((const char*)vptr + s_key_sz + 6, s_val_sz);
 				    if(v) {
-					s = cli_str2hex(vptr + 6, s_key_sz + s_val_sz - 6);
+					s = cli_str2hex((const char*)vptr + 6, s_key_sz + s_val_sz - 6);
 					if(s) {
 					    cli_dbgmsg("VersionInfo (%x): '%s'='%s' - VI:%s\n", (uint32_t)(vptr - baseptr + 6), k, v, s);
 					    free(s);
@@ -2584,8 +2606,8 @@ int cli_peheader(fmap_t *map, struct cli_exe_info *peinfo)
 			    vptr += s_sz;
 			    st_sz -= s_sz;
 			} /* enum all strings - RESUMABLE */
-			vptr += st_sz;
-			sfi_sz -= st_sz;
+			vptr = next_vptr;
+			sfi_sz = next_sfi_sz * (sfi_sz != 0);
 		    } /* enum all stringtables - RESUMABLE */
 		    break;
 		} /* look for stringfileinfo - NOT RESUMABLE */
diff --git a/libclamav/pe.h b/libclamav/pe.h
index 2f48303..dc5db56 100644
--- a/libclamav/pe.h
+++ b/libclamav/pe.h
@@ -62,11 +62,11 @@ struct pe_image_optional_hdr32 {
     uint32_t FileAlignment;			    /**< usually 32 or 512 */
     uint16_t MajorOperatingSystemVersion;	    /**< not used */
     uint16_t MinorOperatingSystemVersion;	    /**< not used */
-    uint16_t MajorImageVersion;			    /** unreliable */
-    uint16_t MinorImageVersion;			    /** unreliable */
+    uint16_t MajorImageVersion;			    /**< unreliable */
+    uint16_t MinorImageVersion;			    /**< unreliable */
     uint16_t MajorSubsystemVersion;
     uint16_t MinorSubsystemVersion;
-    uint32_t Win32VersionValue;			    /* ? */
+    uint32_t Win32VersionValue;			    /*< ? */
     uint32_t SizeOfImage;
     uint32_t SizeOfHeaders;
     uint32_t CheckSum;				    /**< NT drivers only */
@@ -76,7 +76,7 @@ struct pe_image_optional_hdr32 {
     uint32_t SizeOfStackCommit;
     uint32_t SizeOfHeapReserve;
     uint32_t SizeOfHeapCommit;
-    uint32_t LoaderFlags;			    /* ? */
+    uint32_t LoaderFlags;			    /*< ? */
     uint32_t NumberOfRvaAndSizes;		    /**< unreliable */
     struct pe_image_data_dir DataDirectory[16];
 };
@@ -138,14 +138,14 @@ struct pe_image_section_hdr {
 /** Data for the bytecode PE hook */
 struct cli_pe_hook_data {
   uint32_t offset;
-  uint32_t ep;
-  uint16_t nsections;
+  uint32_t ep; /**< EntryPoint as file offset */
+  uint16_t nsections;/**< Number of sections */
   uint16_t dummy; /* align */
-  struct pe_image_file_hdr file_hdr;
-  struct pe_image_optional_hdr32 opt32;
+  struct pe_image_file_hdr file_hdr;/**< Header for this PE file */
+  struct pe_image_optional_hdr32 opt32; /**< 32-bit PE optional header */
   uint32_t dummy2; /* align */
-  struct pe_image_optional_hdr64 opt64;
-  struct pe_image_data_dir dirs[16];
+  struct pe_image_optional_hdr64 opt64;/**< 64-bit PE optional header */
+  struct pe_image_data_dir dirs[16]; /**< PE data directory header */
   uint32_t e_lfanew;/**< address of new exe header */
   uint32_t overlays;/**< number of overlays */
   int32_t overlays_sz;/**< size of overlays */
diff --git a/libclamav/pe_icons.c b/libclamav/pe_icons.c
index ae27cc9..3f1bc5b 100644
--- a/libclamav/pe_icons.c
+++ b/libclamav/pe_icons.c
@@ -563,6 +563,7 @@ static void lab(double r, double g, double b, double *L, double *A, double *B) {
     *B = 200.0f * (y - z);
 }
 
+#ifndef USE_FLOATS
 static void lab2(uint32_t r, uint32_t g, uint32_t b, int32_t *L, int32_t *A, int32_t *B) {
     uint32_t xx,yy,zz;
 
@@ -591,6 +592,7 @@ static void lab2(uint32_t r, uint32_t g, uint32_t b, int32_t *L, int32_t *A, int
     *A = 500/4*(xx - yy);
     *B = 200/4*(yy - zz);/* /4 to avoid overflow */
 }
+#endif
 
 static double labdiff(unsigned int rgb) {
     unsigned int r, g, b;
@@ -606,6 +608,7 @@ static double labdiff(unsigned int rgb) {
     return sqrt(pow(L1 - L2, 2.0f) + pow(A1 - A2, 2.0f) + pow(B1 - B2, 2.0f));
 }
 
+#ifndef USE_FLOATS
 static uint32_t labdiff2(unsigned int b) {
     unsigned int r2, g2, b2;
     int32_t L1, A1, B1, L2, A2, B2;
@@ -629,6 +632,7 @@ static uint32_t labdiff2(unsigned int b) {
      ld += ad + bd;
      return ((uint32_t)(sqrt(ld/1024.0)))>>17;
 }
+#endif
 
 static void makebmp(const char *step, const char *tempd, int w, int h, void *data) {
     unsigned int tmp1, tmp2, tmp3, tmp4, y;
@@ -1189,7 +1193,7 @@ static int parseicon(icon_groupset *set, uint32_t rva, cli_ctx *ctx, struct cli_
     struct icomtr metrics;
     unsigned char *rawimage;
     const char *tempd;
-    uint32_t *palette = NULL, *imagedata, *imagedata2;
+    uint32_t *palette = NULL, *imagedata;
     unsigned int scanlinesz, andlinesz;
     unsigned int width, height, depth, x, y;
     unsigned int err, scalemode = 2, enginesize;
@@ -1410,10 +1414,9 @@ static int parseicon(icon_groupset *set, uint32_t rva, cli_ctx *ctx, struct cli_
 	    if(!(newdata = cli_malloc(newsize * newsize * sizeof(*newdata)))) {
 		return CL_SUCCESS;
 	    }
-	    memset(newdata, 0xaaccaabb, newsize * newsize * sizeof(*newdata));
 	    cli_dbgmsg("parseicon: Slow scaling to %ux%u (%f, %f)\n", newsize, newsize, scalex, scaley);
 	    for(y = 0; y<newsize; y++) {
-		unsigned int oldy = (unsigned int)((y * scaley) * width + 0.5f);
+		unsigned int oldy = (unsigned int)(y * scaley) * width;
 		for(x = 0; x<newsize; x++)
 		    newdata[y*newsize + x] = imagedata[oldy + (unsigned int)(x * scalex + 0.5f)];
 	    }
diff --git a/libclamav/readdb.c b/libclamav/readdb.c
index f1d00f5..9ce9e67 100644
--- a/libclamav/readdb.c
+++ b/libclamav/readdb.c
@@ -999,7 +999,7 @@ static int lsigattribs(char *attribs, struct cli_lsig_tdb *tdb)
 	};
 	struct lsig_attrib *apt;
 	char *tokens[ATTRIB_TOKENS], *pt, *pt2;
-	unsigned int v1, v2, v3, i, j, tokens_count;
+	unsigned int v1, v2, v3, i, j, tokens_count, have_newext = 0;
 	uint32_t cnt, off[ATTRIB_TOKENS];
 
 
@@ -1025,6 +1025,14 @@ static int lsigattribs(char *attribs, struct cli_lsig_tdb *tdb)
 	    return 1;
 	}
 
+	if(!strcmp(apt->name, "Engine")) {
+	    if(i) {
+		cli_errmsg("lsigattribs: For backward compatibility the Engine attribute must be on the first position\n");
+		return -1;
+	    }
+	} else if(strcmp(apt->name, "Target"))
+	    have_newext = 1;
+
 	switch(apt->type) {
 	    case CLI_TDB_UINT:
 		if(!cli_isnumber(pt)) {
@@ -1141,6 +1149,10 @@ static int lsigattribs(char *attribs, struct cli_lsig_tdb *tdb)
 	}
     }
 
+    if(have_newext && (!tdb->engine || tdb->engine[0] < 51)) {
+	cli_errmsg("lsigattribs: For backward compatibility all signatures using new attributes must have the Engine attribute present and set to min_level of at least 51 (0.96)\n");
+	return -1;
+    }
     return 0;
 }
 
@@ -1366,6 +1378,7 @@ static int cli_loadldb(FILE *fs, struct cl_engine *engine, unsigned int *signo,
 
 static int cli_loadcbc(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, struct cli_dbio *dbio, const char *dbname)
 {
+    char buf[4096];
     int rc;
     struct cli_all_bc *bcs = &engine->bcs;
     struct cli_bc *bc;
@@ -1407,6 +1420,10 @@ static int cli_loadcbc(FILE *fs, struct cl_engine *engine, unsigned int *signo,
     }
 
     rc = cli_bytecode_load(bc, fs, dbio, security_trust);
+    /* read remainder of DB, needed because cvd.c checks that we read the entire
+     * file */
+    while (cli_dbgets(buf, sizeof(buf), fs, dbio)) {}
+
     if (rc != CL_SUCCESS) {
 	cli_errmsg("Unable to load %s bytecode: %s\n", dbname, cl_strerror(rc));
 	return rc;
@@ -1419,6 +1436,7 @@ static int cli_loadcbc(FILE *fs, struct cl_engine *engine, unsigned int *signo,
     bc->id = bcs->count;/* must set after _load, since load zeroes */
     sigs++;
     if (bc->kind == BC_LOGICAL || bc->lsig) {
+        unsigned oldsigs = sigs;
 	if (!bc->lsig) {
 	    cli_errmsg("Bytecode %s has logical kind, but missing logical signature!\n", dbname);
 	    return CL_EMALFDB;
@@ -1430,6 +1448,12 @@ static int cli_loadcbc(FILE *fs, struct cl_engine *engine, unsigned int *signo,
 		       bc->lsig, dbname, cl_strerror(rc));
 	    return rc;
 	}
+        if (sigs != oldsigs) {
+          /* compiler ensures Engine field in lsig matches the one in bytecode,
+           * so this should never happen. */
+          cli_errmsg("Bytecode logical signature skipped, but bytecode itself not?");
+          return CL_EMALFDB;
+        }
     }
     if (bc->kind != BC_LOGICAL) {
 	if (bc->lsig) {
@@ -1596,6 +1620,11 @@ static int cli_loadinfo(FILE *fs, struct cl_engine *engine, unsigned int options
 	int ret = CL_SUCCESS, dsig = 0;
 	SHA256_CTX ctx;
 
+
+    if(!dbio) {
+	cli_errmsg("cli_loadinfo: .info files can only be loaded from within database container files\n");
+	return CL_EMALFDB;
+    }
     sha256_init(&ctx);
     while(cli_dbgets(buffer, FILEBUFF, fs, dbio)) {
 	line++;
@@ -1651,7 +1680,7 @@ static int cli_loadinfo(FILE *fs, struct cl_engine *engine, unsigned int options
 	    ret = CL_EMEM;
 	    break;
 	}
-	new->name = (unsigned char *) cli_mpool_strdup(engine->mempool, tokens[0]);
+	new->name = cli_mpool_strdup(engine->mempool, tokens[0]);
 	if(!new->name) {
 	    mpool_free(engine->mempool, new);
 	    ret = CL_EMEM;
@@ -2280,10 +2309,10 @@ int cli_load(const char *filename, struct cl_engine *engine, unsigned int *signo
 	ret = cli_loaddb(fs, engine, signo, options, dbio, dbname);
 
     } else if(cli_strbcasestr(dbname, ".cvd")) {
-	ret = cli_cvdload(fs, engine, signo, options, 0, dbname);
+	ret = cli_cvdload(fs, engine, signo, options, 0, filename);
 
     } else if(cli_strbcasestr(dbname, ".cld")) {
-	ret = cli_cvdload(fs, engine, signo, options, 1, dbname);
+	ret = cli_cvdload(fs, engine, signo, options, 1, filename);
 
     } else if(cli_strbcasestr(dbname, ".hdb")) {
 	ret = cli_loadmd5(fs, engine, signo, MD5_HDB, options, dbio, dbname);
diff --git a/libclamav/scanners.c b/libclamav/scanners.c
index 9124f9d..ef41184 100644
--- a/libclamav/scanners.c
+++ b/libclamav/scanners.c
@@ -733,7 +733,7 @@ static int cli_scanmscab(int desc, cli_ctx *ctx, off_t sfx_offset)
 	if(ctx->engine->maxscansize && ctx->scansize + ctx->engine->maxfilesize >= ctx->engine->maxscansize)
 	    file->max_size = ctx->engine->maxscansize - ctx->scansize;
 	else
-	    file->max_size = ctx->engine->maxfilesize;
+	    file->max_size = ctx->engine->maxfilesize ? ctx->engine->maxfilesize : 0xffffffff;
 
 	cli_dbgmsg("CAB: Extracting file %s to %s, size %u, max_size: %u\n", file->name, tempname, file->length, (unsigned int) file->max_size);
 	file->written_size = 0;
@@ -1023,7 +1023,7 @@ static int cli_scanscript(cli_ctx *ctx)
 	struct text_norm_state state;
 	char *tmpname = NULL;
 	int ofd = -1, ret;
-	const struct cli_matcher *troot = ctx->engine->root[7];
+	struct cli_matcher *troot = ctx->engine->root[7];
 	uint32_t maxpatlen = troot ? troot->maxpatlen : 0, offset = 0;
 	struct cli_matcher *groot = ctx->engine->root[0];
 	struct cli_ac_data gmdata, tmdata;
@@ -1045,6 +1045,7 @@ static int cli_scanscript(cli_ctx *ctx)
 			cli_dbgmsg("cli_scanscript: Can't generate temporary file/descriptor\n");
 			return ret;
 		}
+		cli_dbgmsg("cli_scanscript: saving normalized file to %s\n", tmpname);
 	}
 
 	if(!(normalized = cli_malloc(SCANBUFF + maxpatlen))) {
@@ -1096,13 +1097,18 @@ static int cli_scanscript(cli_ctx *ctx)
 		cli_dbgmsg("cli_scanscript: short read during normalizing\n");
 	    }
 	}
-	cli_ac_freedata(&tmdata);
-	cli_ac_freedata(&gmdata);
 	if(ctx->engine->keeptmp) {
 		free(tmpname);
 		close(ofd);
 	}
 	free(normalized);
+	if(ret != CL_VIRUS) {
+	    ret = cli_lsig_eval(ctx, troot, &tmdata);
+	    if(ret != CL_VIRUS)
+		ret = cli_lsig_eval(ctx, groot, &gmdata);
+	}
+	cli_ac_freedata(&tmdata);
+	cli_ac_freedata(&gmdata);
 
 	return ret;
 }
@@ -1900,6 +1906,10 @@ int cli_magic_scandesc(int desc, cli_ctx *ctx)
 	unsigned char hash[16];
 	bitset_t *old_hook_lsig_matches;
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if(ctx->sha_collect>0) ctx->sha_collect = 0;
+#endif
+
     cli_dbgmsg("in cli_magic_scandesc (reclevel: %u/%u)\n", ctx->recursion, ctx->engine->maxreclevel);
     if(ctx->engine->maxreclevel && ctx->recursion > ctx->engine->maxreclevel) {
         cli_dbgmsg("cli_magic_scandesc: Archive recursion limit exceeded (%u, max: %u)\n", ctx->recursion, ctx->engine->maxreclevel);
@@ -1977,6 +1987,10 @@ int cli_magic_scandesc(int desc, cli_ctx *ctx)
 	ctx->hook_lsig_matches = old_hook_lsig_matches;
 	ret_from_magicscan(CL_EREAD);
     }
+
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if(!ctx->sha_collect && type==CL_TYPE_MSEXE) ctx->sha_collect = 1;
+#endif
     lseek(desc, 0, SEEK_SET); /* FIXMEFMAP: remove ? */
 
     ctx->hook_lsig_matches = cli_bitset_init();
@@ -2331,6 +2345,21 @@ int cl_scandesc(int desc, const char **virname, unsigned long int *scanned, cons
 	return CL_EMEM;
     ctx.hook_lsig_matches = cli_bitset_init();
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    if(scanoptions & CL_SCAN_INTERNAL_COLLECT_SHA) {
+	char link[32];
+	ssize_t linksz;
+
+	snprintf(link, sizeof(link), "/proc/self/fd/%u", desc);
+	link[sizeof(link)-1]='\0';
+	if((linksz=readlink(link, ctx.entry_filename, sizeof(ctx.entry_filename)))==-1) {
+	    cli_errmsg("failed to resolve filename for descriptor %d (%s)\n", desc, link);
+	    strcpy(ctx.entry_filename, "NO_IDEA");
+	} else
+	    ctx.entry_filename[linksz]='\0';
+    } while(0);
+#endif
+
     rc = cli_magic_scandesc(desc, &ctx);
 
     cli_bitset_free(ctx.hook_lsig_matches);
diff --git a/libclamav/sha1.c b/libclamav/sha1.c
new file mode 100644
index 0000000..4005de8
--- /dev/null
+++ b/libclamav/sha1.c
@@ -0,0 +1,626 @@
+/*-
+ * Copyright (c) 2001-2003 Allan Saddi <allan at saddi.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ALLAN SADDI AND HIS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL ALLAN SADDI OR HIS CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: sha1.c 680 2003-07-25 21:57:38Z asaddi $
+ */
+
+/*
+ * Define WORDS_BIGENDIAN if compiling on a big-endian architecture.
+ *
+ * Define SHA1_TEST to test the implementation using the NIST's
+ * sample messages. The output should be:
+ *
+ *   a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d
+ *   84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1
+ *   34aa973c d4c4daa4 f61eeb2b dbad2731 6534016f
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "clamav-config.h"
+#endif /* HAVE_CONFIG_H */
+
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+
+#include <string.h>
+
+#include "sha1.h"
+
+#ifndef lint
+static const char rcsid[] =
+	"$Id: sha1.c 680 2003-07-25 21:57:38Z asaddi $";
+#endif /* !lint */
+
+#define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
+#define ROTR(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
+
+#define F_0_19(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
+#define F_20_39(x, y, z) ((x) ^ (y) ^ (z))
+#define F_40_59(x, y, z) (((x) & ((y) | (z))) | ((y) & (z)))
+#define F_60_79(x, y, z) ((x) ^ (y) ^ (z))
+
+#define DO_ROUND(F, K) { \
+  temp = ROTL(a, 5) + F(b, c, d) + e + *(W++) + K; \
+  e = d; \
+  d = c; \
+  c = ROTL(b, 30); \
+  b = a; \
+  a = temp; \
+}
+
+#define K_0_19 0x5a827999L
+#define K_20_39 0x6ed9eba1L
+#define K_40_59 0x8f1bbcdcL
+#define K_60_79 0xca62c1d6L
+
+#ifndef RUNTIME_ENDIAN
+
+#if WORDS_BIGENDIAN == 1
+
+#define BYTESWAP(x) (x)
+#define BYTESWAP64(x) (x)
+
+#else /* WORDS_BIGENDIAN */
+
+#define BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | \
+		     (ROTL((x), 8) & 0x00ff00ffL))
+#define BYTESWAP64(x) _byteswap64(x)
+
+static inline uint64_t _byteswap64(uint64_t x)
+{
+  uint32_t a = x >> 32;
+  uint32_t b = (uint32_t) x;
+  return ((uint64_t) BYTESWAP(b) << 32) | (uint64_t) BYTESWAP(a);
+}
+
+#endif /* WORDS_BIGENDIAN */
+
+#else /* !RUNTIME_ENDIAN */
+
+#define BYTESWAP(x) _byteswap(sc->littleEndian, x)
+#define BYTESWAP64(x) _byteswap64(sc->littleEndian, x)
+
+#define _BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | \
+		      (ROTL((x), 8) & 0x00ff00ffL))
+#define _BYTESWAP64(x) __byteswap64(x)
+
+static inline uint64_t __byteswap64(uint64_t x)
+{
+  uint32_t a = x >> 32;
+  uint32_t b = (uint32_t) x;
+  return ((uint64_t) _BYTESWAP(b) << 32) | (uint64_t) _BYTESWAP(a);
+}
+
+static inline uint32_t _byteswap(int littleEndian, uint32_t x)
+{
+  if (!littleEndian)
+    return x;
+  else
+    return _BYTESWAP(x);
+}
+
+static inline uint64_t _byteswap64(int littleEndian, uint64_t x)
+{
+  if (!littleEndian)
+    return x;
+  else
+    return _BYTESWAP64(x);
+}
+
+static inline void setEndian(int *littleEndianp)
+{
+  union {
+    uint32_t w;
+    uint8_t b[4];
+  } endian;
+
+  endian.w = 1L;
+  *littleEndianp = endian.b[0] != 0;
+}
+
+#endif /* !RUNTIME_ENDIAN */
+
+static const uint8_t padding[64] = {
+  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+void
+SHA1Init (SHA1Context *sc)
+{
+#ifdef RUNTIME_ENDIAN
+  setEndian (&sc->littleEndian);
+#endif /* RUNTIME_ENDIAN */
+
+  sc->totalLength = 0LL;
+  sc->hash[0] = 0x67452301L;
+  sc->hash[1] = 0xefcdab89L;
+  sc->hash[2] = 0x98badcfeL;
+  sc->hash[3] = 0x10325476L;
+  sc->hash[4] = 0xc3d2e1f0L;
+  sc->bufferLength = 0L;
+}
+
+static void
+burnStack (int size)
+{
+  char buf[128];
+
+  memset (buf, 0, sizeof (buf));
+  size -= sizeof (buf);
+  if (size > 0)
+    burnStack (size);
+}
+
+static void
+SHA1Guts (SHA1Context *sc, const uint32_t *cbuf)
+{
+  uint32_t buf[80];
+  uint32_t *W, *W3, *W8, *W14, *W16;
+  uint32_t a, b, c, d, e, temp;
+  int i;
+
+  W = buf;
+
+  for (i = 15; i >= 0; i--) {
+    *(W++) = BYTESWAP(*cbuf);
+    cbuf++;
+  }
+
+  W16 = &buf[0];
+  W14 = &buf[2];
+  W8 = &buf[8];
+  W3 = &buf[13];
+
+  for (i = 63; i >= 0; i--) {
+    *W = *(W3++) ^ *(W8++) ^ *(W14++) ^ *(W16++);
+    *W = ROTL(*W, 1);
+    W++;
+  }
+
+  a = sc->hash[0];
+  b = sc->hash[1];
+  c = sc->hash[2];
+  d = sc->hash[3];
+  e = sc->hash[4];
+
+  W = buf;
+
+#ifndef SHA1_UNROLL
+#define SHA1_UNROLL 20
+#endif /* !SHA1_UNROLL */
+
+#if SHA1_UNROLL == 1
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_0_19, K_0_19);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_20_39, K_20_39);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_40_59, K_40_59);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_60_79, K_60_79);
+#elif SHA1_UNROLL == 2
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 4
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 5
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 10
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 20
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+#else /* SHA1_UNROLL */
+#error SHA1_UNROLL must be 1, 2, 4, 5, 10 or 20!
+#endif
+
+  sc->hash[0] += a;
+  sc->hash[1] += b;
+  sc->hash[2] += c;
+  sc->hash[3] += d;
+  sc->hash[4] += e;
+}
+
+void
+SHA1Update (SHA1Context *sc, const void *vdata, uint32_t len)
+{
+  const uint8_t *data = vdata;
+  uint32_t bufferBytesLeft;
+  uint32_t bytesToCopy;
+  int needBurn = 0;
+
+#ifdef SHA1_FAST_COPY
+  if (sc->bufferLength) {
+    bufferBytesLeft = 64L - sc->bufferLength;
+
+    bytesToCopy = bufferBytesLeft;
+    if (bytesToCopy > len)
+      bytesToCopy = len;
+
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
+
+    sc->totalLength += bytesToCopy * 8L;
+
+    sc->bufferLength += bytesToCopy;
+    data += bytesToCopy;
+    len -= bytesToCopy;
+
+    if (sc->bufferLength == 64L) {
+      SHA1Guts (sc, sc->buffer.words);
+      needBurn = 1;
+      sc->bufferLength = 0L;
+    }
+  }
+
+  while (len > 63) {
+    sc->totalLength += 512L;
+
+    SHA1Guts (sc, data);
+    needBurn = 1;
+
+    data += 64L;
+    len -= 64L;
+  }
+
+  if (len) {
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, len);
+
+    sc->totalLength += len * 8L;
+
+    sc->bufferLength += len;
+  }
+#else /* SHA1_FAST_COPY */
+  while (len) {
+    bufferBytesLeft = 64L - sc->bufferLength;
+
+    bytesToCopy = bufferBytesLeft;
+    if (bytesToCopy > len)
+      bytesToCopy = len;
+
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
+
+    sc->totalLength += bytesToCopy * 8L;
+
+    sc->bufferLength += bytesToCopy;
+    data += bytesToCopy;
+    len -= bytesToCopy;
+
+    if (sc->bufferLength == 64L) {
+      SHA1Guts (sc, sc->buffer.words);
+      needBurn = 1;
+      sc->bufferLength = 0L;
+    }
+  }
+#endif /* SHA1_FAST_COPY */
+
+  if (needBurn)
+    burnStack (sizeof (uint32_t[86]) + sizeof (uint32_t *[5]) + sizeof (int));
+}
+
+void
+SHA1Final (SHA1Context *sc, uint8_t hash[SHA1_HASH_SIZE])
+{
+  uint32_t bytesToPad;
+  uint64_t lengthPad;
+  int i;
+
+  bytesToPad = 120L - sc->bufferLength;
+  if (bytesToPad > 64L)
+    bytesToPad -= 64L;
+
+  lengthPad = BYTESWAP64(sc->totalLength);
+
+  SHA1Update (sc, padding, bytesToPad);
+  SHA1Update (sc, &lengthPad, 8L);
+
+  if (hash) {
+    for (i = 0; i < SHA1_HASH_WORDS; i++) {
+#ifdef SHA1_FAST_COPY
+      *((uint32_t *) hash) = BYTESWAP(sc->hash[i]);
+#else /* SHA1_FAST_COPY */
+      hash[0] = (uint8_t) (sc->hash[i] >> 24);
+      hash[1] = (uint8_t) (sc->hash[i] >> 16);
+      hash[2] = (uint8_t) (sc->hash[i] >> 8);
+      hash[3] = (uint8_t) sc->hash[i];
+#endif /* SHA1_FAST_COPY */
+      hash += 4;
+    }
+  }
+}
+
+#ifdef SHA1_TEST
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main (int argc, char *argv[])
+{
+  SHA1Context foo;
+  uint8_t hash[SHA1_HASH_SIZE];
+  char buf[1000];
+  int i;
+
+  SHA1Init (&foo);
+  SHA1Update (&foo, "abc", 3);
+  SHA1Final (&foo, hash);
+
+  for (i = 0; i < SHA1_HASH_SIZE;) {
+    printf ("%02x", hash[i++]);
+    if (!(i % 4))
+      printf (" ");
+  }
+  printf ("\n");
+
+  SHA1Init (&foo);
+  SHA1Update (&foo,
+		"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+		56);
+  SHA1Final (&foo, hash);
+
+  for (i = 0; i < SHA1_HASH_SIZE;) {
+    printf ("%02x", hash[i++]);
+    if (!(i % 4))
+      printf (" ");
+  }
+  printf ("\n");
+
+  SHA1Init (&foo);
+  memset (buf, 'a', sizeof (buf));
+  for (i = 0; i < 1000; i++)
+    SHA1Update (&foo, buf, sizeof (buf));
+  SHA1Final (&foo, hash);
+
+  for (i = 0; i < SHA1_HASH_SIZE;) {
+    printf ("%02x", hash[i++]);
+    if (!(i % 4))
+      printf (" ");
+  }
+  printf ("\n");
+
+  exit (0);
+}
+
+#endif /* SHA1_TEST */
diff --git a/libclamav/sha1.h b/libclamav/sha1.h
new file mode 100644
index 0000000..7a6beb7
--- /dev/null
+++ b/libclamav/sha1.h
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2001-2003 Allan Saddi <allan at saddi.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ALLAN SADDI AND HIS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL ALLAN SADDI OR HIS CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: sha1.h 347 2003-02-23 22:11:49Z asaddi $
+ */
+
+#ifndef _SHA1_H
+#define _SHA1_H
+
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+
+#define SHA1_HASH_SIZE 20
+
+/* Hash size in 32-bit words */
+#define SHA1_HASH_WORDS 5
+
+struct _SHA1Context {
+  uint64_t totalLength;
+  uint32_t hash[SHA1_HASH_WORDS];
+  uint32_t bufferLength;
+  union {
+    uint32_t words[16];
+    uint8_t bytes[64];
+  } buffer;
+#ifdef RUNTIME_ENDIAN
+  int littleEndian;
+#endif /* RUNTIME_ENDIAN */
+};
+
+typedef struct _SHA1Context SHA1Context;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void SHA1Init (SHA1Context *sc);
+void SHA1Update (SHA1Context *sc, const void *data, uint32_t len);
+void SHA1Final (SHA1Context *sc, uint8_t hash[SHA1_HASH_SIZE]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHA1_H */
diff --git a/libclamav/type_desc.h b/libclamav/type_desc.h
index 7aa552a..0f9721e 100644
--- a/libclamav/type_desc.h
+++ b/libclamav/type_desc.h
@@ -49,6 +49,8 @@ typedef int32_t (*cli_apicall_ptrbuffdata)(struct cli_bc_ctx *, void*, uint32_t,
 typedef int32_t (*cli_apicall_allocobj)(struct cli_bc_ctx *);
 typedef void* (*cli_apicall_bufget)(struct cli_bc_ctx *, int32_t, uint32_t);
 typedef int32_t (*cli_apicall_int3)(struct cli_bc_ctx *, int32_t, int32_t, int32_t);
+typedef int32_t (*cli_apicall_2bufs)(struct cli_bc_ctx *, void*, int32_t, void*, int32_t);
+typedef int32_t (*cli_apicall_ptrbufid)(struct cli_bc_ctx *, void*, int32_t, int32_t);
 
 struct cli_apicall {
     const char *name;
@@ -81,6 +83,8 @@ extern const cli_apicall_ptrbuffdata cli_apicalls4[];
 extern const cli_apicall_allocobj cli_apicalls5[];
 extern const cli_apicall_bufget cli_apicalls6[];
 extern const cli_apicall_int3 cli_apicalls7[];
+extern const cli_apicall_2bufs cli_apicalls8[];
+extern const cli_apicall_ptrbufid cli_apicalls9[];
 extern const unsigned cli_apicall_maxapi;
 extern const unsigned cli_apicall_maxglobal;
 
diff --git a/libclamav/unzip.c b/libclamav/unzip.c
index da40fcc..0b3ce84 100644
--- a/libclamav/unzip.c
+++ b/libclamav/unzip.c
@@ -416,7 +416,7 @@ static unsigned int lhdr(fmap_t *map, uint32_t loff,uint32_t zsize, unsigned int
 static unsigned int chdr(fmap_t *map, uint32_t coff, uint32_t zsize, unsigned int *fu, unsigned int fc, int *ret, cli_ctx *ctx, char *tmpd) {
   char name[256];
   int last = 0;
-  int8_t *ch;
+  uint8_t *ch;
 
   if(!(ch = fmap_need_off(map, coff, SIZEOF_CH)) || CH_magic != 0x02014b50) {
       if(ch) fmap_unneed_ptr(map, ch, SIZEOF_CH);
diff --git a/libltdl/Makefile.in b/libltdl/Makefile.in
index 6069e69..c079797 100644
--- a/libltdl/Makefile.in
+++ b/libltdl/Makefile.in
@@ -47,12 +47,14 @@ DIST_COMMON = README $(am__include_HEADERS_DIST) \
 	$(srcdir)/Makefile.in COPYING.LIB
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -195,6 +197,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/m4/acinclude.m4 b/m4/acinclude.m4
index 0f6f6a3..c8aa878 100644
--- a/m4/acinclude.m4
+++ b/m4/acinclude.m4
@@ -634,6 +634,7 @@ LIBS="$LIBCLAMAV_LIBS $LIBBZ2"
 AC_TRY_RUN([
 #include <string.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <bzlib.h>
 
 #ifdef NOBZ2PREFIX
diff --git a/m4/ax_check_uname_syscall.m4 b/m4/ax_check_uname_syscall.m4
new file mode 100644
index 0000000..afc740a
--- /dev/null
+++ b/m4/ax_check_uname_syscall.m4
@@ -0,0 +1,39 @@
+# ===========================================================================
+#  http://www.gnu.org/software/autoconf-archive/ax_check_uname_syscall.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_UNAME_SYSCALL
+#
+# DESCRIPTION
+#
+#   Check that the POSIX compliant uname(2) call works properly.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Bruce Korb <bkorb at gnu.org>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 5
+
+AU_ALIAS([AG_CHECK_UNAME_SYSCALL], [AX_CHECK_UNAME_SYSCALL])
+AC_DEFUN([AX_CHECK_UNAME_SYSCALL],[
+  AC_MSG_CHECKING([whether uname(2) is POSIX])
+  AC_CACHE_VAL([ax_cv_uname_syscall],[
+  AC_TRY_RUN([#include <sys/utsname.h>
+int main() { struct utsname unm;
+return uname( &unm ); }],[ax_cv_uname_syscall=yes],[ax_cv_uname_syscall=no],[ax_cv_uname_syscall=no]
+  ) # end of TRY_RUN]) # end of CACHE_VAL
+
+  AC_MSG_RESULT([$ax_cv_uname_syscall])
+  if test x$ax_cv_uname_syscall = xyes
+  then
+    AC_DEFINE(HAVE_UNAME_SYSCALL, 1,
+       [Define this if uname(2) is POSIX])
+  fi
+]) # end of AC_DEFUN of AX_CHECK_UNAME_SYSCALL
diff --git a/platform.h.in b/platform.h.in
index c30f2d5..2eab3b0 100644
--- a/platform.h.in
+++ b/platform.h.in
@@ -40,4 +40,6 @@ typedef	unsigned	int	in_addr_t;
 
 /* Nothing is safe in windows, not even open */
 #define safe_open open
-
+#ifndef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 0
+#endif
diff --git a/shared/misc.c b/shared/misc.c
index 080d4ec..aa8229b 100644
--- a/shared/misc.c
+++ b/shared/misc.c
@@ -170,6 +170,15 @@ void print_version(const char *dbdir)
 
     free(path);
 }
+
+int check_flevel(void)
+{
+    if(cl_retflevel() < CL_FLEVEL) {
+	fprintf(stderr, "ERROR: This tool requires libclamav with functionality level %u or higher (current f-level: %u)\n", CL_FLEVEL, cl_retflevel());
+	return 1;
+    }
+    return 0;
+}
 #endif
 
 const char *filelist(const struct optstruct *opts, int *err)
@@ -286,7 +295,6 @@ int daemonize(void)
 #endif
 }
 
-#ifndef CL_NOLIBCLAMAV
 int match_regex(const char *filename, const char *pattern)
 {
 	regex_t reg;
@@ -310,7 +318,6 @@ int match_regex(const char *filename, const char *pattern)
 	cli_regfree(&reg);
 	return match;
 }
-#endif
 
 int cfg_tcpsock(const struct optstruct *opts, struct sockaddr_in *tcpsock, in_addr_t defaultbind)
 {
diff --git a/shared/misc.h b/shared/misc.h
index 065269a..3f53466 100644
--- a/shared/misc.h
+++ b/shared/misc.h
@@ -45,6 +45,7 @@
 
 char *freshdbdir(void);
 void print_version(const char *dbdir);
+int check_flevel(void);
 const char *filelist(const struct optstruct *opts, int *err);
 int filecopy(const char *src, const char *dest);
 int daemonize(void);
diff --git a/shared/optparser.c b/shared/optparser.c
index 1488cd8..b093821 100644
--- a/shared/optparser.c
+++ b/shared/optparser.c
@@ -329,6 +329,10 @@ const struct clam_option __clam_options[] = {
 
     { "DevACDepth", "dev-ac-depth", 0, TYPE_NUMBER, MATCH_NUMBER, -1, NULL, FLAG_HIDDEN, OPT_CLAMD | OPT_CLAMSCAN, "", "" },
 
+#ifdef HAVE__INTERNAL__SHA_COLLECT
+    { "DevCollectHashes", "dev-collect-hashes", 0, TYPE_BOOL, MATCH_BOOL, -1, NULL, FLAG_HIDDEN, OPT_CLAMD | OPT_CLAMSCAN, "", "" },
+#endif
+
     /* Freshclam-only entries */
 
     /* FIXME: drop this entry and use LogFile */
@@ -346,6 +350,8 @@ const struct clam_option __clam_options[] = {
 
     { "ScriptedUpdates", NULL, 0, TYPE_BOOL, MATCH_BOOL, 1, NULL, 0, OPT_FRESHCLAM, "With this option you can control scripted updates. It's highly recommended to keep them enabled.", "yes" },
 
+    { "TestDatabases", NULL, 0, TYPE_BOOL, MATCH_BOOL, 1, NULL, 0, OPT_FRESHCLAM, "With this option enabled, freshclam will attempt to load new\ndatabases into memory to make sure they are properly handled\nby libclamav before replacing the old ones.", "yes" },
+
     { "CompressLocalDatabase", NULL, 0, TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_FRESHCLAM, "By default freshclam will keep the local databases (.cld) uncompressed to\nmake their handling faster. With this option you can enable the compression.\nThe change will take effect with the next database update.", "" },
 
     { "ExtraDatabase", NULL, 0, TYPE_STRING, NULL, -1, NULL, FLAG_MULTIPLE, OPT_FRESHCLAM, "Download additional database. This option can be used multiple times.", "dbname1\ndbname2" },
@@ -420,6 +426,8 @@ const struct clam_option __clam_options[] = {
 
     { "ReportHostname", NULL, 0, TYPE_STRING, NULL, -1, NULL, 0, OPT_MILTER, "When AddHeader is in use, this option allows to arbitrary set the reported\nhostname. This may be desirable in order to avoid leaking internal names.\nIf unset the real machine name is used.", "my.mail.server.name" },
 
+    { "VirusAction", NULL, 0, TYPE_STRING, NULL, -1, NULL, 0, OPT_MILTER, "Execute a command when an infected message is processed.\nThe following parameters are passed to the invoked program in this order:\nvirus name, queue id, sender, destination, subject, message id, message date.\nNote #1: this requires MTA macroes to be available (see LogInfected below)\nNote #2: the process is invoked in the context of clamav-milter\nNote #3: clamav-milter will wait for the process to exit. Be quick or fork to\navoid unnecessary delays in email delievery", "/usr/local/bin/my_infected_message_handler" },
+
     { "Chroot", NULL, 0, TYPE_STRING, NULL, -1, NULL, 0, OPT_MILTER, "Chroot to the specified directory.\nChrooting is performed just after reading the config file and before\ndropping privileges.", "/newroot" },
 
     { "Whitelist", NULL, 0, TYPE_STRING, NULL, -1, NULL, 0, OPT_MILTER, "This option specifies a file which contains a list of basic POSIX regular\nexpressions. Addresses (sent to or from - see below) matching these regexes\nwill not be scanned.  Optionally each line can start with the string \"From:\"\nor \"To:\" (note: no whitespace after the colon) indicating if it is,\nrespectively, the sender or recipient that is to be whitelisted.\nIf the field is missing, \"To:\" is assumed.\nLines starting with #, : or ! are ignored.", "/etc/whitelisted_addresses" },
diff --git a/shared/output.c b/shared/output.c
index 72fdde7..36b78b2 100644
--- a/shared/output.c
+++ b/shared/output.c
@@ -297,14 +297,21 @@ int logg(const char *str, ...)
 		memset(&fl, 0, sizeof(fl));
 		fl.l_type = F_WRLCK;
 		if(fcntl(fileno(logg_fp), F_SETLK, &fl) == -1) {
-#ifdef CL_THREAD_SAFE
-		    pthread_mutex_unlock(&logg_mutex);
+#ifdef EOPNOTSUPP
+		    if(errno == EOPNOTSUPP)
+			printf("WARNING: File locking not supported (NFS?)\n");
+		    else
 #endif
-		    printf("ERROR: %s is locked by another process\n", logg_file);
-		    if(len > sizeof(buffer))
-			free(abuffer);
-		    return -1;
-		}
+		    {
+#ifdef CL_THREAD_SAFE
+		        pthread_mutex_unlock(&logg_mutex);
+#endif
+		        printf("ERROR: %s is locked by another process\n", logg_file);
+		        if(len > sizeof(buffer))
+			    free(abuffer);
+		        return -1;
+		    }
+	        }
 	    }
 #endif
 	}
diff --git a/sigtool/Makefile.in b/sigtool/Makefile.in
index a4324fc..be3bc52 100644
--- a/sigtool/Makefile.in
+++ b/sigtool/Makefile.in
@@ -58,12 +58,14 @@ subdir = sigtool
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -122,6 +124,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/sigtool/sigtool.c b/sigtool/sigtool.c
index 7fbea36..db2d9ef 100644
--- a/sigtool/sigtool.c
+++ b/sigtool/sigtool.c
@@ -103,6 +103,7 @@ static const struct dblist_s {
     { "main.sdb",   1 },    { "daily.sdb",  1 },
     { "main.zmd",   1 },    { "daily.zmd",  1 },
     { "main.rmd",   1 },    { "daily.rmd",  1 },
+    { "main.idb",   0 },    { "daily.idb",  0 },
     { "main.fp",    0 },    { "daily.fp",   0 },
     { "main.pdb",   1 },    { "daily.pdb",  1 },    { "safebrowsing.gdb", 1 },
     { "main.wdb",   0 },    { "daily.wdb",  0 },    { "safebrowsing.wdb", 0 },
@@ -715,6 +716,29 @@ static int build(const struct optstruct *opts)
 		}
 	    }
 	    closedir(dd);
+	    if(!access("last.hdb", R_OK)) {
+		if(!dblist2) {
+		    mprintf("!build: dblist2 == NULL (no .cbc files?)\n");
+		    return -1;
+		}
+		lspt = dblist2;
+		while(lspt->next)
+		    lspt = lspt->next;
+		lspt->next = (struct dblist_scan *) malloc(sizeof(struct dblist_scan));
+		if(!lspt->next) {
+		    FREE_LS(dblist2);
+		    mprintf("!build: Memory allocation error\n");
+		    return -1;
+		}
+		lspt->next->name = strdup("last.hdb");
+		lspt->next->next = NULL;
+		if(!lspt->next->name) {
+		    FREE_LS(dblist2);
+		    mprintf("!build: Memory allocation error\n");
+		    return -1;
+		}
+		entries += countlines("last.hdb");
+	    }
 	} else {
 	    for(i = 0; dblist[i].name; i++)
 		if(dblist[i].count && strstr(dblist[i].name, dbname) && !access(dblist[i].name, R_OK))
@@ -1464,7 +1488,7 @@ static int comparesha(const char *dbname)
 	    break;
 	}
 	if(!(sha = sha256file(tokens[0], NULL))) {
-	    mprintf("!verifydiff: Can't generate MD5 for %s\n", buff);
+	    mprintf("!verifydiff: Can't generate SHA256 for %s\n", buff);
 	    ret = -1;
 	    break;
 	}
@@ -1521,7 +1545,7 @@ static int compare(const char *oldpath, const char *newpath, FILE *diff)
 	long opos;
 
 
-    if((omd5 = cli_md5file(oldpath))) {
+    if(!access(oldpath, R_OK) && (omd5 = cli_md5file(oldpath))) {
 	if(!(nmd5 = cli_md5file(newpath))) {
 	    mprintf("!compare: Can't get MD5 checksum of %s\n", newpath);
 	    free(omd5);
@@ -2568,6 +2592,9 @@ int main(int argc, char **argv)
         struct optstruct *opts;
 	struct stat sb;
 
+    if(check_flevel())
+	exit(1);
+
     opts = optparse(NULL, argc, argv, 1, OPT_SIGTOOL, 0, NULL);
     if(!opts) {
 	mprintf("!Can't parse command line options\n");
diff --git a/test/Makefile.in b/test/Makefile.in
index 36458f6..d67f53b 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -38,12 +38,14 @@ subdir = test
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -70,6 +72,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/unit_tests/Makefile.in b/unit_tests/Makefile.in
index 98f228e..822eb13 100644
--- a/unit_tests/Makefile.in
+++ b/unit_tests/Makefile.in
@@ -41,12 +41,14 @@ subdir = unit_tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \
-	$(top_srcdir)/m4/argz.m4 $(top_srcdir)/m4/fdpassing.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/llvm.m4 $(top_srcdir)/m4/ltdl.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/argz.m4 \
+	$(top_srcdir)/m4/ax_check_uname_syscall.m4 \
+	$(top_srcdir)/m4/fdpassing.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/llvm.m4 \
+	$(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 \
 	$(top_srcdir)/m4/mmap_private.m4 $(top_srcdir)/m4/resolv.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -213,6 +215,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_CONFIGURE_FLAGS = @BUILD_CONFIGURE_FLAGS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFGDIR = @CFGDIR@
diff --git a/unit_tests/check_bytecode.c b/unit_tests/check_bytecode.c
index 0b76e1a..9a9097e 100644
--- a/unit_tests/check_bytecode.c
+++ b/unit_tests/check_bytecode.c
@@ -30,6 +30,7 @@
 #include <string.h>
 #include <check.h>
 #include <fcntl.h>
+#include <errno.h>
 #include "../libclamav/clamav.h"
 #include "../libclamav/others.h"
 #include "../libclamav/bytecode.h"
@@ -51,8 +52,16 @@ static void runtest(const char *file, uint64_t expected, int fail, int nojit,
     struct cli_bc_ctx *ctx;
     struct cli_all_bc bcs;
     uint64_t v;
+    struct cl_engine *engine;
+    int fdin = -1;
 
     memset(&cctx, 0, sizeof(cctx));
+    cctx.engine = engine = cl_engine_new();
+    fail_unless(!!cctx.engine, "cannot create engine");
+    rc = cl_engine_compile(engine);
+    fail_unless(!rc, "cannot compile engine");
+    cctx.fmap = cli_calloc(sizeof(fmap_t*), engine->maxreclevel + 2);
+    fail_unless(!!cctx.fmap, "cannot allocate fmap");
 
     fail_unless(fd >= 0, "retmagic open failed");
     f = fdopen(fd, "r");
@@ -85,12 +94,14 @@ static void runtest(const char *file, uint64_t expected, int fail, int nojit,
     ctx->bytecode_timeout = fail == CL_ETIMEOUT ? 10 : 10000;
     fail_unless(!!ctx, "cli_bytecode_context_alloc failed");
 
+    ctx->ctx = &cctx;
     if (infile) {
-	int fdin = open(infile, O_RDONLY);
+	fdin = open(infile, O_RDONLY);
+	if (fdin < 0 && errno == ENOENT)
+	    fdin = open_testfile(infile);
 	fail_unless(fdin >= 0, "failed to open infile");
 	map = fmap(fdin, 0, 0);
 	fail_unless(!!map, "unable to fmap infile");
-	ctx->ctx = &cctx;
 	if (pedata)
 	    ctx->hooks.pedata = pedata;
 	ctx->sections = sections;
@@ -117,6 +128,10 @@ static void runtest(const char *file, uint64_t expected, int fail, int nojit,
 	funmap(map);
     cli_bytecode_destroy(&bc);
     cli_bytecode_done(&bcs);
+    free(cctx.fmap);
+    cl_engine_free(engine);
+    if (fdin >= 0)
+	close(fdin);
 }
 
 START_TEST (test_retmagic_jit)
@@ -223,7 +238,7 @@ START_TEST (test_matchwithread_jit)
     cl_init(CL_INIT_DEFAULT);
     memset(&pedata, 0, sizeof(pedata));
     pedata.ep = 64;
-    pedata.opt32.ImageBase = 0x400000;
+    cli_writeint32(&pedata.opt32.ImageBase, 0x400000);
     pedata.hdr_size = 0x400;
     pedata.nsections = 1;
     sect.rva = 4096;
@@ -246,7 +261,7 @@ START_TEST (test_matchwithread_int)
     cl_init(CL_INIT_DEFAULT);
     memset(&pedata, 0, sizeof(pedata));
     pedata.ep = 64;
-    pedata.opt32.ImageBase = 0x400000;
+    cli_writeint32(&pedata.opt32.ImageBase, 0x400000);
     pedata.hdr_size = 0x400;
     pedata.nsections = 1;
     sect.rva = 4096;
@@ -301,7 +316,201 @@ END_TEST
 START_TEST (test_inflate_int)
 {
     cl_init(CL_INIT_DEFAULT);
-    runtest("input/inflate.cbc", 0xbeef, 0, 1, NULL, NULL, NULL, NULL);
+    runtest("input/inflate.cbc", 0xbeef, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_api_extract_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/api_extract_7.cbc", 0xf00d, 0, 0, "input/apitestfile", NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_api_files_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/api_files_7.cbc", 0xf00d, 0, 0, "input/apitestfile", NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_apicalls2_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/apicalls2_7.cbc", 0xf00d, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_apicalls_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/apicalls_7.cbc", 0xf00d, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_arith_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/arith_7.cbc", 0xd55555dd, CL_SUCCESS, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_debug_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/debug_7.cbc", 0xf00d, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_inf_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/inf_7.cbc", 0, CL_ETIMEOUT, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_lsig_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/lsig_7.cbc", 0, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_retmagic_7_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/retmagic_7.cbc", 0x1234f00d, CL_SUCCESS, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_testadt_jit)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/testadt_7.cbc", 0xf00d, 0, 0, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_api_extract_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/api_extract_7.cbc", 0xf00d, 0, 1, "input/apitestfile", NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_api_files_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/api_files_7.cbc", 0xf00d, 0, 1, "input/apitestfile", NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_apicalls2_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/apicalls2_7.cbc", 0xf00d, 0, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_apicalls_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/apicalls_7.cbc", 0xf00d, 0, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_arith_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/arith_7.cbc", 0xd55555dd, CL_SUCCESS, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_debug_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/debug_7.cbc", 0xf00d, 0, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_inf_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/inf_7.cbc", 0, CL_ETIMEOUT, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_lsig_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/lsig_7.cbc", 0, 0, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_retmagic_7_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/retmagic_7.cbc", 0x1234f00d, CL_SUCCESS, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+START_TEST (test_testadt_int)
+{
+    cl_init(CL_INIT_DEFAULT);
+    runtest("input/testadt_7.cbc", 0xf00d, 0, 1, NULL, NULL, NULL, NULL);
+}
+END_TEST
+
+
+static void runload(const char *dbname, struct cl_engine* engine, unsigned signoexp)
+{
+    const char * srcdir = getenv("srcdir");
+    char *str;
+    unsigned signo = 0;
+    int rc;
+    if(!srcdir) {
+	/* when run from automake srcdir is set, but if run manually then not */
+	srcdir = SRCDIR;
+    }
+    str = cli_malloc(strlen(dbname)+strlen(srcdir)+2);
+    fail_unless(!!str, "cli_malloc");
+    sprintf(str, "%s/%s", srcdir, dbname);
+
+    rc = cl_load(str, engine, &signo, CL_DB_STDOPT);
+    fail_unless_fmt(rc == CL_SUCCESS, "failed to load %s: %s\n",
+		    dbname, cl_strerror(rc));
+    fail_unless_fmt(signo == signoexp, "different number of signatures loaded, expected %u, got %u\n",
+		    signoexp, signo);
+    free(str);
+
+    rc = cl_engine_compile(engine);
+    fail_unless_fmt(rc == CL_SUCCESS, "failed to load %s: %s\n",
+		    dbname, cl_strerror(rc));
+}
+
+START_TEST (test_load_bytecode_jit)
+{
+    struct cl_engine *engine;
+    cl_init(CL_INIT_DEFAULT);
+    engine = cl_engine_new();
+    fail_unless(!!engine, "failed to create engine\n");
+
+    runload("input/bytecode.cvd", engine, 5);
+
+    cl_engine_free(engine);
+}
+END_TEST
+
+START_TEST (test_load_bytecode_int)
+{
+    struct cl_engine *engine;
+    cl_init(CL_INIT_DEFAULT);
+    engine = cl_engine_new();
+    engine->dconf->bytecode = BYTECODE_INTERPRETER;
+    fail_unless(!!engine, "failed to create engine\n");
+
+    runload("input/bytecode.cvd", engine, 5);
+
+    cl_engine_free(engine);
 }
 END_TEST
 
@@ -323,6 +532,7 @@ Suite *test_bytecode_suite(void)
     tcase_add_test(tc_cli_arith, test_bswap_jit);
     tcase_add_test(tc_cli_arith, test_inflate_jit);
     tcase_add_test(tc_cli_arith, test_retmagic_jit);
+
     tcase_add_test(tc_cli_arith, test_arith_int);
     tcase_add_test(tc_cli_arith, test_apicalls_int);
     tcase_add_test(tc_cli_arith, test_apicalls2_int);
@@ -333,5 +543,34 @@ Suite *test_bytecode_suite(void)
     tcase_add_test(tc_cli_arith, test_pdf_int);
     tcase_add_test(tc_cli_arith, test_bswap_int);
     tcase_add_test(tc_cli_arith, test_inflate_int);
+    tcase_add_test(tc_cli_arith, test_retmagic_int);
+
+    tcase_add_test(tc_cli_arith, test_api_extract_jit);
+    tcase_add_test(tc_cli_arith, test_api_files_jit);
+    tcase_add_test(tc_cli_arith, test_apicalls2_7_jit);
+    tcase_add_test(tc_cli_arith, test_apicalls_7_jit);
+    tcase_add_test(tc_cli_arith, test_apicalls_7_jit);
+    tcase_add_test(tc_cli_arith, test_arith_7_jit);
+    tcase_add_test(tc_cli_arith, test_debug_jit);
+    tcase_add_test(tc_cli_arith, test_inf_7_jit);
+    tcase_add_test(tc_cli_arith, test_lsig_7_jit);
+    tcase_add_test(tc_cli_arith, test_retmagic_7_jit);
+    tcase_add_test(tc_cli_arith, test_testadt_jit);
+
+    tcase_add_test(tc_cli_arith, test_api_extract_int);
+    tcase_add_test(tc_cli_arith, test_api_files_int);
+    tcase_add_test(tc_cli_arith, test_apicalls2_7_int);
+    tcase_add_test(tc_cli_arith, test_apicalls_7_int);
+    tcase_add_test(tc_cli_arith, test_apicalls_7_int);
+    tcase_add_test(tc_cli_arith, test_arith_7_int);
+    tcase_add_test(tc_cli_arith, test_debug_int);
+    tcase_add_test(tc_cli_arith, test_inf_7_int);
+    tcase_add_test(tc_cli_arith, test_lsig_7_int);
+    tcase_add_test(tc_cli_arith, test_retmagic_int);
+    tcase_add_test(tc_cli_arith, test_testadt_int);
+
+    tcase_add_test(tc_cli_arith, test_load_bytecode_jit);
+    tcase_add_test(tc_cli_arith, test_load_bytecode_int);
+
     return s;
 }
diff --git a/unit_tests/check_clamav.c b/unit_tests/check_clamav.c
index b459a1e..55e9341 100644
--- a/unit_tests/check_clamav.c
+++ b/unit_tests/check_clamav.c
@@ -342,23 +342,6 @@ static uint8_t tv2[56] = {
   0x6d, 0x6e, 0x6f, 0x70, 0x6e, 0x6f, 0x70, 0x71
 };
 
-static uint8_t tv3[112] = {
-  0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-  0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
-  0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
-  0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
-  0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
-  0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
-  0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
-  0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
-  0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71,
-  0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72,
-  0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73,
-  0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74,
-  0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75
-};
-
 static uint8_t res256[3][SHA256_HASH_SIZE] = {
   { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde,
     0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
diff --git a/unit_tests/check_common.sh b/unit_tests/check_common.sh
index ea77f86..c489f43 100644
--- a/unit_tests/check_common.sh
+++ b/unit_tests/check_common.sh
@@ -47,7 +47,8 @@ die()
 
 # Setup test directory to avoid temporary and output file clashes
 test_start() {
-    ulimit -t 120; ulimit -d 512000; ulimit -v 600000;
+    ulimit -t 120; ulimit -d 512000;
+    ulimit -v 600000 || true;
     (cd test-$1 2>/dev/null && killclamd || true)
     rm -rf test-$1
     mkdir test-$1
diff --git a/unit_tests/check_matchers.c b/unit_tests/check_matchers.c
index 4ccef21..5175179 100644
--- a/unit_tests/check_matchers.c
+++ b/unit_tests/check_matchers.c
@@ -110,11 +110,11 @@ START_TEST (test_ac_scanbuff) {
     fail_unless(ret == CL_SUCCESS, "cli_ac_initdata() failed");
 
     for(i = 0; ac_testdata[i].data; i++) {
-	ret = cli_ac_scanbuff(ac_testdata[i].data, strlen(ac_testdata[i].data), &virname, NULL, NULL, root, &mdata, 0, 0, NULL, AC_SCAN_VIR, NULL);
+	ret = cli_ac_scanbuff((const unsigned char*)ac_testdata[i].data, strlen(ac_testdata[i].data), &virname, NULL, NULL, root, &mdata, 0, 0, NULL, AC_SCAN_VIR, NULL);
 	fail_unless_fmt(ret == CL_VIRUS, "cli_ac_scanbuff() failed for %s", ac_testdata[i].virname);
 	fail_unless_fmt(!strncmp(virname, ac_testdata[i].virname, strlen(ac_testdata[i].virname)), "Dataset %u matched with %s", i, virname);
 
-	ret = cli_scanbuff(ac_testdata[i].data, strlen(ac_testdata[i].data), 0, &ctx, 0, NULL);
+	ret = cli_scanbuff((const unsigned char*)ac_testdata[i].data, strlen(ac_testdata[i].data), 0, &ctx, 0, NULL);
 	fail_unless_fmt(ret == CL_VIRUS, "cli_scanbuff() failed for %s", ac_testdata[i].virname);
 	fail_unless_fmt(!strncmp(virname, ac_testdata[i].virname, strlen(ac_testdata[i].virname)), "Dataset %u matched with %s", i, virname);
     }
@@ -145,7 +145,7 @@ START_TEST (test_bm_scanbuff) {
     ret = cli_parse_add(root, "Sig3", "babedead", 0, 0, "*", 0, NULL, 0);
     fail_unless(ret == CL_SUCCESS, "cli_parse_add() failed");
 
-    ret = cli_bm_scanbuff("blah\xde\xad\xbe\xef", 12, &virname, NULL, root, 0, NULL, NULL);
+    ret = cli_bm_scanbuff((const unsigned char*)"blah\xde\xad\xbe\xef", 12, &virname, NULL, root, 0, NULL, NULL);
     fail_unless(ret == CL_VIRUS, "cli_bm_scanbuff() failed");
     fail_unless(!strncmp(virname, "Sig2", 4), "Incorrect signature matched in cli_bm_scanbuff()\n");
 }
diff --git a/unit_tests/check_regex.c b/unit_tests/check_regex.c
index 06cb6cd..0e1a4c1 100644
--- a/unit_tests/check_regex.c
+++ b/unit_tests/check_regex.c
@@ -380,7 +380,7 @@ static void do_phishing_test(const struct rtest *rtest)
 	hrefs.tag = cli_malloc(sizeof(*hrefs.tag));
 	fail_unless(!!hrefs.tag, "cli_malloc");
 	hrefs.tag[0] = (unsigned char*)cli_strdup("href");
-	hrefs.contents[0] = cli_strdup(rtest->displayurl);
+	hrefs.contents[0] = (unsigned char*)cli_strdup(rtest->displayurl);
 
 	ctx.engine = engine;
 	ctx.virname = &virname;
diff --git a/unit_tests/check_str.c b/unit_tests/check_str.c
index 60ed2ae..10ef5ac 100644
--- a/unit_tests/check_str.c
+++ b/unit_tests/check_str.c
@@ -167,7 +167,7 @@ END_TEST
 #ifdef CHECK_HAVE_LOOPS
 static struct base64lines {
     const char *line;
-    const unsigned char *decoded;
+    const char *decoded;
     unsigned int   len;
 } base64tests[] = {
     {"", "", 0},
diff --git a/unit_tests/input/api_extract_7.cbc b/unit_tests/input/api_extract_7.cbc
new file mode 100644
index 0000000..5b1506e
--- /dev/null
+++ b/unit_tests/input/api_extract_7.cbc
@@ -0,0 +1,40 @@
+ClamBCafhaof`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``beaaap`clamcoincidencejb:224
+
+Teddaaahdabahdacahdadahdaeahdafahdagahdaab`beblddaab`debndaaaaaaabb`bb`baabb`db`daacb`bbadb`baacb`bb`bb`b
+Ebgdaebfabae|alefhgdgbgafcfdgoenfefgg``bgdbae|amifnf`gegdgoecgggifdgcfhf``abbce|aebgefafdf``adbde|aecgefefkf``acbce|afggbgifdgef``
+G`aa`@`
+A`b`bLbicb`bab`b`bldabcd`bldabcd`bndabdd`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`d`b`d`aa`b`d`aa`b`b`aa`b`b`Fbbfbea
+Bbcdacdbbmdab at dbcdaedbbmdad@dbddagdbbodaf at daaahlbb`baioaahGd`c`b`adGa`b`c`ddb`b`fbaiacb`b`bb at daaTbaaa
+Bb`bajbbaaajaaakiab`bajAcdb`b`bbDm``od`Taaakabbda
+Bb`balababfaajb`bamabbacacAddaaaneab`bamAddb`b`bbDamjkd`Taaanacbda
+Bb`baoababgdAadaab`aeab`bao at db`b`bbDbmjkd`Taab`aadbda
+Bb`bbaaabbad at dAbdaabbaeab`bbaaAddb`b`bbDcmjkd`Taabbaaebda
+Bb`bbcaabbad at d@daabdaeab`bbca at db`b`bbDdmjkd`Taabdaafbda
+Bb`b`fbHjejejejedaeb`bbeaabbabaeAddaabfaeab`bbeaAddb`b`bbDemjkd`Taabfaagbda
+Bb`bbgagbaeb`bbhaobbgaaabialbb`bbjaoabiabhabgaaabkaeab`bbjaGa`b`c`ddb`b`bbDfmjkd`Taabkaahbda
+Bb`bblaababgd at daabmaeab`bbla at db`b`bbDgmjkd`Taabmaaibda
+Bb`bbnaabbad at d@daaboaeab`bbna at db`b`bbDhmjkd`Taaboaajbda
+Bb`bb`babbabaeAddaababeab`bb`bAddb`b`bbDimjkd`Taababakbda
+Bb`bbbbgbaeb`bbcbobbbbaabdblbb`bbeboabdbbcbbbbb`b`fbbebaeaabfbeab`bbebHadbdcddddb`b`bbE`amjkd`Taabfbalbda
+Bb`bbgbabbacacAddaabhbeab`bbgbAddb`b`bbEaamjkd`Taabhbambda
+Bb`bbibababgdAadaabjbeab`bbib at db`b`bbEbamjkd`Taabjbanbda
+Bb`bbkbabbad at dAbdaablbeab`bbkbAhdb`b`bbEcamjkd`Taablbaobda
+Bb`bbmbabbad at d@daabnbeab`bbmb at db`b`bbEdamjkd`Taabnbb`abda
+Bb`bbobabbabagAhdaab`ceab`bbobAhdb`b`bbEeamjkd`Taab`cbaabda
+Bb`dbacgbagb`dbbc`cbacaabcclbb`dbdcoabccbbcbacb`d`fbbdcagaabeceab`dbdcOa`b`c`d`a`b`c`dhb`b`bbEfamjkd`Taabecbbabda
+Bb`bbfcababgd at daabgceab`bbfc at db`b`bbEgamjkd`Taabgcbcabda
+Bb`baaa`ajAadb`b`bbaaaaTbaaa
+Bb`bbhcbb`bhcTcab`bbhcE
+Sobjb`bdgefcgdg`bffiflfef`befhgdgbgafcfdg`bad`eid`bjbobSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfibSkgSegnfcgifgfnfefdf`bcfhfafbg`bbfegffkedcmekcSobjb`bffifhgmfefjccfofmf`giflfefbg`bafcgcgegmfefcg`blded`bhfefbgef`bmc`bkgaclb`bbclb`bcclb`bdcmgkc`bjbob
+egifnfdgccbcoedg`bhglb`bifkcSegifnfdgfcdcoedg`bigkcSjbhbegifnfdgccbcoedgjbibbfegff`bmc`blfefccbcoedgofoehfofcgdghb`chg`cdc`ccc`cbc`cacibkcSffofbg`bhbifmc`ckciflccckcifkbkbib`bkg
+efhgdgbgafcfdgoenfefgghbifibkcSifff`bhbggbgifdgefhbbfegfflb`bcgifjgefofffhbbfegffibib`babmc`bcgifjgefofffhbbfegffibibSbgefdgegbgnf`b`chgbfafdfackcSobjb`bcgggifdgcfhf`bifnf`gegdg`bdgof`befhgdgbgafcfdgefdf`bffiflfef`bjbob
+ifff`bhbifnf`gegdgoecgggifdgcfhfhbacib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfbckcSifff`bhbcgefefkfhb`clb`bceededkdoeedndddib`babmc`bdcibSbgefdgegbgnf`b`chgbfafdfcckc
+ifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdckcShg`bmc`b`chgecafecafecafecafkcSifff`bhbbgefafdfhbfbhglb`bcgifjgefofffhbhgibib`babmc`bcgifjgefofffhbhgibib
+bgefdgegbgnf`b`chgbfafdfeckcSifff`bhbcflfifoebgefafdfifnfdgccbchbfbhgib`babmc`b`chg`cdc`ccc`cbc`cacibSbgefdgegbgnf`b`chgbfafdffckcSobjb`bcgggifdgcfhf`bbfafcfkf`bdgof`bnfofbgmfaflf`bffiflfef`bjbob
+ifff`bhbifnf`gegdgoecgggifdgcfhfhb`cib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfgckcSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfhckc
+ifff`bhbbgefafdfhbfbhglb`bcgifjgefofffhbhgibib`babmc`bcgifjgefofffhbhgibibSbgefdgegbgnf`b`chgbfafdfickcShg`bmc`blfefccbcoedgofoehfofcgdghbhgibkcSifff`bhbhg`babmc`b`chgdcdcdcccdcbcdcacib
+bgefdgegbgnf`b`chgbfafdfac`ckcSobjb`bggbgifdgef`bdgof`befhgdgbgafcfdgefdf`bffiflfef`bafgfafifnf`bjbobSifff`bhbggbgifdgefhbbfegfflb`bcgifjgefofffhbbfegffibib`babmc`bcgifjgefofffhbbfegffibib
+bgefdgegbgnf`b`chgbfafdfacackcSobjb`bcgggifdgcfhf`bifnf`gegdg`bdgof`befhgdgbgafcfdgefdf`bffiflfef`bjbobSifff`bhbifnf`gegdgoecgggifdgcfhfhbacib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfacbckc
+ifff`bhbcgefefkfhb`clb`bceededkdoeedndddib`babmc`bhcibSbgefdgegbgnf`b`chgbfafdfaccckcSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfacdckc
+ifff`bhbbgefafdfhbfbiglb`bcgifjgefofffhbigibib`babmc`bcgifjgefofffhbigibibSbgefdgegbgnf`b`chgbfafdfaceckcSig`bmc`blfeffcdcoedgofoehfofcgdghbigibkcSifff`bhbig`babmc`b`chg`cdc`ccc`cbc`cac`cdc`ccc`cbc`caceeldib
+bgefdgegbgnf`b`chgbfafdfacfckcSifff`bhbifnf`gegdgoecgggifdgcfhfhb`cib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfacgckcSmgSbgefdgegbgnf`b`chgff`c`cdfkcSmgS
diff --git a/unit_tests/input/api_files_7.cbc b/unit_tests/input/api_files_7.cbc
new file mode 100644
index 0000000..977c605
--- /dev/null
+++ b/unit_tests/input/api_files_7.cbc
@@ -0,0 +1,92 @@
+ClamBCafhaof`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``bfbaap`clamcoincidencejb:625
+
+Teddaaahdabahdacahdadahdaeahdafahdagahebheebefebeeebidebfdebhdebgdebcdebaddbjbahdaab`aebfedaab`bdaab`debieaaaaaaaa`aabb`bb`baabb`ab`aaabb`db`daacb`bbadb`baacb`bb`bb`baadb`bbadb`bb`baadb`bbadbadb`baae`badahb`db`bdbkbah
+Ebadaibjbbme|bbabfigdgefcfofdfefoebgdgoeefbgbgofbg``agbme|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``baabme|alffiflfefoebfigdgefafdg``afb`f|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``bgcb`f|beadfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflf``b`ab`f|ajffiflfefoeffifnfdf``abb`f|aebgefafdf``adbaf|aecgefefkf``badbbf|b`affiflfefoeffifnfdfoelfifmfifdg``
+Gdd``hb`a`@`befBadBbdBcdBddBedBfdBgdBhdBidBjdBkdBldBmdBndBodB`eBaeBbeBceBdeBeeBfeBgeBheBieBjeBkeBleBmeBneBoeB`fBafBbfBcfBdfBefBffBgfBhfBifBjf@`beeBbdBcdBddBedBfdBgdBhdBidBjdBkdBldBmdBndBodB`eBaeBbeBceBdeBeeBfeBgeBheBieBjeBkeBleBmeBneBoeB`fBafBbfBcfBdfBefBffBgfBhfBifBjf@`bidBcfB`cBjcB`b@`bfdAj@`bhdBeeBfeBge@`bgdBeeBee@`bgdBaeBbe@`bcd at Dd``h`bad at Aa`bad at Ab`bad at Ac`bad at Ad`bad at Ae`bad at Af`bad at Ag`
+A`b`bLbgjb`bab`bab`a`b`dab`bab`dab`bab`bab`b`beeaahabfeabbd`bheabcd`bieabdd`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`b`b`aa`bad`b`b`aa`bad`b`b`aa`b`b`b`d`b`d`b`d`b`d`b`b`bad`aa`aa`aa`ah`b`b`b`b`b`d`aa`aa`bad`ah`aa`bad`ah`aa`b`d`b`b`b`d`b`d`b`b`bad`b`d`b`b`aa`b`d`aa`aa`aa`ah`b`b`aa`bad`b`b`aa`bad`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`a`aa`b`a`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`b`d`b`b`b`b`b`b`b`d`b`d`b`b`b`b`b`b`b`d`b`d`aa`b`d`aa`b`b`aa`b`b`aa`ah`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`b`b`b`b`Fceaabic
+Bbbdaldbbgeak at dbcdandbbldam@dbddb`adbbjeao at db`bbaaabbad at dAadaabbaeab`bbaa at db`b`bbDamjkdaaTaabbaaabgc
+Bb`bbcaabbad at d@daabdaeab`bbca at db`b`bbDbmjkdaaTaabdaabbgc
+Bb`bbeaabbad at dAbdb`bbfagbAh`aabgaeab`bbeabfab`b`bbDcmjkdaaTaabgaacbgc
+Bb`bbhagbAh`aabiaeab`bbhaBjbdb`b`bb at dahb`b`bbDdmjkdaaTaabiaadbgc
+Bb`bbjabbahbjaaabkanab`bbjaBjbdTaabkaaeah
+Bb`bblaabbadbja at daabmaeab`bblabjab`b`bbDemjkdaaTaabmaafbgc
+Bb`bbnaabbad at dAadaaboaeab`bbnabjab`b`bbDfmjkdaaTaaboaagbgc
+Bb`baha`bjaAadb`b`bbahahTbaad
+Bb`bb`babbad at d@daababeab`bb`b at db`b`bb at dagb`b`bbDgmjkdaaTaababaibgc
+Bb`bbbbbbagbbbb`bbcba`bbbAadaabdbnab`bbcbBjbdTaabdbajal
+Bb`bbebabbadAadAadaabfbeab`bbebbcbb`b`bbDhmjkdaaTaabfbakbgc
+Bb`baga`bbbAadb`b`bbagagTbaai
+Bb`bbgbabbadAad at daabhbeab`bbgbAadb`b`bbDimjkdaaTaabhbambgc
+Bb`bbibabbadBibdAadaabjbeab`bbibBjbdb`b`bb at dafb`b`bbE`amjkdaaTaabjbanbgc
+Bb`bbkbbbafbkbaablbnab`bbkbBjbdTaablbaobaa
+Bb`bbmbb`@dbkbb`bbnbb`Bjbdbkbb`bbobabbadbmbAbdaab`ceab`bbobbnbb`b`bbEaamjkdaaTaab`cb`abgc
+Bb`bafa`bkbAadb`b`bbafafTbaan
+Bbadbacdbbndai at d``hbbacBjeaBjbhb`bbbcabbad at d@daabcceab`bbbc at db`b`bbEbamjkdaaTaabccbbabgc
+Bbadbdcdbbndai at db`bbecabbabbdcBjbdaabfceab`bbecBjbdb`d`bb at haeb`b`bb at dadb`b`bbEcamjkdaaTaabfcbcabgc
+Bb`bbgcbbadbgcb`dbhcbbaebhcb`dbica`bhcAahb`dbjch`bhcB`bhb`dbkcj`bjcB`bhb`bblcn`bkcbadbmcdbbndaiblcaabnciab`dbicBkbhaabociab`dbhcBjbhaab`dk`bncbocb`b`bbDe`gcd`Taab`dbdabhc
+Bahbadgbbmcb`bbbd`abadb`bbcda`bbdbgcb`dbdda`bhcAahaabedeab`dbddBjbhb`d`bbbddaeb`b`bbbcdadTaabedbeabca
+Baabfdeab`bbcdCg`ndb`b`bbEdamjkdaaTaabfdbfabgc
+Bbadbgddbbndai at dahbhdgbbgdaabideaahbhdBadab`b`bbEeamjkdaaTaabidbgabgc
+BbadbjddbbndaiBibdahbkdgbbjdaabldeaahbkdBjfab`d`bb at hacb`b`bbEeamjkdaaTaabldbhabgc
+Bb`dbmdbbacbmdb`bbndn`bmdb`dbodh`bmdB`bhb`db`ej`bodB`bhb`bbaen`b`ebadbbedbbndaibaeb`dbcea`bmdBadhb`bbden`bceaabeeiab`bbndBjbdTaabeebiabla
+Bb`dbfea`bmdAahaabgeiab`dbfeBkbhaabheiab`dbmdBjbhaabiek`bgebheb`b`bbDe`mcd`Taabiebjabhc
+Bahbjegbbbeb`bbke`abjeaableeab`bbkebdeb`b`bbEfamjkdaaTaablebkabgc
+Bb`daca`bmdAahb`d`bbacacTbabha
+Bbadbmedbbndai at db`bbnekbbmeAi`Bjbdaaboeeab`bbne at db`b`bbEgamjkdaaTaaboebmabgc
+Bbadb`fdbbndai at db`bbafkbb`fAj`Bibdaabbfeab`bbaf at db`b`bbEhamjkdaaTaabbfbgcbna
+Bb`bbcfabbadBaad at daabdfeab`bbcfBaadb`b`bbEiamjkdaaTaabdfboabgc
+Bb`bbefabbadBkbd at daabffeab`bbefHoooooooodb`b`bbE`bmjkdaaTaabffb`bbgc
+Bb`bbgfabbad at dAadaabhfeab`bbgfBaadb`b`bbEabmjkdaaTaabhfbabbgc
+Bb`bbifabbad at d@daabjfeab`bbif at db`b`bbEbbmjkdaaTaabjfbbbbgc
+Bb`bbkfabbabalAbdaablfeab`bbkfAbdb`b`bbEcbmjkdaaTaablfbcbbgc
+Bb`abmfgbalaabnflbb`a`bbbmfabTaabnfbdbbeb
+Bb`aabnbbmfb`a`bbababTbabeb
+Bb`abofbbabbofb`a`fbbofalaab`geab`abofDadbdbb`b`bbEdbmjkdaaTaab`gbfbbgc
+Bb`bbagabbabanAddaabbgeab`bbagAddb`b`bbEebmjkdaaTaabbgbgbbgc
+Bb`bbcggbanb`bbdgobbcgaabeglbb`bbfgoabegbdgbcgb`b`fbbfganaabggeab`bbfgHcdddedfddb`b`bbEfbmjkdaaTaabggbhbbgc
+Bb`bbhgabbabb`aAhdaabigeab`bbhgAhdb`b`bbEgbmjkdaaTaabigbibbgc
+Bb`bbjgabbafAk`@db`dbkggbb`ab`bblgn`bkgb`bbmgabaagblgb`bbngabbbgcAl`Aadb`dboggbb`ab`db`hi`bogB`bhb`bbahn`b`hb`bbbhabaagbahb`bbchabbbgcAl`Aadb`dbdhgbb`ab`dbeh`cbdhaabfhlbb`dbghoabfhbehbdhb`d`fbbghb`aaabhheab`dbghPgdhdidjdkdldmdndhb`b`bbEhbmjkdaaTaabhhbjbbgc
+Bb`bbihabbadAcd at daabjheab`bbihAcdb`b`bbEibmjkdaaTaabjhbkbbgc
+Bb`bbkhabbabajAadaablheab`bbkhAadb`b`bbE`cmjkdaaTaablhblbbgc
+BahbmhbbajbmhaabnheaahbmhBddab`b`bbEacmjkdaaTaabnhbmbbgc
+Bb`bbohabbb`aAm`Acdaab`ieab`bbohBdadb`b`bbEbcmjkdaaTaab`ibnbbgc
+Bb`bbaiabbad at d@daabbieab`bbai at db`b`bbEccmjkdaaTaabbibobbgc
+Bb`bbciabbb`aAn`Abdaabdieab`bbciHoooooooodb`b`bbEdcmjkdaaTaabdib`cbgc
+Bb`bbeiababaa at daabfieab`bbeiBaddb`b`bbEecmjkdaaTaabfibacbgc
+Bb`bbgiababaaAadaabhieab`bbgiBbddb`b`bbEecmjkdaaTaabhibbcbgc
+Bb`bbiiabbadAcd at daabjieab`bbiiAcdb`b`bbEfcmjkdaaTaabjibccbgc
+Bb`bbkiabcbadAo`AbdBaadaablieab`bbkiHoooooooodb`b`bbEgcmjkdaaTaablibdcbgc
+Bb`bbmiabcbadAo`AbdBbadaabnieab`bbmiB`adb`b`bbEhcmjkdaaTaabnibecbgc
+Bb`bboiabbad at d@daab`jeab`bboi at db`b`bbEicmjkdaaTaab`jbfcbgc
+Bb`bbajabcbadAm`AcdBdadaabbjeab`bbajHoooooooodb`bbcjoabbjDm``odE`dmjkdTcab`bbcj
+Bb`bbdjbbaabdjTcab`bbdj
+Bb`bbejbb`bejb`bbfjababjbbej``mbTmbE
+Sobjb`bdgefcgdg`bbfafcgifcf`bffiflfef`bof`gefbgafdgifofnf`bad`eidcg`bjbobScgdgafdgifcf`bcfofnfcgdg`bcfhfafbg`bffiflfefkeme`bmc`bbbadbdcdddedfdgdhdidjdkdldmdndod`eaebecedeeefegeheiejekelelemeneoe`fafbfcfdfefffgfhfifjfbbkc
+cgdgafdgifcf`bcfofnfcgdg`bcfhfafbg`bnfofdgffiflfefkeme`bmc`bbbbdcdddedfdgdhdidjdkdldmdndod`eaebecedeeefegeheiejekelelemeneoe`fafbfcfdfefffgfhfifjfbbkcSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfib
+kgSegnfcgifgfnfefdf`bcfhfafbg`bbfegffkedcbcmekcSifnfdghcoedg`bdfkcSifnfdgacfcoedg`bafkcSifnfdgccbcoedg`bbfkcSifnfdgfcdcoedg`bcfkcSifnfdgacfcoedg`bafbgkeccmekcSifnfdgccbcoedg`bbfbgkeccmekc
+ifnfdgfcdcoedg`bcfbgkeccmekcSifnfdg`biflb`bcgegmf`bmc`b`ckcSobjb`bdgefcgdg`bcgefefkf`bjbobSifff`bhbcgefefkfhb`clb`bceededkdoecdeebeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfackc
+ifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfbckcSifff`bhbcgefefkfhb`clb`bceededkdoeedndddib`babmc`boeoecflfafmfbfcfoeffiflfefcgifjgefke`cmeib
+bgefdgegbgnf`b`chgbfafdfcckcSobjb`bifnf`gegdg`bdgefcgdgffiflfef`bffofbg`bdghfifcg`bbfigdgefcfofdfef`bmfegcgdg`bhfaffgef`bdcbc`bbfigdgefcg`bifnf`bcgifjgef`bjbobSifff`bhboeoecflfafmfbfcfoeffiflfefcgifjgefke`cme`babmc`bdcbcib
+bgefdgegbgnf`b`chgbfafdfdckcSobjb`bdgefcgdg`bcgefefkfcg`bjbobSffofbg`bhbifmc`ckciflcdcbckcifkbkbib`bkgSifff`bhbcgefefkfhbiflb`bceededkdoeceeddeib`babmc`bifibSbgefdgegbgnf`b`chgbfafdfeckc
+ifff`bhbcgefefkfhb`clb`bceededkdoecdeebeib`babmc`bifibSbgefdgegbgnf`b`chgbfafdffckcSmgSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfgckc
+ffofbg`bhbifmcackciflcdcbckcifkbkbib`bkgSifff`bhbcgefefkfhbaclb`bceededkdoecdeebeib`babmc`bifibSbgefdgegbgnf`b`chgbfafdfhckcSmgSifff`bhbcgefefkfhbaclb`bceededkdoeceeddeib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfickcSifff`bhbcgefefkfhbdcaclb`bceededkdoecdeebeib`babmc`bdcbcibSbgefdgegbgnf`b`chgbfafdfac`ckcSffofbg`bhbifmc`ckciflcdcbckcifkbkbib`bkgSifff`bhbcgefefkfhbmbiflb`bceededkdoeedndddib`babmc`bdcbcmbifib
+bgefdgegbgnf`b`chgbfafdfacackcSmgSSmfefmfcgefdghbbfegfflb`b`chgecaflb`bcgifjgefofffhbbfegffibibkcSobjb`bdgefcgdg`bbgefafdf`bkb`bcgefefkf`bjbobSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfacbckcSifff`bhbbgefafdfhbbfegfflb`bdcbcib`babmc`bcgifjgefofffhbbfegffibibSbgefdgegbgnf`b`chgbfafdfaccckcScgegmf`bmc`b`ckcSffofbg`bhbifmc`ckciflcdcbckcifkbkbib
+cgegmf`bkbmc`bbfegffkeifmekcSifff`bhbcgegmf`babmc`bccecicacibSbgefdgegbgnf`b`chgbfafdfacdckcSifff`bhbbfegffke`cme`babmc`bgbadgb`blglg`bbfegffkedcacme`babmc`bgbjfgbib
+bgefdgegbgnf`b`chgbfafdfaceckcSffofbg`bhbifmc`ckciflccgifjgefofffhbbfegffibkcifkbkbibSifff`bhbbfegffkeifme`babmc`bgbadgbkbifibSbgefdgegbgnf`b`chgbfafdfacfckcSSifff`bhbmfefmfcfmf`ghbbfegfflb`bffiflfeflb`bcgifjgefofffhbffiflfefibmbacibib
+bgefdgegbgnf`b`chgbfafdfacgckcSifff`bhbabmfefmfcfmf`ghbbfegfflb`bnfofdgffiflfeflb`bcgifjgefofffhbnfofdgffiflfefibmbacibibSbgefdgegbgnf`b`chgbfafdfachckcSSobjb`bbfafdf`bcgefefkf`bmfegcgdgnfgbdg`bmfofdfifffig`b`gofcgifdgifofnf`bjbob
+ifff`bhbcgefefkfhbacgclb`bceededkdoeceeddeib`babmc`bacgcibSbgefdgegbgnf`b`chgbfafdfacickcSifff`bhbcgefefkfhbdccclb`bceededkdoeceeddeib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfbc`ckc
+ifff`bhbcgefefkfhb`clb`bceededkdoecdeebeib`babmc`bacgcibSbgefdgegbgnf`b`chgbfafdfbcackcSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfbcbckc
+objb`bbgefafdf`blfifdgdglfefmbefnfdfifafnf`bdfafdgaf`bffbgofmf`bffiflfef`bjbobSifff`bhbbgefafdfhbfbaflb`bcgifjgefofffhbafibib`babmc`bcgifjgefofffhbafibibSbgefdgegbgnf`b`chgbfafdfbccckc
+af`bmc`blfefacfcoedgofoehfofcgdghbafibkcSifff`bhbaf`babmc`b`chgdcbcdcacibSbgefdgegbgnf`b`chgbfafdfbcdckcSifff`bhbbgefafdfhbfbbflb`bcgifjgefofffhbbfibib`babmc`bcgifjgefofffhbbfibib
+bgefdgegbgnf`b`chgbfafdfbceckcSbf`bmc`blfefccbcoedgofoehfofcgdghbbfibkcSifff`bhbbf`babmc`b`chgdcfcdcecdcdcdcccibSbgefdgegbgnf`b`chgbfafdfbcfckcSifff`bhbbgefafdfhbfbcflb`bcgifjgefofffhbcfibib`babmc`bcgifjgefofffhbcfibib
+bgefdgegbgnf`b`chgbfafdfbcgckcSdfefbfeggfhbbbcf`cjc`bbbibkcSdfefbfeggfhbcfibkcSdfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblenfbblbacibkcSdfefbfeggfhbcfncncccbcibkc
+dfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblenfbblbacibkcScf`bmc`blfeffcdcoedgofoehfofcgdghbcfibkcSifff`bhbcf`babmc`b`chgdcefdcdfdccfdcbfdcafdcicdchcdcgceeldibSbgefdgegbgnf`b`chgbfafdfbchckc
+Sifff`bhbcgefefkfhbcclb`bceededkdoeceeddeib`babmc`bccibSbgefdgegbgnf`b`chgbfafdfbcickcSifff`bhbbgefafdfhbfbdflb`bcgifjgefofffhbdfibib`babmc`bcgifjgefofffhbdfibibSbgefdgegbgnf`b`chgbfafdfcc`ckc
+ifff`bhbdf`babmc`bgbddgbibSbgefdgegbgnf`b`chgbfafdfccackcSifff`bhbffiflfefoeffifnfdfhbbbeefegebblb`bccib`babmc`bbc`cibSbgefdgegbgnf`b`chgbfafdfccbckcSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfcccckcSifff`bhbffiflfefoeffifnfdfhbbbeeeebblb`bbcib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfccdckcSifff`bhbffiflfefoebfigdgefafdghb`cib`babmc`bgbadgb`blglg`bffiflfefoebfigdgefafdghbacib`babmc`bgbbdgbib
+bgefdgegbgnf`b`chgbfafdfcceckcSifff`bhbcgefefkfhbcclb`bceededkdoeceeddeib`babmc`bccibSbgefdgegbgnf`b`chgbfafdfccfckcSifff`bhbffiflfefoeffifnfdfoelfifmfifdghbbbaebebblb`bbclb`bacgcib`babmc`bmbacib
+bgefdgegbgnf`b`chgbfafdfccgckcSifff`bhbffiflfefoeffifnfdfoelfifmfifdghbbbaebebblb`bbclb`bachcib`babmc`bacfcibSbgefdgegbgnf`b`chgbfafdfcchckcSifff`bhbcgefefkfhb`clb`bceededkdoeceeddeib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfccickcSifff`bhbffiflfefoeffifnfdfoelfifmfifdghbbbeefegebblb`bcclb`bbc`cib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfdc`ckcSbgefdgegbgnf`b`chgff`c`cdfkc
+mgSS
diff --git a/unit_tests/input/apicalls2_7.cbc b/unit_tests/input/apicalls2_7.cbc
new file mode 100644
index 0000000..3a84438
--- /dev/null
+++ b/unit_tests/input/apicalls2_7.cbc
@@ -0,0 +1,27 @@
+ClamBCafhokc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``anafp`clamcoincidencejb:66
+
+Teddaaahdabahdacahdadahdaeahdafahdagahaabb`bb`baacb`bb`bb`b
+Ebcaabbcabld|afdgefcgdgbc``aabmd|afdgefcgdgac``
+G`aa`@`
+A`b`bLaeb`b`aa`b`b`aa`b`b`Fahac
+Bb`b`abbaaHonnkm``odHm``oonnkdaaaaeab`b`HhgfedcbadTaaaaaaab
+Bb`babababcaDm``odaaaceab`babDo``mdb`badoaacDm``odDmjnmdTcab`bad
+BTcab`bDmjnmdE
+Aab`bLabah`aa`b`b`Facaa
+Baaaaeaah`Bgaab`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`a`aa`b`b`Facaa
+Baaaaeab`a`Dhbgabb`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`b`aa`b`b`Facaa
+Baaaaeab`b`Fichbgadb`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`d`aa`b`b`Facaa
+Baaaaeab`d`Ncgbfae`dichbgahb`baboaaaDm``odDmjnmdTcab`babE
+Abb`bLacah`b`a`aa`aa`b`b`Fafac
+Baaabeaah`BhbaTaaabaaab
+Baaaceab`aaaDdcbabb`badoaacDm``odDmjnmdTcab`bad
+BTcab`bDmjnmdE
+Sifnfdg`befnfdgbgig`gofifnfdghbibSkgScfhfafbg`bjbhgkcSifff`bhbdgefcgdgachb`chgff`c`cdfbfefeffflb`b`chgbfefefffff`c`cdfib`babmc`b`chgacbcccdcecfcgchcibSbgefdgegbgnf`b`chgdfefafdfkc
+ifff`bhbdgefcgdgbchb`chgff`c`cdfib`babmc`b`chgdf`c`cffibSbgefdgegbgnf`b`chgdfefafdfkcShg`bmc`bmfaflflfofcfhbacibkcSifff`bhbabhgibSbgefdgegbgnf`b`chgdfefafdfkcSbgefdgegbgnf`b`chgff`c`cdfkc
+mgSSifnfdg`bffofofachbegifnfdghcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofbchbegifnfdgacfcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkc
+mgSSifnfdg`bffofofcchbegifnfdgccbcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchcccic`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofdchbegifnfdgfcdcoedg`bafib
+kgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchcccicdc`cecacfcbcgccc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofechbegifnfdghcoedg`baflb`begifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`bhbaf`bmcmc`b`chgbchc`bfbfb`bbf`bmcmc`b`chgacbcccdcib`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSS
diff --git a/unit_tests/input/apicalls_7.cbc b/unit_tests/input/apicalls_7.cbc
new file mode 100644
index 0000000..bf8c788
--- /dev/null
+++ b/unit_tests/input/apicalls_7.cbc
@@ -0,0 +1,24 @@
+ClamBCafhokc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``amafp`clamcoincidencejb:82
+
+Teddaaahdabahdacahdadahdaeahdafahdagahaacb`bb`bb`b
+Eaaaaaabld|afdgefcgdgac``
+G`aa`@`
+A`b`bLacb`b`aa`b`b`Fadaa
+Bb`b`abbaaHonnkm``odHm``oonnkdaaaaeab`b`Hhgfedcbadb`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabah`aa`b`b`Facaa
+Baaaaeaah`Bgaab`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`a`aa`b`b`Facaa
+Baaaaeab`a`Dhbgabb`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`b`aa`b`b`Facaa
+Baaaaeab`b`Fichbgadb`baboaaaDm``odDmjnmdTcab`babE
+Aab`bLabb`d`aa`b`b`Facaa
+Baaaaeab`d`Ncgbfae`dichbgahb`baboaaaDm``odDmjnmdTcab`babE
+Abb`bLacah`b`a`aa`aa`b`b`Fafac
+Baaabeaah`BhbaTaaabaaab
+Baaaceab`aaaDdcbabb`badoaacDm``odDmjnmdTcab`bad
+BTcab`bDmjnmdE
+Sifnfdg`befnfdgbgig`gofifnfdghbibSkgSbgefdgegbgnf`bdgefcgdgachb`chgff`c`cdfbfefeffflb`b`chgbfefefffff`c`cdfib`bmcmc`b`chgacbcccdcecfcgchc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkc
+mgSSifnfdg`bffofofachbegifnfdghcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofbchbegifnfdgacfcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkc
+mgSSifnfdg`bffofofcchbegifnfdgccbcoedg`bafibSkgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchcccic`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofdchbegifnfdgfcdcoedg`bafib
+kgSbgefdgegbgnf`baf`bmcmc`b`chgacgcbchcccicdc`cecacfcbcgccc`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSifnfdg`bffofofechbegifnfdghcoedg`baflb`begifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`bhbaf`bmcmc`b`chgbchc`bfbfb`bbf`bmcmc`b`chgacbcccdcib`boc`b`chgff`c`cdf`bjc`b`chgdfefafdfkcSmgSSS
diff --git a/unit_tests/input/apitestfile b/unit_tests/input/apitestfile
new file mode 100644
index 0000000..c4273e3
--- /dev/null
+++ b/unit_tests/input/apitestfile
@@ -0,0 +1 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
\ No newline at end of file
diff --git a/unit_tests/input/arith_7.cbc b/unit_tests/input/arith_7.cbc
new file mode 100644
index 0000000..d3d8b17
--- /dev/null
+++ b/unit_tests/input/arith_7.cbc
@@ -0,0 +1,519 @@
+ClamBCafh`lc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``beabfep`clamcoincidencejb:445
+
+Teddaaahdabahdacahdadahdaeahdafahdagahebdeebfdebadaabb`bb`baabb`db`daacb`bbadb`baacb`bb`bb`baadb`bb`bb`bb`bdbkaah
+Ebgcahagbod|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``bgcbae|beadfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflf``bfcbae|bfadfefbfeggfoe`gbgifnfdgoecgdgbgoecgdgafbgdg``bnbbbe|afiflfofgfbc``bbcbce|aeifcfofcg``b`cbce|aeifefhg`g``bobbce|aeif`gofgg``bacbce|aeifcgifnf``
+G`ae`@`bdeBffBafBifBlfBefBdfB`bBafBbgBifBdgBhfB`bBdgBefBcgBdgB`bBafBdgB`bBlfBifBnfBefB`b@`bfdAj@`bad at Aa`bad at Ab`
+A`b`bLbebb`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`Fbfbaa
+Bb`b``b`abb`baa`b`b`ab`bab`b`aeb`bac`b`agb`bad`b`aib`bae`b`bbab`baf`b`alb`bag`b`akb`bah`b`aob`bai`b`ahb`baj`b`adb`bak`b`acb`bal`b`ajb`bam`b`bcab`ban`b`anb`bao`b`bdab`bb`a`b`baab`bbaa`b`afb`bbba`b`amb`bbcaa`aa`b`bbdaa`bcaabb`bbeaa`bdaacb`bbfaa`beaadb`bbgaa`bfaaeb`bbhaa`bgaafb`bbiaa`bhaagb`bbjaa`biaahb`bbkaa`bjaaib`bblaa`bkaajb`bbmaa`blaakb`bbnaa`bmaalb`bboaa`bnaamb`bb`ba`boaanb`bbaba`b`baob`bbbba`babb`ab`bbcba`bbbbaab`bbdba`bcbbbaTcab`bbdbE
+A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab
+Bah``bbbcbAaaAaaaaaaeaah`AbaTaaaaabaa
+Bb`bab`bbblb at dBlgdTcab`bab
+Bahac`bbbcbAaaBooaaaadeaahac at aTaaadadac
+Bb`bae`bbblb at dBngdTcab`bae
+Bahaf`bbbcbBooaBooaaaageaahafBnoaTaaagafae
+Bb`bah`bbblb at dB`hdTcab`bah
+Bahai`bbbcbBooaAaaaaajeaahai at aTaaajahag
+Bb`bak`bbblb at dBbhdTcab`bak
+Bb`aal`bbb`bAabAabaaameab`aalAbbTaaamajai
+Bb`ban`bbblb at dBehdTcab`ban
+Bb`aao`bbb`bAabDoooobaab`aeab`aao at bTaab`aalak
+Bb`bbaa`bbblb at dBghdTcab`bbaa
+Bb`abba`bbb`bDoooobDoooobaabcaeab`abbaDnooobTaabcaanam
+Bb`bbda`bbblb at dBihdTcab`bbda
+Bb`abea`bbb`bDoooobAabaabfaeab`abea at bTaabfab`aao
+Bb`bbga`bbblb at dBkhdTcab`bbga
+Bb`bbha`bbbabAadAadaabiaeab`bbhaAbdTaabiabbabaa
+Bb`bbja`bbblb at dBnhdTcab`bbja
+Bb`bbka`bbbabAadHoooooooodaablaeab`bbka at dTaablabdabca
+Bb`bbma`bbblb at dB`idTcab`bbma
+Bb`bbna`bbbabHoooooooodHoooooooodaaboaeab`bbnaHnooooooodTaaboabfabea
+Bb`bb`b`bbblb at dBbidTcab`bb`b
+Bb`bbab`bbbabHoooooooodAadaabbbeab`bbab at dTaabbbbhabga
+Bb`bbcb`bbblb at dBdidTcab`bbcb
+Bb`dbdb`bbbbbAahAahaabebeab`dbdbAbhTaabebbjabia
+Bb`bbfb`bbblb at dBgidTcab`bbfb
+Bb`dbgb`bbbbbAahPoooooooooooooooohaabhbeab`dbgb at hTaabhbblabka
+Bb`bbib`bbblb at dBiidTcab`bbib
+Bb`dbjb`bbbbbPoooooooooooooooohPoooooooooooooooohaabkbeab`dbjbPnooooooooooooooohTaabkbbnabma
+Bb`bblb`bbblb at dBkidTcab`bblb
+Bb`dbmb`bbbbbPoooooooooooooooohAahaabnbeab`dbmb at hTaabnbb`bboa
+Bb`bbob`bbblb at dBmidTcab`bbob
+BTcab`bAadE
+A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai
+Bah``bbbgbBjeaAoaaaaaeaah`AjaTaaaaabaa
+Bb`bab`bbblb at dCenadTcab`bab
+Bb`aac`bbbdbDlkjebD```obaaadeab`aacD```ebTaaadadac
+Bb`bae`bbblb at dCgnadTcab`bae
+Bb`baf`bbbebHdcbalkjedG``````odaaageab`bafG``````jdTaaagafae
+Bb`bah`bbblb at dCinadTcab`bah
+Bb`dai`bbbfbPdcbahgfedcbalkjehG``````ohaaajeab`daiG``````fhTaaajahag
+Bb`bak`bbblb at dCknadTcab`bak
+BTcab`bE````ddE
+A`b`bLafah`aa`b`b`ah`aa`b`b`Fakae
+Bah``bbbkbBnoaAaaaaaaeaah`BooaTaaaaabaa
+Bb`bab`bbblb at dCkladTcab`bab
+Bahac`bbbkbBngaAaaaaadeaahacBocaTaaadadac
+Bb`bae`bbblb at dCmladTcab`bae
+BTcab`bE````adE
+A`b`bLalb`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbeaai
+Bb`b``babeaBjjdaaaaeab`b`H``````jjdTaaaaabaa
+Bb`bab`bbblb at dBccdTcab`bab
+Bb`bac`babeaDdcbadaaadeab`bacH````badcdTaaadadac
+Bb`bae`bbblb at dBecdTcab`bae
+Bb`daf`babfaBjjhaaageab`dafP``````````````jjhTaaagafae
+Bb`bah`bbblb at dBgcdTcab`bah
+Bb`dai`babfaPonmlkj`ihgfedcbahaaajeab`daiPbadcfehg`ikjmlonhTaaajahag
+Bb`bak`bbblb at dBicdTcab`bak
+BTcab`bAhdE
+A`b`bLaob`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`Fbjaak
+Bb`b``bdbfeHoooooooodAbd at dAddaaaaeab`b`CijbdTaaaaabaa
+Bb`bab`bbblb at dC`ibdTcab`bab
+Bb`bac`bdbfeHoooooooodHoooooooodAadHoooooooodaaadeab`bacCbbcdTaaadadac
+Bb`bae`bbblb at dCbibdTcab`bae
+Bb`baf`bdbfeHooooooood at dAcdHnooooooodaaageab`bafCcjbdTaaagafae
+Bb`bah`bbblb at dCdibdTcab`bah
+Bb`bai`bdbfeHooooooood at dAcd@daaajeab`baiCcnbdTaaajahag
+Bb`bak`bbblb at dCfibdTcab`bak
+Bb`bal`bdbfeHooooooood at d@dHoooooooodaaameab`balBkbdTaaamajai
+Bb`ban`bbblb at dChibdTcab`ban
+BTcab`bH```````ddE
+A`b`bLbicb`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`Fb`fbgb
+Bb`b`abbbnbAad at daaaaeab`b`HooooooogdTaaaaabaa
+Bb`bab`bbblb at dB`ddTcab`bab
+Bb`bacabbbnbAadAadaaadeab`bac at dTaaadadac
+Bb`bae`bbblb at dBbddTcab`bae
+Bb`bafabbbnbAbdAbdaaageab`baf at dTaaagafae
+Bb`bah`bbblb at dBdddTcab`bah
+Bb`baiabbbnbAbdAadaaajeab`baiG``````ddTaaajahag
+Bb`bak`bbblb at dBfddTcab`bak
+Bb`balabbbnbAadAbdaaameab`balH``````lodTaaamajai
+Bb`ban`bbblb at dBhddTcab`ban
+Bb`baoabbbnbAddAadaab`aeab`baoG``````hdTaab`aalak
+Bb`bbaa`bbblb at dBjddTcab`bbaa
+Bb`bbbaabbbnbAhdAadaabcaeab`bbbaG``````ldTaabcaanam
+Bb`bbda`bbblb at dBlddTcab`bbda
+Bb`bbeaabbbnbAcdAbdaabfaeab`bbeaGif``gebdTaabfab`aao
+Bb`bbga`bbblb at dBnddTcab`bbga
+Bb`bbhaabbbnbAedAbdaabiaeab`bbhaGehgjidedTaabiabbabaa
+Bb`bbja`bbblb at dB`edTcab`bbja
+Bb`bbkaabbbnbH```````hdAcdaablaeab`bbkaHgioohjegdTaablabdabca
+Bb`bbma`bbblb at dBbedTcab`bbma
+Bb`bbnaabcbob at dAddAadaaboaeab`bbna at dTaaboabfabea
+Bb`bb`b`bbblb at dBdedTcab`bb`b
+Bb`bbababcbobAadAadAadaabbbeab`bbabAadTaabbbbhabga
+Bb`bbcb`bbblb at dBfedTcab`bbcb
+Bb`bbdbabcbobAbdAjdAcdaabebeab`bbdbC``ldTaabebbjabia
+Bb`bbfb`bbblb at dBhedTcab`bbfb
+Bb`bbgbabcb`c at dAadAadaabhbeab`bbgbAadTaabhbblabka
+Bb`bbib`bbblb at dBjedTcab`bbib
+Bb`bbjbabcb`cB`bdAcdE````adaabkbeab`bbjbHngbkeigjdTaabkbbnabma
+Bb`bblb`bbblb at dBledTcab`bblb
+Bb`bbmbabcbacAadAadG``````ddaabnbeab`bbmbGbijjmecdTaabnbb`bboa
+Bb`bbob`bbblb at dBnedTcab`bbob
+Bb`bb`cabcbacAadAbdG``````ddaabaceab`bb`cGghnnjnadTaabacbbbbab
+Bb`bbbc`bbblb at dB`fdTcab`bbbc
+Bb`bbccabcbbcAadAadG``````ddaabdceab`bbccGb`edibbdTaabdcbdbbcb
+Bb`bbec`bbblb at dBbfdTcab`bbec
+Bb`bbfcabcbbcAadAbdG``````ddaabgceab`bbfcGa`ejbhcdTaabgcbfbbeb
+Bb`bbhc`bbblb at dBdfdTcab`bbhc
+BTcab`bB`hdE
+A`b`bLagah`aa`b`b`ah`ah`aa`b`b`Falae
+Bah``bbb`cBnoaAadaaaaeaah`BogaTaaaaabaa
+Bb`bab`bbblb at dCnjadTcab`bab
+Bahac`bbbcbBnoaAeaahad`bbb`cacAadaaaeeaahadAaaTaaaeadac
+Bb`baf`bbblb at dCckadTcab`baf
+BTcab`bD```ddE
+A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab
+Bah``bbbdcBooaAaaaaaaeaah`BooaTaaaaabaa
+Bb`bab`bbblb at dBfndTcab`bab
+Bahac`bbbdcBooaBooaaaadeaahacAaaTaaadadac
+Bb`bae`bbblb at dBhndTcab`bae
+Bahaf`bbbdcAaaAaaaaageaahafAaaTaaagafae
+Bb`bah`bbblb at dBjndTcab`bah
+Bahai`bbbdcBaaaBcbaaaajeaahaiBceaTaaajahag
+Bb`bak`bbblb at dBlndTcab`bak
+Bb`aal`bbbacDoooobAabaaameab`aalDoooobTaaamajai
+Bb`ban`bbblb at dBondTcab`ban
+Bb`aao`bbbacDoooobDoooobaab`aeab`aaoAabTaab`aalak
+Bb`bbaa`bbblb at dBaodTcab`bbaa
+Bb`abba`bbbacAabAabaabcaeab`abbaAabTaabcaanam
+Bb`bbda`bbblb at dBcodTcab`bbda
+Bb`abea`bbbacBckbCgfcbaabfaeab`abeaDe`afbTaabfab`aao
+Bb`bbga`bbblb at dBeodTcab`bbga
+Bb`bbha`bbbbcHoooooooodAadaabiaeab`bbhaHoooooooodTaabiabbabaa
+Bb`bbja`bbblb at dBhodTcab`bbja
+Bb`bbka`bbbbcHoooooooodHoooooooodaablaeab`bbkaAadTaablabdabca
+Bb`bbma`bbblb at dBjodTcab`bbma
+Bb`bbna`bbbbcAadAadaaboaeab`bbnaAadTaaboabfabea
+Bb`bb`b`bbblb at dBlodTcab`bb`b
+Bb`bbab`bbbbcE`emkbdEhnmdmdaabbbeab`bbabH`h`jlgbgdTaabbbbhabga
+Bb`bbcb`bbblb at dBnodTcab`bbcb
+Bb`dbdb`bbbccPoooooooooooooooohAahaabebeab`dbdbPoooooooooooooooohTaabebbjabia
+Bb`bbfb`bbblb at dCa`adTcab`bbfb
+Bb`dbgb`bbbccPoooooooooooooooohPoooooooooooooooohaabhbeab`dbgbAahTaabhbblabka
+Bb`bbib`bbblb at dCc`adTcab`bbib
+Bb`dbjb`bbbccAahAahaabkbeab`dbjbAahTaabkbbnabma
+Bb`bblb`bbblb at dCe`adTcab`bblb
+Bb`dbmb`bbbccImaghnanbdhIogjdckg`bhaabnbeab`dbmbPcfifjghokjjemflghTaabnbb`bboa
+Bb`bbob`bbblb at dCg`adTcab`bbob
+BTcab`bB`adE
+A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai
+Bah``bbbhcBjeaAoaaaaaeaah`BoeaTaaaaabaa
+Bb`bab`bbblb at dCc`bdTcab`bab
+Bb`aac`bbbecDlkjebD```obaaadeab`aacDlkjobTaaadadac
+Bb`bae`bbblb at dCe`bdTcab`bae
+Bb`baf`bbbfcHdcbalkjedG``````odaaageab`bafHdcbalkoedTaaagafae
+Bb`bah`bbblb at dCg`bdTcab`bah
+Bb`dai`bbbgcPdcbahgfedcbalkjehG``````ohaaajeab`daiPdcbahgoedcbalkjehTaaajahag
+Bb`bak`bbblb at dCi`bdTcab`bak
+BTcab`bF`````adE
+A`b`bLaoah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`Fbjaak
+Bah``bbbddBooaAaaaaaaeaah`@aTaaaaabaa
+Bb`bab`bbblb at dC`gadTcab`bab
+Bahac`bbb`eBooaAaaaaadeaahac at aTaaadadac
+Bb`bae`bbblb at dCbgadTcab`bae
+Bahaf`bbbddAaaBooaaaageaahaf at aTaaagafae
+Bb`bah`bbblb at dCdgadTcab`bah
+Bb`aai`bbbadDinmobAgbaaajeab`aaiDmooobTaaajahag
+Bb`bak`bbblb at dCfgadTcab`bak
+Bb`aal`bbbmdDinmobAgbaaameab`aalAfbTaaamajai
+Bb`ban`bbblb at dChgadTcab`ban
+BTcab`bC``ddE
+A`b`bLbfaah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbebao
+Bah``bbblcAaaBooaaaaaeaah`BooaTaaaaabaa
+Bb`bab`bbblb at dCgcadTcab`bab
+Bahac`bbblcBooaAaaaaadeaahacBooaTaaadadac
+Bb`bae`bbblb at dCicadTcab`bae
+Bahaf`bbblcBooaBooaaaageaahafAaaTaaagafae
+Bb`bah`bbblb at dCkcadTcab`bah
+Bahai`bbblcAaaAaaaaajeaahaiAaaTaaajahag
+Bb`bak`bbblb at dCmcadTcab`bak
+Bahal`bbbcbBnoaAeaaham`bbblcAfaalaaaneaahamAbaTaaanajai
+Bb`bao`bbblb at dCcdadTcab`bao
+Bahb`a`bbblcalAbaaabaaeaahb`aAaaTaabaaalak
+Bb`bbba`bbblb at dCedadTcab`bbba
+Bb`abca`bbbicDjnmobAgbaabdaeab`abcaDdkoobTaabdaanam
+Bb`bbea`bbblb at dChdadTcab`bbea
+BTcab`bC``adE
+A`b`bLafb`b`aa`b`b`b`b`aa`b`b`Fakae
+Bb`b``bcbeeAddAedAfdaaaaeab`b`AedTaaaaabaa
+Bb`bab`bbblb at dCdjbdTcab`bab
+Bb`bac`bcbee at dAedAfdaaadeab`bacAfdTaaadadac
+Bb`bae`bbblb at dCfjbdTcab`bae
+BTcab`bH```````hdE
+A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag
+Bb`a``babiaBloaaaaaeab`a`DlooobTaaaaabaa
+Bb`bab`bbblb at dCkcbdTcab`bab
+Bb`bac`babgaDjooobaaadeab`bacHjooooooodTaaadadac
+Bb`bae`bbblb at dCmcbdTcab`bae
+Bb`daf`babhaHjooooooodaaageab`dafPjooooooooooooooohTaaagafae
+Bb`bah`bbblb at dCocbdTcab`bah
+BTcab`bG``````adE
+A`b`bLalah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbeaai
+Bah``bbb`dAaaAadaaaaeaah`AbaTaaaaabaa
+Bb`bab`bbblb at dC`iadTcab`bab
+Bahac`bbb`dAaa at daaadeaahacAaaTaaadadac
+Bb`bae`bbblb at dCbiadTcab`bae
+Bahaf`bbb`dBnoaAbdaaageaahafBhoaTaaagafae
+Bb`bah`bbblb at dCdiadTcab`bah
+Bb`aai`bbbmcDnojobAbdaaajeab`aaiDhoknbTaaajahag
+Bb`bak`bbblb at dCfiadTcab`bak
+BTcab`bD```adE
+A`b`bLbdbah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbmcbia
+Bah``bbbhdBooaAaaaaaaeaah`BnoaTaaaaabaa
+Bb`bab`bbblb at dBekdTcab`bab
+Bahac`bbbhdAaaBooaaaadeaahacAbaTaaadadac
+Bb`bae`bbblb at dBgkdTcab`bae
+Bahaf`bbbhdAaaAaaaaageaahaf at aTaaagafae
+Bb`bah`bbblb at dBikdTcab`bah
+Bb`aai`bbbedDoooobAabaaajeab`aaiDnooobTaaajahag
+Bb`bak`bbblb at dBlkdTcab`bak
+Bb`aal`bbbedAabDoooobaaameab`aalAbbTaaamajai
+Bb`ban`bbblb at dBnkdTcab`ban
+Bb`aao`bbbedAabAabaab`aeab`aao at bTaab`aalak
+Bb`bbaa`bbblb at dB`ldTcab`bbaa
+Bb`bbba`bbbfdHoooooooodAadaabcaeab`bbbaHnooooooodTaabcaanam
+Bb`bbda`bbblb at dBcldTcab`bbda
+Bb`bbea`bbbfdAadHoooooooodaabfaeab`bbeaAbdTaabfab`aao
+Bb`bbga`bbblb at dBeldTcab`bbga
+Bb`bbha`bbbfdAadAadaabiaeab`bbha at dTaabiabbabaa
+Bb`bbja`bbblb at dBgldTcab`bbja
+Bb`dbka`bbbgdPoooooooooooooooohAahaablaeab`dbkaPnooooooooooooooohTaablabdabca
+Bb`bbma`bbblb at dBjldTcab`bbma
+Bb`dbna`bbbgdAahPoooooooooooooooohaaboaeab`dbnaAbhTaaboabfabea
+Bb`bb`b`bbblb at dBlldTcab`bb`b
+Bb`dbab`bbbgdAahAahaabbbeab`dbab at hTaabbbbhabga
+Bb`bbcb`bbblb at dBnldTcab`bbcb
+BTcab`bAddE
+A`b`bLaiah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`Fb`aag
+Bah``babjaDmnnobaaaaeaah`BmnaTaaaaabaa
+Bb`bab`bbblb at dCkfbdTcab`bab
+Bb`aac`babkaHmnnomjnmdaaadeab`aacDmnnobTaaadadac
+Bb`bae`bbblb at dCmfbdTcab`bae
+Bb`baf`bablaPonnkmnnomjnmonnkhaaageab`bafHonnkmnnodTaaagafae
+Bb`bah`bbblb at dCofbdTcab`bah
+BTcab`bH```````adE
+A`b`bLacb`a`aa`b`b`Fafac
+Bb`a``bbbidDjnmobAgbaaaaeab`a`DfddbbTaaaaabaa
+Bb`bab`bbblb at dCoaadTcab`bab
+BTcab`bB`ddE
+A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai
+Bah``bbbdeBjeaB`oaaaaaeaah`BjjaTaaaaabaa
+Bb`bab`bbblb at dCabbdTcab`bab
+Bb`aac`bbbaeDjejebD``oobaaadeab`aacDjeejbTaaadadac
+Bb`bae`bbblb at dCcbbdTcab`bae
+Bb`baf`bbbbeHjejejejedH``oooooodaaageab`bafHjeejejejdTaaagafae
+Bb`bah`bbblb at dCebbdTcab`bah
+Bb`dai`bbbcePjejejejejejejejehP``oooooooooooooohaaajeab`daiPjeejejejejejejejhTaaajahag
+Bb`bak`bbblb at dCgbbdTcab`bak
+BTcab`bF`````ddE
+A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag
+Bb`a``baboaBloaaaaaeab`a`BlobTaaaaabaa
+Bb`bab`bbblb at dCcebdTcab`bab
+Bb`bac`babmaDlooobaaadeab`bacDlooodTaaadadac
+Bb`bae`bbblb at dCeebdTcab`bae
+Bb`daf`babnaHlooooooodaaageab`dafHlooooooohTaaagafae
+Bb`bah`bbblb at dCgebdTcab`bah
+BTcab`bG``````ddE
+Aab`bLaab`b`b`b`Fabaa
+Bb`baaob`Tcab`baaE
+Aab`dLaab`d`b`d`Fabaa
+Bb`daa`c`Tcab`daaE
+Aab`bLaab`a`b`b`Fabaa
+Bb`baao``Tcab`baaE
+Aab`dLaab`b`b`d`Fabaa
+Bb`daao``Tcab`daaE
+Aab`aLaaah`b`a`Fabaa
+Bb`aaao``Tcab`aaaE
+AaahLaab`a`ah`Fabaa
+Bahaan``TcaahaaE
+Aab`aLaab`b`b`a`Fabaa
+Bb`aaan``Tcab`aaaE
+Aab`bLaab`d`b`b`Fabaa
+Bb`baan``Tcab`baaE
+Aab`bLaab`a`b`b`Fabaa
+Bb`baa`a`Tcab`baaE
+Aab`dLaab`b`b`d`Fabaa
+Bb`daa`a`Tcab`daaE
+Aab`aLaaah`b`a`Fabaa
+Bb`aaa`a`Tcab`aaaE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aaba`aa`Tcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`baba`aa`Tcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`daba`aa`Tcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahaba`aa`TcaahabE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabk`aa`Tcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babk`aa`Tcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabk`aa`Tcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabk`aa`TcaahabE
+Abb`aLadb`a`b`a`b`b`b`b`b`b`b`a`Faeaa
+Bb`babo``b`baco`aab`badj`abacb`aaen`adTcab`aaeE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babj``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabj``aaTcab`dabE
+AbahLadah`ah`b`b`b`b`b`b`ah`Faeaa
+Bb`babo``b`baco`aab`badj`abacahaen`adTcaahaeE
+Abb`bLadb`b`b`b`b`b`b`b`b`b`b`b`Faeaa
+Bb`bababbbfcAc`Bjadb`bacabaagaab`badabbbgcAd`Aadb`baee`Aad`Tcab`baeE
+Abb`aLacb`a`b`b`b`b`b`b`b`a`Fadaa
+Bb`bab`a`b`baci`abaab`aadn`acTcab`aadE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babi``aaTcab`babE
+Abb`dLabb`d`b`b`b`d`b`d`Facaa
+Bb`dab`aaab`daci``abTcab`dacE
+AbahLacah`b`b`b`b`b`b`ah`Fadaa
+Bb`bab`a`b`baci`abaaahadn`acTcaahadE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabc`aa`Tcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babc`aa`Tcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabc`aa`Tcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabc`aa`TcaahabE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabl`aa`Tcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babl`aa`Tcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabl`aa`Tcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabl`aa`TcaahabE
+Abb`aLadb`a`b`a`b`b`b`b`b`b`b`a`Faeaa
+Bb`babo``b`baco`aab`bade`abacb`aaen`adTcab`aaeE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babe``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabe``aaTcab`dabE
+AbahLadah`ah`b`b`b`b`b`b`ah`Faeaa
+Bb`babo``b`baco`aab`bade`abacahaen`adTcaahaeE
+Abb`aLacb`a`b`b`b`b`b`b`b`a`Fadaa
+Bb`babo``b`bach`abaab`aadn`acTcab`aadE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babh``aaTcab`babE
+Abb`dLabb`d`b`b`b`d`b`d`Facaa
+Bb`dab`aaab`dach``abTcab`dacE
+AbahLacah`b`b`b`b`b`b`ah`Fadaa
+Bb`babo``b`bach`abaaahadn`acTcaahadE
+Abb`aLadb`a`b`a`b`b`b`b`b`b`b`a`Faeaa
+Bb`babo``b`baco`aab`badg`abacb`aaen`adTcab`aaeE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babg``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabg``aaTcab`dabE
+AbahLadah`ah`b`b`b`b`b`b`ah`Faeaa
+Bb`babo``b`baco`aab`badg`abacahaen`adTcaahaeE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabb``aaTcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babb``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabb``aaTcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabb``aaTcaahabE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabd``aaTcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babd``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabd``aaTcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabd``aaTcaahabE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabf``aaTcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babf``aaTcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabf``aaTcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabf``aaTcaahabE
+Abb`aLaab`a`b`a`b`a`Fabaa
+Bb`aabm`aa`Tcab`aabE
+Abb`bLaab`b`b`b`b`b`Fabaa
+Bb`babm`aa`Tcab`babE
+Abb`dLaab`d`b`d`b`d`Fabaa
+Bb`dabm`aa`Tcab`dabE
+AbahLaaah`ah`ah`Fabaa
+Bahabm`aa`TcaahabE
+Acb`bLabb`b`b`b`b`b`aa`b`b`Facaa
+Baaacfab`b`@db`badoaacaaabTcab`badE
+Adb`bLbmab`b`b`b`b`b`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`Fbnaaa
+Baaadnab`b`aab`bae`aadaaafkab`baaabb`bagl`aeAbdb`bahoaafaeagaaaikab`b`aab`bajl`ahAddb`bakoaaiajahaaalnab`baaabb`baml`akAhdb`banoaalakamaaaoiab`b`acb`bb`al`anB`adb`bbaaoaaob`aanaabbagab`baaacb`bbcal`baaB`bdb`bbdaoabbabaabcaaabeaiab`babacb`bbfal`bdaB`ddb`bbgaoabeabdabfaaabhagab`b`acb`bbial`bgaB`hdb`bbjaoabhabiabgaaabkaeab`b`aab`bblal`bjaC``adb`bbmaoabkablabjaaabnaeab`baaabb`bboal`bmaC``bdb`bb`boabnabmaboaTcab`bb`bE
+Sobjb`bdeefcgdg`bdghfafdg`baflflf`bbfafcgifcf`bof`gefbgafdgifofnfcg`bggofbgkf`b`gbgof`gefbglfig`bjbobSifnfdg`bdgefcgdgoeafdfdfhbfgofifdfibkcSifnfdg`bdgefcgdgoecgegbfhbfgofifdfibkc
+ifnfdg`bdgefcgdgoemfeglfhbfgofifdfibkcSifnfdg`bdgefcgdgoeegdfiffghbfgofifdfibkcSifnfdg`bdgefcgdgoecgdfiffghbfgofifdfibkcSifnfdg`bdgefcgdgoebgefmfhbfgofifdfibkcSifnfdg`bdgefcgdgoecghflfhbfgofifdfibkc
+ifnfdg`bdgefcgdgoelfcghfbghbfgofifdfibkcSifnfdg`bdgefcgdgoeafcghfbghbfgofifdfibkcSifnfdg`bdgefcgdgoeafnfdfhbfgofifdfibkcSifnfdg`bdgefcgdgoeofbghbfgofifdfibkcSifnfdg`bdgefcgdgoehgofbghbfgofifdfibkc
+ifnfdg`bdgefcgdgoecgefhgdghbfgofifdfibkcSifnfdg`bdgefcgdgoejgefhgdghbfgofifdfibkcSifnfdg`bdgefcgdgoedgbgegnfcfhbfgofifdfibkcSifnfdg`bdgefcgdgoeifcfmf`ghbfgofifdfibkc
+ifnfdg`bdgefcgdgoecgeflfefcfdghbfgofifdfibkcSifnfdg`bdgefcgdgoebfcgggaf`ghbfgofifdfibkcSifnfdg`bdgefcgdgoeifff`ghbfgofifdfibkcSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfib
+kgSbgefdgegbgnf`bdgefcgdgoeafdfdfhbib`bkb`bdgefcgdgoecgegbfhbib`bkb`bdgefcgdgoebfcgggaf`ghbib`bkb`bdgefcgdgoeifff`ghbib`bkb`bdgefcgdgoemfeglfhbib`bkbSdgefcgdgoeegdfiffghbib`bkb`bdgefcgdgoecgdfiffghbibkb`bdgefcgdgoebgefmfhbib`bkb`bdgefcgdgoecghflfhbib`bkb`bdgefcgdgoelfcghfbghbibkb
+dgefcgdgoeafcghfbghbibkbdgefcgdgoeafnfdfhbibkbdgefcgdgoeofbghbibkbdgefcgdgoehgofbghbibkbdgefcgdgoecgefhgdghbibkbdgefcgdgoejgefhgdghbibkbSdgefcgdgoedgbgegnfcfhbibkbdgefcgdgoeifcfmf`ghbibkbdgefcgdgoecgeflfefcfdghbibkc
+mgSScbdfefffifnfef`bffafiflfhbhgib`bffafiflfoebgefaflfhbhglb`boeoeldidndedoeoeibSifnfdg`bffafiflfoebgefaflfhbifnfdg`bhglb`bifnfdg`blfifnfefibSkgSdfefbfeggfoe`gbgifnfdgoecgdgbgoecgdgafbgdghbbbffafiflfefdf`bafbgifdghf`bdgefcgdg`bafdg`blfifnfef`bbblbbcfcibkc
+dfefbfeggfhblfifnfefibkcSdfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblenfbblb`bacibkcSbgefdgegbgnf`bacobhgkcSmgSSegifnfdgccbcoedg`bbfcgccbchbifnfdgccbcoedg`bafibSkgSbgefdgegbgnf`boeoebfegiflfdgifnfoebfcgggaf`gccbchbafibkc
+mgSSegifnfdgfcdcoedg`bbfcgfcdchbifnfdgfcdcoedg`bafibSkgSbgefdgegbgnf`boeoebfegiflfdgifnfoebfcgggaf`gfcdchbafibkcSmgSSifnfdg`bdgefcgdgoebfcgggaf`ghbfgofifdfibSkgSifff`bhbbfcgccbchb`chgafafib`babmc`b`chgafaf`c`c`c`c`c`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbbfcgccbchb`chgacbcccdcib`babmc`b`chgccdcacbc`c`c`c`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbbfcgfcdchb`chgafafib`babmc`b`chgafaf`c`c`c`c`c`c`c`c`c`c`c`c`c`ceeldib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbbfcgfcdchb`chgacbcccdcecfcgchcic`cafbfcfdfefffeeldib`babmc`b`chgefffcfdfafbfic`cgchcecfcccdcacbceeldibSbgefdgegbgnf`bffafiflfhb`cibkc
+bgefdgegbgnf`b`chghckcSmgSSifnfdg`bdgefcgdgoeifff`ghbfgofifdfibSkgSifff`bhbiflfofgfbchbaclb`b`cib`babmc`b`chggcffffffffffffffibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbaclb`bacib`babmc`b`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbbclb`bbcib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbbclb`bacib`babmc`b`chgdc`c`c`c`c`c`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbaclb`bbcib`babmc`bmb`chgdc`c`c`c`c`c`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbdclb`bacib`babmc`b`chghc`c`c`c`c`c`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbhclb`bacib`babmc`bccjb`chgdc`c`c`c`c`c`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbcclb`bbcib`babmc`bccicbcecfcacfcicib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbeclb`bbcib`babmc`bhchcgcaccc`cicccibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbiflfofgfbchbaclclcccaclbccib`babmc`bacicgcdc`c`cicgcecacib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbif`gofgghb`clb`bdclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbif`gofgghbaclb`baclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbif`gofgghbbclbac`clb`bccib`babmc`bccjbac`cbcdcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbifefhg`ghb`clb`baclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbifefhg`ghbaclclceclb`bcclb`baclclcacfcib`babmc`bbchcacacfc`cecfccc`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbifcgifnfhbaclb`baclb`baclclcbcfcib`babmc`becfcdcgc`cacfcbcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbifcgifnfhbaclb`bbclb`baclclcbcfcib`babmc`bccbcacgcccgc`cccibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbifcfofcghbaclb`baclb`baclclcbcfcib`babmc`bccfcbcecic`cgcdcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbifcfofcghbaclb`bbclb`baclclcbcfcib`babmc`b`bechchcicccecfcicibSbgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chghc`ckcSmgSSifnfdghcoedg`bafdfdfoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfib
+kgSbgefdgegbgnf`baf`bkb`bbfkcSmgSifnfdgacfcoedg`bafdfdfoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`bkb`bbfkcSmgSifnfdgccbcoedg`bafdfdfoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`bkb`bbfkcSmgSifnfdgfcdcoedg`bafdfdfoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`bkb`bbfkcSmgSSifnfdg`bdgefcgdgoeafdfdfhbfgofifdfib
+kgSifff`bhbafdfdfoeifhchbaclb`bacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeifhchbaclb`bmbacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeifhchbmbaclb`bmbacib`babmc`bmbbcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeifhchbbcececlb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbafdfdfoeifacfchbaclb`bacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbafdfdfoeifacfchbaclb`bmbacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeifacfchbmbaclb`bmbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbafdfdfoeifacfchbfcececcceclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbafdfdfoeifccbchbaclb`bacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbafdfdfoeifccbchbaclb`bmbacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeifccbchbmbaclb`bmbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbafdfdfoeifccbchbng`ceglb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbafdfdfoeiffcdchbaclb`bacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeiffcdchbaclb`bmbacib`babmc`b`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeiffcdchbmbaclb`bmbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafdfdfoeiffcdchbng`ceglflflb`bacib`babmc`b`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgackcSmgSSifnfdghcoedg`bcgegbfoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`bmb`bbfkcSmgSifnfdgacfcoedg`bcgegbfoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`baf`bmb`bbfkcSmgSifnfdgccbcoedg`bcgegbfoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfibSkgSbgefdgegbgnf`baf`bmb`bbfkcSmgSifnfdgfcdcoedg`bcgegbfoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfib
+kgSbgefdgegbgnf`baf`bmb`bbfkcSmgSSifnfdg`bdgefcgdgoecgegbfhbfgofifdfibSkgSifff`bhbcgegbfoeifhchbmbaclbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeifhchbaclb`bmbacib`babmc`bbcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeifhchbaclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbcgegbfoeifacfchbmbaclbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbcgegbfoeifacfchbaclb`bmbacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeifacfchbaclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbcgegbfoeifccbchbmbaclbacib`babmc`bmbbcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeifccbchbaclb`bmbacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeifccbchbaclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkc
+Sifff`bhbcgegbfoeiffcdchbmbaclbacib`babmc`bmbbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeiffcdchbaclb`bmbacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgegbfoeiffcdchbaclb`bacib`babmc`b`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`bdckcSmgSSifnfdghcoedg`bmfeglfoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`bjb`bbfkcSmgSifnfdgacfcoedg`bmfeglfoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`baf`bjb`bbfkcSmgSifnfdgccbcoedg`bmfeglfoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfibSkgSbgefdgegbgnf`baf`bjb`bbfkcSmgSifnfdgfcdcoedg`bmfeglfoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfib
+kgSbgefdgegbgnf`baf`bjb`bbfkcSmgSSifnfdg`bdgefcgdgoemfeglfhbfgofifdfibSkgSifff`bhbmfeglfoeifhchbmbaclb`bacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifhchbmbaclb`bmbacib`babmc`bacib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifhchbaclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifhchbacgclb`bccecib`babmc`bhcccibSbgefdgegbgnf`bffafiflfhb`cibkc
+Sifff`bhbmfeglfoeifacfchbmbaclb`bacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifacfchbmbaclb`bmbacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbmfeglfoeifacfchbaclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifacfchbacgciclb`bhcgcacib`babmc`bbcdchcccgcibSbgefdgegbgnf`bffafiflfhb`cibkc
+Sifff`bhbmfeglfoeifccbchbmbaclb`bacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifccbchbmbaclb`bmbacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbmfeglfoeifccbchbaclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeifccbchbacgcicecccfclb`bhcgcacicacbcib`babmc`bacicbc`cgcgc`cacgcfcib
+bgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbmfeglfoeiffcdchbmbaclb`bacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeiffcdchbmbaclb`bmbacib`babmc`bacib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeiffcdchbaclb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbmfeglfoeiffcdchbacgcicecccfcbcacgchciclb`bhcgcacicacbcecacacicib`babmc`bhcicfcecicbcbcacbcgchcacicbc`cdcicfcccib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`ckcSmgSSegifnfdghcoedg`begdfiffgoeifhchbegifnfdghcoedg`baflb`begifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`bob`bbfkcSmg
+egifnfdgacfcoedg`begdfiffgoeifacfchbegifnfdgacfcoedg`baflb`begifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`bob`bbfkcSmgSegifnfdgccbcoedg`begdfiffgoeifccbchbegifnfdgccbcoedg`baflb`begifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`bob`bbfkcSmgSegifnfdgfcdcoedg`begdfiffgoeiffcdchbegifnfdgfcdcoedg`baflb`begifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`bob`bbfkcSmgSSifnfdg`bdgefcgdgoeegdfiffghbfgofifdfib
+kgSifff`bhbegdfiffgoeifacfchbmbecccdclb`bgcib`babmc`bicbchcfcibSbgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgdc`ckcSmgSSifnfdghcoedg`bcgdfiffgoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfib
+kgSbgefdgegbgnf`baf`bob`bbfkcSmgSifnfdgacfcoedg`bcgdfiffgoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`bob`bbfkcSmgSifnfdgccbcoedg`bcgdfiffgoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`bob`bbfkcSmgSifnfdgfcdcoedg`bcgdfiffgoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`bob`bbfkcSmgSSifnfdg`bdgefcgdgoecgdfiffghbfgofifdfib
+kgSifff`bhbcgdfiffgoeifhchbaclb`bmbacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgdfiffgoeifhchbmbaclbacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbcgdfiffgoeifhchbmbaclbmbacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgdfiffgoeifhchbaclbacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSSegifnfdghcoedg`baf`bmc`bbcecdckc
+egifnfdghcoedg`bbf`bmc`beckcSegifnfdghcoedg`bcf`bmc`bafdfdfoeifhchbaflbbfibkcSifff`bhbcgdfiffgoeifhchbfclb`bcfib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgdfiffgoeifhchbcflb`bbcib`babmc`bacib
+bgefdgegbgnf`bffafiflfhb`cibkcSSifff`bhbcgdfiffgoeifacfchbmbecccdclb`bgcib`babmc`bmbgcfcibSbgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`ckcSmgSSegifnfdghcoedg`begbgefmfoeifhchbegifnfdghcoedg`baflb`begifnfdghcoedg`bbfib
+kgSbgefdgegbgnf`baf`beb`bbfkcSmgSegifnfdgacfcoedg`begbgefmfoeifacfchbegifnfdgacfcoedg`baflb`begifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`beb`bbfkcSmgSegifnfdgccbcoedg`begbgefmfoeifccbchbegifnfdgccbcoedg`baflb`begifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`beb`bbfkcSmgSegifnfdgfcdcoedg`begbgefmfoeiffcdchbegifnfdgfcdcoedg`baflb`begifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`beb`bbfkcSmgSifnfdghcoedg`bcgbgefmfoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfib
+kgSbgefdgegbgnf`baf`beb`bbfkcSmgSifnfdgacfcoedg`bcgbgefmfoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`beb`bbfkcSmgSifnfdgccbcoedg`bcgbgefmfoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`beb`bbfkcSmgSifnfdgfcdcoedg`bcgbgefmfoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`beb`bbfkcSmgSSifnfdg`bdgefcgdgoebgefmfhbfgofifdfib
+kgSifff`bhbcgbgefmfoeifhchbmbaclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbegbgefmfoeifhchbmbaclb`bacib`babmc`b`cibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgbgefmfoeifhchbaclb`bmbacib`babmc`b`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgbgefmfoeifacfchbmbeccceclbgcib`babmc`bmbccibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbegbgefmfoeifacfchbmbeccceclbgcib`babmc`bfcib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgdc`c`ckcSmgSSifnfdghcoedg`bcghflfoeifhchbifnfdghcoedg`baflb`begnfcgifgfnfefdf`bcfibSkgSbgefdgegbgnf`baf`blclc`bcfkcSmg
+ifnfdgacfcoedg`bcghflfoeifacfchbifnfdgacfcoedg`baflb`begnfcgifgfnfefdf`bcfibSkgSbgefdgegbgnf`baf`blclc`bcfkcSmgSifnfdgccbcoedg`bcghflfoeifccbchbifnfdgccbcoedg`baflb`begnfcgifgfnfefdf`bcfib
+kgSbgefdgegbgnf`baf`blclc`bcfkcSmgSifnfdgfcdcoedg`bcghflfoeiffcdchbifnfdgfcdcoedg`baflb`begnfcgifgfnfefdf`bcfibSkgSbgefdgegbgnf`baf`blclc`bcfkcSmgSSifnfdg`bdgefcgdgoecghflfhbfgofifdfib
+kgSifff`bhbcghflfoeifhchbaclb`bacib`babmc`bbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcghflfoeifhchbaclb`b`cib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcghflfoeifhchbbcecdclb`bbcib`babmc`bmbhcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcghflfoeifacfchb`chgffafffeflbbcib`babmc`b`chgffffffffefbfffhcibSbgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`c`ckc
+mgSSifnfdghcoedg`blfcghfbgoeifhchbegifnfdghcoedg`baflb`begnfcgifgfnfefdf`bcfibSkgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgacfcoedg`blfcghfbgoeifacfchbegifnfdgacfcoedg`baflb`begnfcgifgfnfefdf`bcfib
+kgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgccbcoedg`blfcghfbgoeifccbchbegifnfdgccbcoedg`baflb`begnfcgifgfnfefdf`bcfibSkgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgfcdcoedg`blfcghfbgoeiffcdchbegifnfdgfcdcoedg`baflb`begnfcgifgfnfefdf`bcfib
+kgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSSifnfdg`bdgefcgdgoelfcghfbghbfgofifdfibSkgSifff`bhblfcghfbgoeifhchb`chgffeflb`bacib`babmc`b`chggcffibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifnfdghcoedg`baf`bmc`bbcecdckcSifnfdghcoedg`bbf`bmc`beckcSifnfdghcoedg`bcf`bmc`bafdfdfoeifhchbaflbbfibkcSifff`bhblfcghfbgoeifhchbcflb`bacib`babmc`bacibSbgefdgegbgnf`bffafiflfhb`cibkc
+bgefdgegbgnf`b`chgdc`c`c`ckcSmgSSifnfdghcoedg`bafcghfbgoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bcfibSkgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgacfcoedg`bafcghfbgoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bcfib
+kgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgccbcoedg`bafcghfbgoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bcfibSkgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSifnfdgfcdcoedg`bafcghfbgoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bcfib
+kgSbgefdgegbgnf`baf`bncnc`bcfkcSmgSSifnfdg`bdgefcgdgoeafcghfbghbfgofifdfibSkgSifff`bhbafcghfbgoeifhchb`chgffeflb`bacib`babmc`bmbacibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafcghfbgoeifhchb`chggceflb`bacib`babmc`b`chgccffib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`c`c`ckcSmgSSifnfdghcoedg`bafnfdfoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`bfb`bbfkcSmgSifnfdgacfcoedg`bafnfdfoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`baf`bfb`bbfkcSmgSifnfdgccbcoedg`bafnfdfoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfibSkgSbgefdgegbgnf`baf`bfb`bbfkcSmgSifnfdgfcdcoedg`bafnfdfoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfib
+kgSbgefdgegbgnf`baf`bfb`bbfkcSmgSSifnfdg`bdgefcgdgoeafnfdfhbfgofifdfibSkgSifff`bhbafnfdfoeifhchb`chgecaflb`b`chg`cffib`babmc`b`chgafibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafnfdfoeifacfchb`chgecafbfcflb`b`chgff`c`c`cib`babmc`b`chgec`c`c`cib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbafnfdfoeifccbchb`chgecafbfcfacbcccdclb`b`chg`cff`c`c`c`c`c`cib`babmc`b`chg`caf`c`c`c`c`c`cibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbafnfdfoeiffcdchb`chgecafbfcfacbcccdcecfcgchcacbcccdcldldlb`b`chg`cff`c`c`c`c`c`cib`babmc`b`chg`cfc`c`c`c`c`c`cibSbgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgdc`c`c`c`ckc
+mgSSifnfdghcoedg`bofbgoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`blg`bbfkcSmgSifnfdgacfcoedg`bofbgoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfib
+kgSbgefdgegbgnf`baf`blg`bbfkcSmgSifnfdgccbcoedg`bofbgoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfibSkgSbgefdgegbgnf`baf`blg`bbfkcSmgSifnfdgfcdcoedg`bofbgoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfib
+kgSbgefdgegbgnf`baf`blg`bbfkcSmgSSifnfdg`bdgefcgdgoeofbghbfgofifdfibSkgSifff`bhbofbgoeifhchb`chgecaflb`b`chg`cffib`babmc`b`chgecffibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbofbgoeifacfchb`chgecafbfcflb`b`chgff`c`c`cib`babmc`bhbifnfdgacfcoedgib`chgffafbfcfib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbofbgoeifccbchb`chgecafbfcfacbcccdclb`b`chg`cff`c`c`c`c`c`cib`babmc`b`chgecffbfcfacbcccdcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbofbgoeiffcdchb`chgecafbfcfacbcccdcecfcgchcacbcccdcldldlb`b`chg`cff`c`c`c`c`c`cib`babmc`b`chgecafbfcfacbcccdcecffgchcacbcccdcldldib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`c`c`c`ckcSmgSSifnfdghcoedg`bhgofbgoeifhchbifnfdghcoedg`baflb`bifnfdghcoedg`bbfibSkgSbgefdgegbgnf`baf`bne`bbfkcSmg
+ifnfdgacfcoedg`bhgofbgoeifacfchbifnfdgacfcoedg`baflb`bifnfdgacfcoedg`bbfibSkgSbgefdgegbgnf`baf`bne`bbfkcSmgSifnfdgccbcoedg`bhgofbgoeifccbchbifnfdgccbcoedg`baflb`bifnfdgccbcoedg`bbfib
+kgSbgefdgegbgnf`baf`bne`bbfkcSmgSifnfdgfcdcoedg`bhgofbgoeiffcdchbifnfdgfcdcoedg`baflb`bifnfdgfcdcoedg`bbfibSkgSbgefdgegbgnf`baf`bne`bbfkcSmgSSifnfdg`bdgefcgdgoehgofbghbfgofifdfib
+kgSifff`bhbhgofbgoeifhchb`chgecaflb`b`chgff`cib`babmc`bhbifnfdghcoedgib`chgafafibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbhgofbgoeifacfchb`chgecafecaflb`b`chgffff`c`cib`babmc`bhbifnfdgacfcoedgib`chgafececafib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbhgofbgoeifccbchb`chgecafecafecafecaflb`b`chgffffffffffff`c`cib`babmc`b`chgafecafecafececafibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbhgofbgoeiffcdchb`chgecafecafecafecafecafecafecafecaflflflb`b`chgffffffffffffffffffffffffffff`c`clflfib`babmc`b`chgafecafecafecafecafecafecafececafibSbgefdgegbgnf`bffafiflfhb`cibkc
+bgefdgegbgnf`b`chgdc`c`c`c`c`ckcSmgSSifnfdgacfcoedg`bcgefhgdgoeifhcdgofacfchbifnfdghcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSifnfdgccbcoedg`bcgefhgdgoeifacfcdgofccbchbifnfdgacfcoedg`bafib
+kgSbgefdgegbgnf`bafkcSmgSifnfdgfcdcoedg`bcgefhgdgoeifccbcdgoffcdchbifnfdgccbcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSSifnfdg`bdgefcgdgoecgefhgdghbfgofifdfibSkgSifff`bhbcgefhgdgoeifhcdgofacfchbmbdcib`babmc`bmbdcib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgefhgdgoeifacfcdgofccbchbmbfcib`babmc`bmbfcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbcgefhgdgoeifccbcdgoffcdchbmbfcib`babmc`bmbfclflfib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`c`c`c`c`ckcSmgSSegifnfdgacfcoedg`bjgefhgdgoeifhcdgofacfchbegifnfdghcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSegifnfdgccbcoedg`bjgefhgdgoeifacfcdgofccbchbegifnfdgacfcoedg`bafib
+kgSbgefdgegbgnf`bafkcSmgSegifnfdgfcdcoedg`bjgefhgdgoeifccbcdgoffcdchbegifnfdgccbcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSSifnfdg`bdgefcgdgoejgefhgdghbfgofifdfibSkgSifff`bhbjgefhgdgoeifhcdgofacfchbmbdcib`babmc`b`chgffcfib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbjgefhgdgoeifacfcdgofccbchbmbdcib`babmc`b`chgffffffcfibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbjgefhgdgoeifccbcdgoffcdchbmbdcib`babmc`b`chgffffffffffffffcflflfib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgdc`c`c`c`c`c`ckcSmgSSifnfdghcoedg`bdgbgegnfcfoeifacfcdgofhchbifnfdgacfcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSifnfdgacfcoedg`bdgbgegnfcfoeifccbcdgofacfchbifnfdgccbcoedg`bafib
+kgSbgefdgegbgnf`bafkcSmgSifnfdgccbcoedg`bdgbgegnfcfoeiffcdcdgofccbchbifnfdgfcdcoedg`bafibSkgSbgefdgegbgnf`bafkcSmgSSifnfdg`bdgefcgdgoedgbgegnfcfhbfgofifdfibSkgSifff`bhbdgbgegnfcfoeifacfcdgofhchb`chgffefefdfib`babmc`bhbifnfdghcoedgib`chgefdfib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbdgbgegnfcfoeifccbcdgofacfchb`chgdfefafdfffefefdfib`babmc`bhbifnfdgacfcoedgib`chgffefefdfibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbdgbgegnfcfoeiffcdcdgofccbchb`chgbfefefffdfefafdfffefefdfbfefeffflflfib`babmc`b`chgffefefdfbfefefffib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgac`c`c`c`c`c`c`ckcSmgSSifnfdg`bdgefcgdgoeifcfmf`goehbifnfdg`baflb`bifnfdg`bbflb`bifnfdg`bcflb`begnfcgifgfnfefdf`bdfib
+kgSifnfdg`bbgefcgeglfdg`bmc`b`ckcSifff`bhbaf`blc`bbfibSbgefcgeglfdg`blgmc`backcSifff`bhbbf`blcmc`bcfibSbgefcgeglfdg`blgmc`bbckcSifff`bhbaf`bnc`bbfibSbgefcgeglfdg`blgmc`bdckc
+ifff`bhbbf`bncmc`bcfibSbgefcgeglfdg`blgmc`bhckcSifff`bhbaf`blc`bdfibSbgefcgeglfdg`blgmc`bacfckcSifff`bhbbf`blcmc`bdfibSbgefcgeglfdg`blgmc`bccbckcSifff`bhbcf`bncmc`bdfib
+bgefcgeglfdg`blgmc`bfcdckcSifff`bhbaf`bnc`bdfibSbgefcgeglfdg`blgmc`bacbchckcSifff`bhbaf`bmcmc`bbfibSbgefcgeglfdg`blgmc`bbcecfckcSifff`bhbbf`babmc`bcfibSbgefcgeglfdg`blgmc`becacbckc
+bgefdgegbgnf`bbgefcgeglfdgkcSmgSSifnfdg`bdgefcgdgoeifcfmf`ghbfgofifdfibSkgSifff`bhbdgefcgdgoeifcfmf`goehbmbaclbbclb`clbdcib`babmc`b`chgbcaficibSbgefdgegbgnf`bffafiflfhb`cibkc
+ifff`bhbdgefcgdgoeifcfmf`goehbmbaclbmbaclbaclbmbacib`babmc`b`chgccbcbcibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbdgefcgdgoeifcfmf`goehbmbaclb`clbcclbmbbcib`babmc`b`chgbcafccib
+bgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbdgefcgdgoeifcfmf`goehbmbaclb`clbcclb`cib`babmc`b`chgbcefccibSbgefdgegbgnf`bffafiflfhb`cibkcSifff`bhbdgefcgdgoeifcfmf`goehbmbaclb`clb`clbmbacib`babmc`b`chgbcbfib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chgdc`c`c`c`c`c`c`ckcSmgSSifnfdg`bdgefcgdgoecgeflfefcfdgoehbifnfdg`baflb`bifnfdg`bbflb`bifnfdg`bcfibSkgSbgefdgegbgnf`baf`boc`bbf`bjc`bcfkc
+mgSSifnfdg`bdgefcgdgoecgeflfefcfdghbfgofifdfibSkgSifffhbdgefcgdgoecgeflfefcfdgoehbdclb`beclb`bfcib`babmc`becibSbgefdgegbgnf`bffafiflfhb`cibkcSifffhbdgefcgdgoecgeflfefcfdgoehb`clb`beclb`bfcib`babmc`bfcib
+bgefdgegbgnf`bffafiflfhb`cibkcSbgefdgegbgnf`b`chghc`c`c`c`c`c`c`ckcSmgSS
diff --git a/unit_tests/input/bytecode.cvd b/unit_tests/input/bytecode.cvd
new file mode 100644
index 0000000..8929630
Binary files /dev/null and b/unit_tests/input/bytecode.cvd differ
diff --git a/unit_tests/input/debug_7.cbc b/unit_tests/input/debug_7.cbc
new file mode 100644
index 0000000..d8a8a11
--- /dev/null
+++ b/unit_tests/input/debug_7.cbc
@@ -0,0 +1,14 @@
+ClamBCafh`lc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``bkaaap`clamcoincidencejb:407
+
+Teddaaahdabahdacahdadahdaeahdafahdagahebjeebieebheebfdebgeebfeebadaaab`baabb`bb`baacb`bbadb`bdaoahdbfaahdbnaahdbmaahdbaaah
+Ebedahbedbce|bbaefnfgfifnfefoedfbfoeof`gdgifofnfcg``bcdbce|bcaefnfgfifnfefoedfcfofnfffoelfeffgeflf``bbdbce|bkaefnfgfifnfefoeffegnfcfdgifofnfaflfifdgigoelfeffgeflf``bddbce|bdaefnfgfifnfefoecgcfafnfoeof`gdgifofnfcg``agbde|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``afbee|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``bgcbee|beadfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflf``bfcbee|bfadfefbfeggfoe`gbgifnfdgoecgdgbgoecgdgafbgdg``
+G`am`@`bjeBbfBigBdgBefBcfBofBdfBefB`bBcgBdgBafBbgBdgBefBdf@`bieBedBnfBgfBifBnfBefB`bBffBegBnfBcfBdgBifBofBnfBafBlfBifBdgBigB`bBlfBefBfgBefBlfBjcB`b@`bheBlbB`bBdfBcfBofBnfBffB`bBffBegBnfBcfBdgBifBofBnfBafBlfBifBdgBigB`bBlfBefBfgBefBlfBjcB`b@`bfdAj@`bgeBedBnfBgfBifBnfBefB`bBcgBcfBafBnfB`bBofB`gBdgBifBofBnfBcgBjcB`b@`bfeBlbB`bBdfBbfB`bBofB`gBdgBifBofBnfBcgBjcB`b@`bad at Aa`bad at Ab`bad at Ac`bad at Ad`bad at Ae`bad at Af`
+A`b`bLaob`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`Fb`aaa
+Bb`b`abbafAg`B`adb`baaabbbfcAh`Bladb`babab`bbdb`bacabaagabb`badabbbgcAi`Bladb`baeab`bcdb`bafabaagaeb`bagabbbgcAj`Aadb`bahabbbfcAk`Beadb`baiab`bddb`bajabaagaib`bakabbbgcAl`Amdb`balab`bedb`bamabaagalb`banabbbgcAj`AadTcab`bDm``odE
+Sobjb`bdgefcgdg`bdfefbfeggf`bad`eidcg`bjbobSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfibSkgSdfefbfeggfoe`gbgifnfdgoecgdgbghbbbbfigdgefcfofdfef`bcgdgafbgdgefdfbblb`bacfcibkc
+dfefbfeggfoe`gbgifnfdgoecgdgbgoecgdgafbgdghbbbednfgfifnfef`bffegnfcfdgifofnfaflfifdgig`blfeffgeflfjc`bbblb`bbchcibkcSdfefbfeggfoe`gbgifnfdgoeegifnfdghbefnfgfifnfefoeffegnfcfdgifofnfaflfifdgigoelfeffgeflfhbibibkc
+dfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblb`bdfcfofnfff`bffegnfcfdgifofnfaflfifdgig`blfeffgeflfjc`bbblb`bbchcibkcSdfefbfeggfoe`gbgifnfdgoeegifnfdghbefnfgfifnfefoedfcfofnfffoelfeffgeflfhbibibkc
+dfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblenfbblb`bacibkcSdfefbfeggfoe`gbgifnfdgoecgdgbgoecgdgafbgdghbbbednfgfifnfef`bcgcfafnf`bof`gdgifofnfcgjc`bbblb`bbcacibkc
+dfefbfeggfoe`gbgifnfdgoeegifnfdghbefnfgfifnfefoecgcfafnfoeof`gdgifofnfcghbibibkcSdfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblb`bdfbf`bof`gdgifofnfcgjc`bbblb`bacccibkc
+dfefbfeggfoe`gbgifnfdgoeegifnfdghbefnfgfifnfefoedfbfoeof`gdgifofnfcghbibibkcSdfefbfeggfoe`gbgifnfdgoecgdgbgoenfofnflfhbbblenfbblb`bacibkcSbgefdgegbgnf`b`chgff`c`cdfkc
+mgSS
diff --git a/unit_tests/input/inf_7.cbc b/unit_tests/input/inf_7.cbc
new file mode 100644
index 0000000..8788c19
--- /dev/null
+++ b/unit_tests/input/inf_7.cbc
@@ -0,0 +1,9 @@
+ClamBCafh`lc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``alaap`clamcoincidencejb:40
+
+Teddaaahdabahdacahdadahdaeahdafahdagah
+E``
+G`aa`@`
+A`b`bL`Fabab
+BTbaaa
+BTbaaaE
+Sifnfdg`befnfdgbgig`gofifnfdghbibSkgSgghfiflfefhbacibkgmgSbgefdgegbgnf`b`ckcSmgS
diff --git a/unit_tests/input/lsig_7.cbc b/unit_tests/input/lsig_7.cbc
new file mode 100644
index 0000000..6c23374
--- /dev/null
+++ b/unit_tests/input/lsig_7.cbc
@@ -0,0 +1,24 @@
+ClamBCafh`lc`mnkd|afefdfggifnf```c``a```|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``bbaaap`clamcoincidencejb:107
+Test.{A,B};Target:1;(((0|1|2)=42,2)|(3=10));EP+0:aabb;ffff;aaccee;f00d;dead
+Teddaaahdabahdacahdadahdaeahdafahdagahebaeebkdebcdebadaacb`bbadb`bdb`db`b
+Eaeaaaeb`e|amcgefdgfgifbgegcgnfafmfef``
+Gd```hai`@`b`aC``a`bkdBdeBefBcgBdgBnbBbd@`bkdBdeBefBcgBdgBnbBad@`bcdB`aD```h`bad at Ab`bad at Ab`bad at Ac`bad at Ac`
+A`b`bLaeb`b`aa`aa`b`b`b`b`Fajae
+Bb`b`gbAd`aaaagab`b`AadTaaaaaaad
+Baaabeab`b`AbdTaaababac
+Bb`bacabbaeAh`AfdTcab`b at d
+Bb`badabbaeAf`AfdTcab`b at d
+BTcab`b at dE
+Sobjb`bieofeg`bafbgef`bofnflfig`baflflfofggefdf`bdgof`bcgefdg`bdghfefcgef`bfgifbgegcgnfafmfefcg`bafcg`bffofegnfdf`bjbobSfeidbeeecendadmdedoe`ebeedfdidhehbbbdeefcgdgbbib
+feidbeeecendadmdedcehbbbadbblb`bbbbdbbibSdeadbegdeddehbacibSSceidgdndaddeeebeedceoeddedcdldoebdedgdidndSddedcdldadbeedoeceidgdndaddeeebeedhbmfafgfifcfibSddedcdldadbeedoeceidgdndaddeeebeedhbjgefbgofib
+ddedcdldadbeedoeceidgdndaddeeebeedhbcfhfefcfkfibSddedcdldadbeedoeceidgdndaddeeebeedhbffiffgefdgofdgefnfibSddedcdldadbeedoeceidgdndaddeeebeedhbcfhfefcfkfbcibSceidgdndaddeeebeedceoeddedcdldoeednddd
+SceidgdndaddeeebeedceoeddedfdoebdedgdidndSddedfdidndedoeceidgdndaddeeebeedhbmfafgfifcflb`bbbed`ekb`cjcafafbfbfbbibSddedfdidndedoeceidgdndaddeeebeedhbjgefbgoflb`bbbffffffffbbib
+ddedfdidndedoeceidgdndaddeeebeedhbffiffgefdgofdgefnflb`bbbafafcfcfefefbbibSddedfdidndedoeceidgdndaddeeebeedhbcfhfefcfkflb`bbbff`c`cdfbbibSddedfdidndedoeceidgdndaddeeebeedhbcfhfefcfkfbclb`bbbdfefafdfbbib
+ceidgdndaddeeebeedceoeedndddSSbfofoflf`blfofgfifcfaflfoedgbgifgfgfefbghbfgofifdfibSkgSegnfcgifgfnfefdf`bcgegmfoemfafdgcfhfefcg`bmc`bcfofegnfdgoemfafdgcfhfhbceifgfnfafdgegbgefcgnbmfafgfifcfibkb
+cfofegnfdgoemfafdgcfhfhbceifgfnfafdgegbgefcgnbjgefbgofib`bkb`bcfofegnfdgoemfafdgcfhfhbceifgfnfafdgegbgefcgnbffiffgefdgofdgefnfibkcSegnfcgifgfnfefdf`begnfifagegefoemfafdgcfhfefcg`bmc`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmfafgfifcfibkb
+mfafdgcfhfefcghbceifgfnfafdgegbgefcgnbjgefbgofibkb`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbffiffgefdgofdgefnfibkcSifff`bhbcgegmfoemfafdgcfhfefcg`bmcmc`bdcbc`bfbfb`begnfifagegefoemfafdgcfhfefcg`bmcmc`bbcib`bkg
+obob`bdehfef`bafbfoffgef`bcc`bcgifgfnfafdgegbgefcg`bhfaffgef`bmfafdgcfhfefdf`baf`bdgofdgaflf`bofff`bdcbc`bdgifmfefcglb`bafnfdf`bafdg`blfefafcgdgSobob`bbc`bofff`bdghfefmf`bhfaffgef`bmfafdgcfhfefdf
+bgefdgegbgnf`bdgbgegefkcSmgSobob`bidff`bdghfef`bcfhfefcfkf`bcgifgfnfafdgegbgef`bmfafdgcfhfefcg`bac`c`bdgifmfefcg`bggef`bcgdgiflflf`bhfaffgef`baf`bmfafdgcfhfSifff`bhbcfofegnfdgoemfafdgcfhfhbceifgfnfafdgegbgefcgnbcfhfefcfkfib`bmcmc`bac`cib
+bgefdgegbgnf`bdgbgegefkcSobob`bndof`bmfafdgcfhfSbgefdgegbgnf`bffaflfcgefkcSmgSSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfibSkgSegnfcgifgfnfefdf`bcfofegnfdg`bmc`bcfofegnfdgoemfafdgcfhfhbceifgfnfafdgegbgefcgnbcfhfefcfkfbcibkc
+ifff`bhbcfofegnfdg`bncmc`bbcibSobobi`ffofegnfdffeifbgegcghbcfofegnfdg`bmcmc`bbc`boc`bbbadbb`bjc`bbbbdbbibkcSifff`bhbcfofegnfdg`bmcmc`bbcibSffofegnfdffeifbgegcghbbbadbbibkc
+eflfcgefSffofegnfdffeifbgegcghbbbbdbbibkcSbgefdgegbgnf`b`ckcSmgS
diff --git a/unit_tests/input/matchwithread.cbc b/unit_tests/input/matchwithread.cbc
index 4a31e21..d809458 100644
--- a/unit_tests/input/matchwithread.cbc
+++ b/unit_tests/input/matchwithread.cbc
@@ -1,49 +1,49 @@
-ClamBCafhheb`ajkd|afefdfggifnf```ca`a```|alcflfafmfbfcfmb`cnb`ccc``becabp`clamcoincidencejb:1443
-BC.foomatchwithread.{ClamAV-Test-File-detected-via-bytecode};Target:1;(2&1&0);0:4d5a50000200000004000f00ffff0000;EOF-544:4d5a50000200000004000f00ffff0000;S0+0:4d5a50000200000004000f00ffff0000
-Tedebdgebcgebbgebageb`gebofebheebnfebmfeblfebffebefebdfebcfebieebbfeb`febadebcddaeahdakahaaaaaaaa`aabb`bb`baacb`bbadb`baacb`bb`bb`baadb`bbadbadb`bcafahbafahbafahbafcaab`bdb`db`bdbgaahdbccahdbfaahcakb`bb`bb`abgfbhfbifbjfb`bb`bb`bb`bcahb`bb`ab`ab`bb`bb`bb`ab`acboab`aahahb`bb`bb`bb`bb`bb`bb`bb`bb`bb`ab`ab`ab`ab`ab`ab`bb`bb`bb`bb`ab`ab`bb`bb`bb`bb`bb`bbjfcbnab`aahahb`bb`bb`bb`bb`bb`db`bb`bb`ab`ab`ab`ab`ab`ab`bb`bb`bb`bb`ab`ab`db`db`db`db`bb`bbjfdb`abkfcabb`bb`bdbeaahdbnbahdbkaahdbfbahdbibahdbcbahdaabaddbgbahdbdaah
-Eaoafagble|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``aoble|ak`gefoebgafggafdfdfbg``afbme|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``abbme|aebgefafdf``adbne|aecgefefkf``aebme|amcgefdgfgifbgegcgnfafmfef``
-Gdc``hbgb`@`bdgBbdBcdBnbBffBofBofBmfBafBdgBcfBhfBggBifBdgBhfBbgBefBafBdf@`bcgBcdBlfBafBmfBadBfeBmbBdeBefBcgBdgBmbBfdBifBlfBefBmbBdfBefBdgBefBcfBdgBefBdfBmbBfgBifBafBmbBbfBigBdgBefBcfBofBdfBef@`bbg at Ab`b`aAa`bagB`cBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`b`gBedBodBfdBmbBecBdcBdcBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`bofBceB`cBkbB`cBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`b`aCa`a`bheBedB`eBjcB`b@`bnfBcdBofBegBlfBdfBnfBgbBdgB`bBbgBefBafBdfB`bBecB`bBbfBigBdgBefBcgB`bB`dBedB`eAj@`bmfBndBofB`bBgbBmfBofBfgB`bBefBbfBhgBlbB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgBgbB`bBffBofBegBnfBdfB`bBafBdgB`bBefBnfBdgBbgBigB`gBofBifBnfBdgAj@`blfBfeBadB`bBofBffB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgB`bBifBcgB`b@`befBbeBfeBadB`bBofBffB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgB`bBifBcgB`b@`bdfBcdBafBnfBgbBdgB`bBlfBofBcfBafBdgBefB`bBdgBhfBefB`bB`gBhfBifBcgBifBcfBafBlfB`bBofBffBffBcgBefBdgB`bBofBffB`bBdgBhfBefB`bBcfBigB`gBhfBefBbgBdgBefBhgBdg@`befBcdBigB`gBhfBefBbgBdgBefBhgBdgB`bBcgBdgBafBbgBdgBcgB`bBafBdgB`b@`bcfBcdBafBnfBgbBdgB`bBbgBefBafBdfB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgAj@`bieBhdBedBldBldBodB`bBgeBodBbeBmd@`b`f@@@Aa at Ab`bad at Ab`bad at Ae`bad at Af`bad at Ag`bad at Ai`bad at Aj`bad at Ak`bad at Al`bad at Dc``h`bcdB`dDc``h`bcdAdDc``h`bad at Am`bad at An`bad at Ao`bad at B`a`bad at Baa`bad at D```h`bcdAhD```h`bcdAdD```h`bcd at D```h`
-A`b`bLbjeb`babheabieab`b`b`b`b`b`b`b`bad`b`b`aa`b`b`ah`aa`b`b`bad`b`b`aa`````b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`aa`b`b`b`b`b`b`b`b`bad`b`b`aa`b`b`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```b`b`aa`bad```b`b`b`b`Fbdfam
-Bb`bacgbBma`b`badabbafBga`@db`baeabaagacb`bafabbadac at dbadagdbbkdaa@db`bahabbabagAedaaaieab`bahAedTaaaiabaa
-Bb`bajabbafBha`@dTcab`b at d
-BahakgbagaaaleaahakBkkaTaaaladac
-Bb`bamabbafBia`@dTcab`b at d
-BbadandbbkdaaAadb`baogbanaab`alb``bbao`Taab`aaeaf
-Bb`b`obaoTbaaf
-Bb`bbcabb`bcab`bbdaabbafBja`@db`bbeaabaagbcab`bbfagbBla`b`bbgab`bcabfab`bbhaabbafBna`@db`bbiaabaagbgab`bbjaabaaobgaaabkaeab`bbjaHoooooooodTaabkaagah
-Bb`bblaabbafBoa`@dTcab`b at d
-Bb`bbmaabbafB`b`@db`bbnaabaagbjab`bboaabbadbja at dbadb`bdbbceab at db`bbababbabb`bAjdaabbbeab`bbabAjdTaabbbajai
-Bb`bbcbabbafBab`@dTcab`b at d
-Bahbdbgbb`bahbebm`bdbBjba``fbbebb`bbadbgbdbbceabAadahbhba`bebAaaahbibgbbgbahbjbm`bhbbib``fbbjbbgbbadblbdbbceabAbdahbmba`bjbAaaahbnbgbblbahbobm`bmbbnb``fbbobblbbadbacdbbceabAcdahbbca`bobAaaahbccgbbacahbdcm`bbcbcc``fbbdcbacbadbfcdbbceabAddahbgca`bdcAaaahbhcgbbfcahbicm`bgcbhc``fbbicbfcbadbkcdbbceabAedahblca`bicAaaahbmcgbbkcahbncm`blcbmc``fbbncbkcbadb`ddbbceabAfdahbada`bncAaaahbbdgbb`dahbcdm`badbbd``fbbcdb`dbadbeddbbceabAgdahbfda`bcdAaaahbgdgbbedahbhdm`bfdbgd``fbbhdbedbadbjddbbceabAhdahbkda`bhdAaaahbldgbbjdahbmdm`bkdbld``fbbmdbjdbadboddbbceabAidahb`ea`bmdAaaahbaegbbodahbbem`b`ebae``fbbbebodb`bbdekbb`bBbb`Ajdaabeeeab`bbde at dTaabeeakal
-BbadbfedbbceabAjd``fb at abfeb`bbheabbafb`b at db`bbieabbaeBca`@dTcab`b at d
+ClamBCafhne`lekkd|afefdfggifnf```ca`a```|alcflfafmfbfcfmb`cnbacac``bccaap`clamcoincidencejb:1419
+.{ClamAV-Test-File-detected-via-bytecode};Target:1;(0&2&1);0:4d5a50000200000004000f00ffff0000;EOF-544:4d5a50000200000004000f00ffff0000;S0+0:4d5a50000200000004000f00ffff0000
+Tedebbgebageb`gebofebnfebmfebgeeblfebkfebjfebdfebcfebbfebheebafeboeebadebcddaeahdakahaaaaaaaa`aabb`bb`baacb`bbadb`baacb`bb`bb`baadb`bbadbadb`bcafahb`fahb`fahb`fcaab`ddb`db`bdbccahdbfaahcamb`bb`bb`ab`abefbffb`bbgfbhfb`bb`bb`bb`bcahb`bb`ab`ab`bb`bb`bb`ab`acboab`aahahb`bb`bb`bb`bb`bb`bb`bb`bb`bb`ab`ab`ab`ab`ab`ab`bb`bb`bb`bb`ab`ab`bb`bb`bb`bb`bb`bbhfcbnab`aahahb`bb`bb`bb`bb`bb`db`bb`bb`ab`ab`ab`ab`ab`ab`bb`bb`bb`bb`ab`ab`db`db`db`db`bb`bbhfdb`abifcabb`bb`bdbeaahdbnbahdbkaahdbfbahdbibahdbcbahdaabaddbgbahdaaah
+Eaoafagbke|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``aobke|ak`gefoebgafggafdfdfbg``afble|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``abble|aebgefafdf``adbme|aecgefefkf``aeble|amcgefdgfgifbgegcgnfafmfef``
+Gdc``hbgb`@`bbg@`bagBcdBlfBafBmfBadBfeBmbBdeBefBcgBdgBmbBfdBifBlfBefBmbBdfBefBdgBefBcfBdgBefBdfBmbBfgBifBafBmbBbfBigBdgBefBcfBofBdfBef@`b`g at Ab`b`aAa`bofB`cBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`bnfBedBodBfdBmbBecBdcBdcBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`bmfBceB`cBkbB`cBjcBdcBdfBecBafBecB`cB`cB`cB`cBbcB`cB`cB`cB`cB`cB`cB`cBdcB`cB`cB`cBffB`cB`cBffBffBffBffB`cB`cB`cB`c@`b`aCa`a`bgeBedB`eBjcB`b@`blfBcdBofBegBlfBdfBnfBgbBdgB`bBbgBefBafBdfB`bBecB`bBbfBigBdgBefBcgB`bB`dBedB`eAj@`bkfBndBofB`bBgbBmfBofBfgB`bBefBbfBhgBlbB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgBgbB`bBffBofBegBnfBdfB`bBafBdgB`bBefBnfBdgBbgBigB`gBofBifBnfBdgAj@`bjfBfeBadB`bBofBffB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgB`bBifBcgB`b@`bcfBbeBfeBadB`bBofBffB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgB`bBifBcgB`b@`bbfBcdBafBnfBgbBdgB`bBlfBofBcfBafBdgBefB`bBdgBhfBefB`bB`gBhfBifBcgBifBcfBafBlfB`bBofBffBffBcgBefBdgB`bBofBffB`bBdgBhfBefB`bBcfBigB`gBhfBefBbgBdgBefBhgBdg@`bcfBcdBigB`gBhfBefBbgBdgBefBhgBdgB`bBcgBdgBafBbgBdgBcgB`bBafBdgB`b@`bofBcdBafBnfBgbBdgB`bBbgBefBafBdfB`bBacB`cB`bBbfBigBdgBefBcgB`bBofBffB`bBcfBigB`gBhfBefBbgBdgBefBhgBdgAj@`bheBhdBedBldBldBodB`bBgeBodBbeBmd@`boe@@@Aa at Ab`bad at Ab`bad at Ab`bad at Ae`bad at Af`bad at Ag`bad at Ai`bad at Aj`bad at Ak`bad at Al`bad at Dc``h`bcdB`dDc``h`bcdAdDc``h`bad at Am`bad at An`bad at Ao`bad at B`a`bad at Baa`bcdAhD```h`bcdAdD```h`bcd at D```h`
+A`b`bLbneb`bab`babgeabheab`b`b`b`b`b`b`b`bad`b`b`aa`b`b`ah`aa`b`b`bad`b`b`aa`````b`b`b`b`b`b`b`b`````b`b`b`b`b`b`b`b`b`b`aa`b`b`b`b`b`b`b`b`bad`b`b`aa`b`b`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```bad`ah`ah`ah```b`b`aa`bad```b`b`b`b`Fbifao
+Bb`badgbBna`b`baeabbafBha`@db`bafabaagadb`bagabbadad at dbadahdbbkdab@db`baiabbabahAedaaajeab`baiAedTaaajabaa
+Bb`bakabbafBia`@dTcab`b at d
+BahalgbahaaameaahalBkkaTaaamadac
+Bb`banabbafBja`@dTcab`b at d
+BbadaodbbkdabAadb`bb`agbaoaabaalb``bbb`aaaTaabaaaeaf
+Bb`baaobb`aTbaaf
+Bb`bbdabbaabdab`bbeaabbafBka`@db`bbfaabaagbdab`bbgagbBma```bbbga`Taabaaagah
+Bb`b`obbgaTbaah
+Bb`bbjabb`bjab`bbkab`bdabjab`bblaabbafBoa`@db`bbmaabaagbkab`bbnaabaaobkaaaboaeab`bbnaHoooooooodTaaboaaiaj
+Bb`bb`babbafB`b`@dTcab`b at d
+Bb`bbababbafBab`@db`bbbbabaagbnab`bbcbabbadbna at dbadbdbdbbbeac@db`bbebabbabbdbAjdaabfbeab`bbebAjdTaabfbalak
+Bb`bbgbabbafBbb`@dTcab`b at d
+Bahbhbgbbdbahbibm`bhbBjba``fbbibbdbbadbkbdbbbeacAadahblba`bibAaaahbmbgbbkbahbnbm`blbbmb``fbbnbbkbbadb`cdbbbeacAbdahbaca`bnbAaaahbbcgbb`cahbccm`bacbbc``fbbccb`cbadbecdbbbeacAcdahbfca`bccAaaahbgcgbbecahbhcm`bfcbgc``fbbhcbecbadbjcdbbbeacAddahbkca`bhcAaaahblcgbbjcahbmcm`bkcblc``fbbmcbjcbadbocdbbbeacAedahb`da`bmcAaaahbadgbbocahbbdm`b`dbad``fbbbdbocbadbdddbbbeacAfdahbeda`bbdAaaahbfdgbbddahbgdm`bedbfd``fbbgdbddbadbiddbbbeacAgdahbjda`bgdAaaahbkdgbbidahbldm`bjdbkd``fbbldbidbadbnddbbbeacAhdahboda`bldAaaahb`egbbndahbaem`bodb`e``fbbaebndbadbcedbbbeacAidahbdea`baeAaaahbeegbbceahbfem`bdebee``fbbfebceb`bbhekbbdbBcb`Ajdaabieeab`bbhe at dTaabieaman
+BbadbjedbbbeacAjd``fb at abjeb`bbleabbafbdb at db`bbmeabbaeBda`@dTcab`b at d
 BTcab`b at dE
-A`aaLahb`b`b`b`b`b`aa`aa`aa`aa`aa`Faiaa
-Bb`b`gbBfb`b`baagbBeb`b`babgbBdb`aaacfab`bab at daaadfab`baa at daaaefab`b`@daaafk`adaeaaagk`afacTcaaaagE
-Sfeidbeeecendadmdedoe`ebeedfdidhehb`bbbbdcdnbffofofmfafdgcfhfggifdghfbgefafdfbb`bibSfeidbeeecendadmdedcehbbbcdlfafmfadfembdeefcgdgmbfdiflfefmbdfefdgefcfdgefdfmbfgifafmbbfigdgefcfofdfefbbib
-deadbegdeddehbacibSobjb`bdehfifcg`bifcg`baflflf`bdfegmfmfig`bcgdgegffff`bjbobSceidgdndaddeeebeedceoeddedcdldoebdedgdidndSddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfbdodfdib
-ddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfedodfdibSddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfce`cibSceidgdndaddeeebeedceoeddedcdldoeedndddSceidgdndaddeeebeedceoeddedfdoebdedgdidnd
-ddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfbdodfdlb`b`b`b`b`b`b`bbb`cjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbibSddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfedodfdlb`bbbedodfdmbecdcdcjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbib
-ddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfce`clb`b`b`b`b`bbbce`ckb`cjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbibSceidgdndaddeeebeedceoeednddd
-`eedoeeend`eadcdkdedbeoeddedcdldadbeedSbfofoflf`blfofgfifcfaflfoedgbgifgfgfefbghbfgofifdfibSkgSbgefdgegbgnf`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfbdodfdib`bfbfb`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfedodfdib`bfbfb`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfce`cibkc
-mgSobjb`bddegmfmfig`bcgdgegffff`befnfdfcg`bhfefbgef`bjbobSifnfdg`befnfdgbgig`gofifnfdghbib`bkgSobob`bgdefdg`bdghfef`befnfdgbgig`b`gofifnfdg`bodfdfdceeddeSegifnfdgccbcoedg`bef`g`bmc`bgfefdgednfdgbgig`eofifnfdghbibkc
-dfefbfeggfhbbbed`ejc`bbbibkc`bdfefbfeggfhbef`gibkcSobob`bmdoffgef`bdgof`bdghfef`befnfdgbgig`b`gofifnfdg`bofffffcgefdg`bifnf`bdghfef`bffiflfefScgefefkfhbef`glb`bceededkdoeceeddeibkc
-objb`bhdefbgef`bggef`blfofofkf`bffofbg`bmfoffg`befbfhglb`bfgaflfegefSdehfef`bdfifcgafcgcgefmfbflfefbg`bifcg`bhfofggeffgefbg`bnfofdg`bigefdg`bifnfdgefgfbgafdgefdf`bifnf`bdghfef`bbfcf`bcgof`bffofbg`bnfofgg`bggef`bcfhfefcfkf
+Sfeidbeeecendadmdedoe`ebeedfdidhehbbbbbibSfeidbeeecendadmdedcehbbbcdlfafmfadfembdeefcgdgmbfdiflfefmbdfefdgefcfdgefdfmbfgifafmbbfigdgefcfofdfefbbibSdeadbegdeddehbacib
+Sobjb`bdehfifcg`bifcg`baflflf`bdfegmfmfig`bcgdgegffff`bjbobSceidgdndaddeeebeedceoeddedcdldoebdedgdidndSddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfbdodfdibSddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfedodfdib
+ddedcdldadbeedoeceidgdndaddeeebeedhbmdjeffbgofmfce`cibSceidgdndaddeeebeedceoeddedcdldoeedndddSSceidgdndaddeeebeedceoeddedfdoebdedgdidndSddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfbdodfdlb`b`b`b`b`b`b`bbb`cjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbib
+ddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfedodfdlb`bbbedodfdmbecdcdcjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbibSddedfdidndedoeceidgdndaddeeebeedhbmdjeffbgofmfce`clb`b`b`b`b`bbbce`ckb`cjcdcdfecafec`c`c`c`cbc`c`c`c`c`c`c`cdc`c`c`cff`c`cffffffff`c`c`c`cbbib
+ceidgdndaddeeebeedceoeedndddSS`eedoeeend`eadcdkdedbeoeddedcdldadbeedSSbfofoflf`blfofgfifcfaflfoedgbgifgfgfefbghbfgofifdfibSkgSbgefdgegbgnf`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfbdodfdib`bfbfb`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfedodfdib`bfbfb`bmfafdgcfhfefcghbceifgfnfafdgegbgefcgnbmdjeffbgofmfce`cibkc
+mgSobjb`bddegmfmfig`bcgdgegffff`befnfdfcg`bhfefbgef`bjbobSSifnfdg`befnfdgbgig`gofifnfdghbib`bkgSobob`bgdefdg`bdghfef`befnfdgbgig`b`gofifnfdg`bodfdfdceeddeSegifnfdgccbcoedg`bef`g`bmc`bgfefdgednfdgbgig`eofifnfdghbibkc
+dfefbfeggfhbbbed`ejc`bbbibkc`bdfefbfeggfhbef`gibkcSSobob`bmdoffgef`bdgof`bdghfef`befnfdgbgig`b`gofifnfdg`bofffffcgefdg`bifnf`bdghfef`bffiflfefScgefefkfhbef`glb`bceededkdoeceeddeibkc
+Sobjb`bhdefbgef`bggef`blfofofkf`bffofbg`bmfoffg`befbfhglb`bfgaflfegefSdehfef`bdfifcgafcgcgefmfbflfefbg`bifcg`bhfofggeffgefbg`bnfofdg`bigefdg`bifnfdgefgfbgafdgefdf`bifnf`bdghfef`bbfcf`bcgof`bffofbg`bnfofgg`bggef`bcfhfefcfkf
 mfafnfegaflflfig`bifff`bifdggbcg`baf`bmfoffgnb`bidnf`bhfefhg`bifdg`bcghfofeglfdf`bbfef`bbfbfccccbcbcacac`c`c`bffofbg`bmfoffg`befbfhglb`b`c`cacacbcbccccc`bSdghfafdg`bifcg`bec`bbfigdgefcg`boffgefbgaflflfnb
 jbobSobob`bmdafkfef`bbgofofmf`bffofbg`bdghfef`bec`bbfigdgefcg`bdgof`bbfef`bbgefafdfSegifnfdghcoedg`bffifbgcgdgoeof`gkeecmekcSobob`bbeefafdf`bec`bbfigdgefcgSifffhbbgefafdfhbffifbgcgdgoeof`glb`becibabmcecib`bkg
-dfefbfeggfhbbbcdofeglfdfnfgbdg`bbgefafdf`bec`bbfigdgefcg`b`ded`elenfbbibkcSbgefdgegbgnf`b`ckcSmgSobob`bcdhfefcfkf`bifff`bdghfef`bffifbgcgdg`bbfigdgef`bhbafkfaf`bffifbgcgdgoeof`gke`cmeib`bifcg`bbfbf
+dfefbfeggfhbbbcdofeglfdfnfgbdg`bbgefafdf`bec`bbfigdgefcg`b`ded`elenfbbibkcSbgefdgegbgnf`b`ckcSmgSSobob`bcdhfefcfkf`bifff`bdghfef`bffifbgcgdg`bbfigdgef`bhbafkfaf`bffifbgcgdgoeof`gke`cmeib`bifcg`bbfbf
 ifffhbffifbgcgdgoeof`gke`cme`babmc`b`chgbfbfib`bkgSdfefbfeggfhbbbndof`bgbmfoffg`befbfhglb`bcfig`ghfefbgdgefhgdggb`bffofegnfdf`bafdg`befnfdgbgig`gofifnfdglenfbbibkc
-bgefdgegbgnf`b`ckcSmgSobob`bdeafkfef`bdghfef`bafbggfegmfefnfdg`bofff`bmfoffg`befbfhglb`bnbnbnb`bgghfifcfhf`bifcg`bdghfef`bfead`bofff`bdghfef`bcfig`ghfefbgdgefhgdg
+bgefdgegbgnf`b`ckcSmgSSobob`bdeafkfef`bdghfef`bafbggfegmfefnfdg`bofff`bmfoffg`befbfhglb`bnbnbnb`bgghfifcfhf`bifcg`bdghfef`bfead`bofff`bdghfef`bcfig`ghfefbgdgefhgdg
 egifnfdgccbcoedg`bfgafoeofffoecfig`ghfefbgdgefhgdg`bmc`bcflfifoebgefafdfifnfdgccbchbhbegifnfdgccbcoedg`bjbibhbffifbgcgdgoeof`gkbacibibkcSdfefbfeggfhbbbfead`bofff`bcfig`ghfefbgdgefhgdg`bifcg`bbbibkcdfefbfeggfhbfgafoeofffoecfig`ghfefbgdgefhgdgibkc
-obob`bmdafkfef`bdghfef`bfead`bafnf`bbefead`bmb`bdghfafdg`bifcg`bcgegbfdgbgafcfdg`bdghfef`bifmfafgfefbfafcgef`bffbgofmf`bifdgSegifnfdgccbcoedg`bbgfgafoeofffoecfig`ghfefbgdgefhgdg`bmc`bfgafoeofffoecfig`ghfefbgdgefhgdg`bmb`b`boeoecflfafmfbfcfoe`gefdfafdgafnbof`gdgccbcnbidmfafgfefbdafcgefkc
-dfefbfeggfhbbbbefead`bofff`bcfig`ghfefbgdgefhgdg`bifcg`bbbibkcdfefbfeggfhbbgfgafoeofffoecfig`ghfefbgdgefhgdgibkcSobob`bdeegbgnf`bdghfef`bbefead`bofff`bdghfef`bcfig`ghfefbgdgefhgdg`bifnfdgof`baf`bffiflfef`bhbbgafggib`bofffffcgefdg
-egifnfdgccbcoedg`bofffffcgefdgoeofffoecfig`ghfefbgdgefhgdg`bmc`b`gefoebgafggafdfdfbghbbgfgafoeofffoecfig`ghfefbgdgefhgdgibkcSobob`bidff`bdghfef`bofffffcgefdg`bifcg`bbfafdflb`bbfafiflf`bofegdg
-ifffhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdg`bmcmc`b`eedoeidndfeadldidddoebefeadib`bkgSdfefbfeggfhbbbcdafnfgbdg`blfofcfafdgef`bdghfef`b`ghfifcgifcfaflf`bofffffcgefdg`bofff`bdghfef`bcfig`ghfefbgdgefhgdgbbibkc
-bgefdgegbgnf`b`ckcSmgSdfefbfeggfhbbbcdig`ghfefbgdgefhgdg`bcgdgafbgdgcg`bafdg`bbbibkcdfefbfeggfhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdgibkcSobob`bmdoffgef`bdgof`bdghfef`bcfig`ghfefbgdgefhgdg`bifnf`bdghfef`bffiflfef
-cgefefkfhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdglb`bceededkdoeceeddeibkcSobob`bmdafkfef`bbgofofmf`bffofbg`bdghfef`bcfig`ghfefbgdgefhgdg`bdgof`bbfef`bbgefafdf`bmb`bac`c`bbfigdgefcg`bdghfafdg`bifcg`bbbhdedldldod`bgeodbemdbb`b`glfegcg`bofnfef`bbfigdgef`bffofbg`bdghfef`bdgefbgmfifnfafdgofbg
-egifnfdghcoedg`bcfig`ghfefbgdgefhgdgkeacacmekcSobob`bbeefafdf`bdghfef`bcfig`ghfefbgdgefhgdg`bffbgofmf`bffiflfef`bifnfdgof`bbbcfig`ghfefbgdgefhgdgbbSifffhbbgefafdfhbcfig`ghfefbgdgefhgdglb`bac`cibabmcac`cib`bkg
-dfefbfeggfhbbbcdafnfgbdg`bbgefafdf`bcfig`ghfefbgdgefhgdglenfbbibkcSbgefdgegbgnf`b`ckcSmgSobob`bdehfef`bbbdfefcfbgig`gdgifofnfbb`blfofof`g`bmb`bdgegbgnfcg`bdghfef`bcfig`ghfefbgdgefhgdg`bifnfdgof`b`glfafigifnfdgefhgdg
+Sobob`bmdafkfef`bdghfef`bfead`bafnf`bbefead`bmb`bdghfafdg`bifcg`bcgegbfdgbgafcfdg`bdghfef`bifmfafgfefbfafcgef`bffbgofmf`bifdgSegifnfdgccbcoedg`bbgfgafoeofffoecfig`ghfefbgdgefhgdg`bmc`bfgafoeofffoecfig`ghfefbgdgefhgdg`bmb
+lfefccbcoedgofoehfofcgdghboeoecflfafmfbfcfoe`gefdfafdgafnbof`gdgccbcnbidmfafgfefbdafcgefibkcSdfefbfeggfhbbbbefead`bofff`bcfig`ghfefbgdgefhgdg`bifcg`bbbibkcdfefbfeggfhbbgfgafoeofffoecfig`ghfefbgdgefhgdgibkc
+Sobob`bdeegbgnf`bdghfef`bbefead`bofff`bdghfef`bcfig`ghfefbgdgefhgdg`bifnfdgof`baf`bffiflfef`bhbbgafggib`bofffffcgefdgSegifnfdgccbcoedg`bofffffcgefdgoeofffoecfig`ghfefbgdgefhgdg`bmc`b`gefoebgafggafdfdfbghbbgfgafoeofffoecfig`ghfefbgdgefhgdgibkc
+Sobob`bidff`bdghfef`bofffffcgefdg`bifcg`bbfafdflb`bbfafiflf`bofegdgSifffhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdg`bmcmc`b`eedoeidndfeadldidddoebefeadib`bkgSdfefbfeggfhbbbcdafnfgbdg`blfofcfafdgef`bdghfef`b`ghfifcgifcfaflf`bofffffcgefdg`bofff`bdghfef`bcfig`ghfefbgdgefhgdgbbibkc
+bgefdgegbgnf`b`ckcSmgSdfefbfeggfhbbbcdig`ghfefbgdgefhgdg`bcgdgafbgdgcg`bafdg`bbbibkcdfefbfeggfhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdgibkcSSobob`bmdoffgef`bdgof`bdghfef`bcfig`ghfefbgdgefhgdg`bifnf`bdghfef`bffiflfef
+cgefefkfhbofffffcgefdgoeofffoecfig`ghfefbgdgefhgdglb`bceededkdoeceeddeibkcSSobob`bmdafkfef`bbgofofmf`bffofbg`bdghfef`bcfig`ghfefbgdgefhgdg`bdgof`bbfef`bbgefafdf`bmb`bac`c`bbfigdgefcg`bdghfafdg`bifcg`bbbhdedldldod`bgeodbemdbb`b`glfegcg`bofnfef`bbfigdgef`bffofbg`bdghfef`bdgefbgmfifnfafdgofbg
+egifnfdghcoedg`bcfig`ghfefbgdgefhgdgkeacacmekcSSobob`bbeefafdf`bdghfef`bcfig`ghfefbgdgefhgdg`bffbgofmf`bffiflfef`bifnfdgof`bbbcfig`ghfefbgdgefhgdgbbSifffhbbgefafdfhbcfig`ghfefbgdgefhgdglb`bac`cibabmcac`cib`bkg
+dfefbfeggfhbbbcdafnfgbdg`bbgefafdf`bac`c`bbfigdgefcg`bofff`bcfig`ghfefbgdgefhgdglenfbbibkcSbgefdgegbgnf`b`ckcSmgSobob`bdehfef`bbbdfefcfbgig`gdgifofnfbb`blfofof`g`bmb`bdgegbgnfcg`bdghfef`bcfig`ghfefbgdgefhgdg`bifnfdgof`b`glfafigifnfdgefhgdg
 egifnfdghcoedg`bcfegbgbgefnfdgoe`gofcgifdgifofnflb`bkfefig`bmc`b`chgbcickcSffofbghbcfegbgbgefnfdgoe`gofcgifdgifofnfmc`ckc`bcfegbgbgefnfdgoe`gofcgifdgifofnflcac`ckc`bcfegbgbgefnfdgoe`gofcgifdgifofnfkbkbib`bkg
-kfefigkbkbkcScfig`ghfefbgdgefhgdgkecfegbgbgefnfdgoe`gofcgifdgifofnfme`bnemc`bkfefigkcSkfefig`bmc`bcfig`ghfefbgdgefhgdgkecfegbgbgefnfdgoe`gofcgifdgifofnfmekcSmgSobob`bcdofmf`gafbgef`bdghfef`bhbnfofggib`b`glfafifnfdgefhgdg`bggifdghf`bdghfef`bbgefffefbgefnfcfef`bhbbbhdedldldod`bgeodbemdbbib
+egifnfdghcoedg`bifnf`bmc`bcfig`ghfefbgdgefhgdgkecfegbgbgefnfdgoe`gofcgifdgifofnfmekcSkfefigkbkbkcScfig`ghfefbgdgefhgdgkecfegbgbgefnfdgoe`gofcgifdgifofnfme`bnemc`bkfefigkc
+kfefig`bmc`bcfig`ghfefbgdgefhgdgkecfegbgbgefnfdgoe`gofcgifdgifofnfmekcSmgSSobob`bcdofmf`gafbgef`bdghfef`bhbnfofggib`b`glfafifnfdgefhgdg`bggifdghf`bdghfef`bbgefffefbgefnfcfef`bhbbbhdedldldod`bgeodbemdbbib
 ifffhbabmfefmfcfmf`ghbcfig`ghfefbgdgefhgdglb`bbbhdedldldod`bgeodbemdbblb`bac`cibib`bkgScfig`ghfefbgdgefhgdgkeac`cme`bmc`b`ckc`bobob`baddfdf`baf`bcgdgbgifnfgf`bdgefbgmfifnfafdgofbg
 dfefbfeggfhbhbcfhfafbg`bjbibcfig`ghfefbgdgefhgdgibkc`bobob`b`ebgifnfdg`bifdglb`bjfegcgdg`bffofbg`bffegnfSffofegnfdffeifbgegcghbbbcdlfafmfadfembdeefcgdgmbfdiflfefmbdfefdgefcfdgefdfmbfgifafmbbfigdgefcfofdfefbbibkc`bobob`bceefdg`bdghfef`bfgifbgegcg`bnfafmfefab
-mgSbgefdgegbgnf`b`ckcSmgSS
\ No newline at end of file
+mgSbgefdgegbgnf`b`ckcSmgSSSS
\ No newline at end of file
diff --git a/unit_tests/input/retmagic_7.cbc b/unit_tests/input/retmagic_7.cbc
new file mode 100644
index 0000000..b42f862
--- /dev/null
+++ b/unit_tests/input/retmagic_7.cbc
@@ -0,0 +1,8 @@
+ClamBCafhalc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``alaap`clamcoincidencejb:40
+
+Teddaaahdabahdacahdadahdaeahdafahdagah
+E``
+G`aa`@`
+A`b`bL`Faaaa
+BTcab`bHm``odcbadE
+Sifnfdg`befnfdgbgig`gofifnfdghbfgofifdfibSkgSbgefdgegbgnf`b`chgacbcccdcff`c`cdfkcSmgS
diff --git a/unit_tests/input/testadt_7.cbc b/unit_tests/input/testadt_7.cbc
new file mode 100644
index 0000000..527b527
--- /dev/null
+++ b/unit_tests/input/testadt_7.cbc
@@ -0,0 +1,120 @@
+ClamBCafhalc`mnkd|afefdfggifnf```````|biacflfafmfbfcfmb`cnbacacmbacacicmbgficicefafefdf`c``bjaaap`clamcoincidencejb:554
+
+Teddaaahdabahdacahdadahdaeahdafahdagahebieebidebgdebfdebhdebadaaa`aaab`baabb`bb`baacb`bb`bb`baacbadb`bb`baadb`bbadb`bb`baadb`bbadbadb`bdaiah
+Eb`danbhabce|alhfafcghfcgefdgoenfefgg``bjbbde|bbabfigdgefcfofdfefoebgdgoeefbgbgofbg``blabde|amhfafcghfcgefdgoedfofnfef``b`dbde|aimfaf`goedfofnfef``bncbde|baamfaf`goegfefdgfgaflfegefcgifjgef``biabee|alhfafcghfcgefdgoeafdfdf``bkabee|baahfafcghfcgefdgoecfofnfdgafifnfcg``bjabee|aohfafcghfcgefdgoebgefmfoffgef``bocbfe|ammfaf`goegfefdgfgaflfegef``bicbee|ahmfaf`goenfefgg``bjcbge|akmfaf`goeafdfdfkfefig``bmcbge|aimfaf`goeffifnfdf``blcbge|akmfaf`goebgefmfoffgef``bkcbge|ammfaf`goecgefdgfgaflfegef``
+G`bca`@`bieBacBbcBccBdcBecBfcBgcBhc@`bidBacBbcBccBdc@`bgdBafBbf@`bfdBaf@`bieBafBbfBcfBdfBacBbcBccBdc@`bfdBbf@`bhdBafBbfBcf@`bidBbfBcfBdfBef@`bidBafBbfBcfBdf@`bad at Aa`bad at Ab`bad at Ac`bad at Ad`bad at Ae`bad at Af`bad at Ag`bad at Ah`bad at Ai`
+A`b`bLbhib`bab`bab`bab`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`bad`aa`ah`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`bad`aa`aa`b`b`aa`bad`aa`bad`aa`bad`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`b`b`Fcjbabkd
+Bb`bacab`bhaaaadeab`bacHoooooooodb`b`bbDamjkd`Taaadbidaa
+Bb`baeabbbiaacC``odaaafeab`bae at db`b`bbDbmjkd`Taaafabbid
+Bb`bagabbbkaacC``odaaaheab`bag at db`b`bbDcmjkd`Taaahbidac
+Bb`baiabbbkaacC``kdaaajeab`bai at db`b`bbDdmjkd`Taaajadbid
+Bb`bakabbbiaacDm``odaaaleab`bak at db`b`bbDbmjkd`Taaalaebid
+Bb`bamabbbkaacDm``odaaaneab`bam at db`b`bbDcmjkd`Taaanbidaf
+Bb`baoabbbkaacDm``kdaab`aeab`bao at db`b`bbDdmjkd`Taab`aagbid
+Bb`bbaaabbbjaacC``odaabbaeab`bbaa at db`b`bbDemjkd`Taabbaahbid
+Bb`bbcaabbbkaacC``odaabdaeab`bbca at db`b`bbDfmjkd`Taabdaaibid
+Bb`bbeaabbbkaacDm``odaabfaeab`bbea at db`b`bb at dabb`b`bbDfmjkd`Taabfabidaj
+Bb`bbgabbabbgab`bbhaabbbiaacbgab`bbiaa`bgaAadaabjaeab`bbiaD```adb`b`bbbiaabTaabjaakaj
+Bb`bbkaabbbkaacBjbdaablaeab`bbka at db`b`bbDgmjkd`Taablabidal
+Bb`bbmaabablaacaabnaeab`bbma at db`b`bb at daab`b`bbDhmjkd`Taabnaambid
+Bb`bboabbaaboaaab`biab`bboaAddb`bbabab`bhaTaab`banb`a
+Baabbbeab`bbabHoooooooodb`b`bbDimjkd`Taabbbbidao
+Bb`bbcbabablababb`baaa`boaAadb`b`bbaaaaTbaam
+Bb`bbdbabbbiababDm``odaabebeab`bbdb at db`b`bbE`amjkd`Taabebbaabid
+Bb`bbfbabbbiababDm``odaabgbeab`bbfb at db`b`bbE`amjkd`Taabgbbbabid
+Bb`bbhbabbbiaHoooooooodC``odaabibeab`bbhbHoooooooodb`b`bbEaamjkd`Taabibbcabid
+Bb`bbjbabbbjaHoooooooodC``odaabkbeab`bbjbHoooooooodb`b`bbEbamjkd`Taabkbbdabid
+Bb`bblbabbbkaHoooooooodC``odaabmbeab`bblbHoooooooodb`b`bbEcamjkd`Taabmbbeabid
+Bb`bbnbabablaHoooooooodaabobeab`bbnbHoooooooodb`b`bbEdamjkd`Taabobbfabid
+Bb`bb`cabbbiaChncdC``odaabaceab`bb`cHoooooooodb`b`bbEeamjkd`Taabacbgabid
+Bb`bbbcabbbjaChncdC``odaabcceab`bbbcHoooooooodb`b`bbEfamjkd`Taabccbhabid
+Bb`bbdcabbbkaChncdC``odaabeceab`bbdcHoooooooodb`b`bbEgamjkd`Taabecbiabid
+Bb`bbfcabablaChncdaabgceab`bbfcHoooooooodb`b`bbEhamjkd`Taabgcbjabid
+Bb`bbhcabbbic at d@daabickab`bbhcHoooooooodb`b`bbEiamjkd`Taabicbidbka
+Bb`bbjcabbbicAhdAadaabkceab`bbjcHoooooooodb`b`bbE`bmjkd`Taabkcbidbla
+Bb`bblcabcbjcAj`Ahdbjcaabmceab`bblcAadb`b`bbEabmjkd`Taabmcbmabid
+Bb`bbncabcbjcAj`Ahdbjcaaboceab`bbnc at db`b`bbEbbmjkd`Taabocbnabid
+Bb`bb`dabcbjcAk`Addbjcaabadkab`bb`dHoooooooodb`b`bbEcbmjkd`Taabadbidboa
+Bb`bbbdabcbkcAl`Abdbjcaabcdkab`bbbdHoooooooodb`b`bbEdbmjkd`Taabcdbidb`b
+Bb`bbddabcbkcAm`Aadbjcaabedeab`bbdd at db`b`bbEebmjkd`Taabedbabbid
+Bb`bbfdabcblcAj`Ahdbjcaabgdeab`bbfdAadb`b`bbEfbmjkd`Taabgdbbbbid
+Bb`bbhdabcblcAj`Ahdbjcaabideab`bbhd at db`b`bbEgbmjkd`Taabidbcbbid
+Bb`bbjdabcblcAk`Addbjcaabkdkab`bbjdHoooooooodb`b`bbEhbmjkd`Taabkdbidbdb
+Bb`bbldabcbmcAj`Ahdbjcaabmdeab`bbld at db`b`bbEibmjkd`Taabmdbebbid
+Bb`bbndabcbjcAn`Ahdbjcaabodeab`bbndAadb`b`bbE`cmjkd`Taabodbfbbid
+Bb`bb`eabcbkcAo`Aadbjcaabaeeab`bb`e at db`b`bbEacmjkd`Taabaebgbbid
+Bb`bbbeabcbmcAn`Ahdbjcaabceeab`bbbeAadb`b`bbEbcmjkd`Taabcebhbbid
+Bb`bbdeabcbmcAk`Addbjcaabeekab`bbdeHoooooooodb`b`bbEbcmjkd`Taabeebidbib
+Bb`bbfeabcbmcAn`Ahdbjcaabgeeab`bbfeAadb`b`bbEccmjkd`Taabgebjbbid
+Bb`bbheababncbjcaabieeab`bbheAadb`b`bbEdcmjkd`Taabiebkbbid
+BbadbjeabbbocbjcAadaabkeeabadbje@`b`b`bbEecmjkd`Taabkebidblb
+BahblegbbjeaabmeeaahbleBbfab`b`bbEecmjkd`Taabmebmbbid
+Bb`bbneabab`dbjcaaboeeab`bbne at db`b`bbEfcmjkd`Taaboebnbbid
+Bb`bb`fabbbicAhd at daabafeab`bb`fHoooooooodb`b`bbEgcmjkd`Taabafbidbob
+Bb`bbbfabcbjcAj`Ahdb`faabcfeab`bbbfAadb`b`bbEhcmjkd`Taabcfb`cbid
+Bb`bbdfabcbjcAj`Ahdb`faabefeab`bbdf at db`b`bbEicmjkd`Taabefbacbid
+Bb`bbffabcbjcAk`Addb`faabgfkab`bbffHoooooooodb`b`bbE`dmjkd`Taabgfbidbbc
+Bb`bbhfabcbkcAl`Abdb`faabifeab`bbhf at db`b`bbEadmjkd`Taabifbccbid
+Bb`bbjfabcbkcAm`Aadb`faabkfeab`bbjf at db`b`bbEbdmjkd`Taabkfbdcbid
+Bb`bblfabcbkcB`a`Aadb`faabmfeab`bblf at db`b`bbEcdmjkd`Taabmfbecbid
+Bb`bbnfabcblcAj`Ahdb`faabofeab`bbnfAadb`b`bbEddmjkd`Taabofbfcbid
+Bb`bb`gabcblcAj`Ahdb`faabageab`bb`g at db`b`bbEedmjkd`Taabagbgcbid
+Bb`bbbgabcblcAk`Addb`faabcgkab`bbbgHoooooooodb`b`bbEfdmjkd`Taabcgbidbhc
+Bb`bbdgabcbmcAj`Ahdb`faabegeab`bbdg at db`b`bbEgdmjkd`Taabegbicbid
+Bb`bbfgabcbjcAn`Ahdb`faabggeab`bbfgAadb`b`bbEhdmjkd`Taabggbjcbid
+Bb`bbhgabcbkcBaa`Addb`faabigeab`bbhg at db`b`bbEidmjkd`Taabigbkcbid
+Bb`bbjgabcbmcAn`Ahdb`faabkgeab`bbjgAadb`b`bbE`emjkd`Taabkgblcbid
+Bb`bblgabcbmcAk`Addb`faabmgkab`bblgHoooooooodb`b`bbEaemjkd`Taabmgbidbmc
+Bb`bbngabcbmcAn`Ahdb`faabogeab`bbngAadb`b`bbEbemjkd`Taabogbncbid
+Bb`bb`hababncb`faabaheab`bb`hAddb`b`bbEcemjkd`Taabahbocbid
+Bbadbbhabbbocb`fb`haabcheabadbbh@`b`b`bbEdemjkd`Taabchbidb`d
+Baabdhgab`bb`hAcdTaabdhbadbjd
+Bb`bbehkbbbhBaa`Addaabfheab`bbeh at db`b`bbEdemjkd`Taabfhbbdbid
+Bbadbghabbbocb`fAcdaabhheabadbgh@`b`b`bbEeemjkd`Taabhhbcdbid
+Bbadbihabbbocb`fAedaabjheabadbih@`b`b`bbEeemjkd`Taabjhbddbid
+BbadbkhabbbocHoooooooodAddaablheabadbkh@`b`b`bbEfemjkd`Taablhbedbid
+Bb`bbmhabcbjcBba`AddHoooooooodaabnhkab`bbmhHoooooooodb`b`bbEgemjkd`Taabnhbidbfd
+Bb`bbohabcblcBba`AddHoooooooodaab`ikab`bbohHoooooooodb`b`bbEhemjkd`Taab`ibidbgd
+Bb`bbaiabcbmcBba`AddHoooooooodaabbikab`bbaiHoooooooodb`b`bbEiemjkd`Taabbibidbhd
+Bb`bbciabcbkcBba`AddHoooooooodaabdikab`bbciHoooooooodb`bbeioabdiE`fmjkdDm``odTcab`bbei
+Bb`bbfibb`bfiTcab`bbfi
+Bb`bbgiababjbDc`cid``mbTmbE
+Sobjb`bdgefcgdg`bdfafdgaf`bcgdgbgegcfdgegbgefcg`bjbobSifnfdg`befnfdgbgig`gofifnfdghbfgofifdfibSkgSobjb`bdgefcgdg`bcgefdg`bad`eid`bjbobSegnfcgifgfnfefdf`bifkcSifnfdg`bmfkc
+ifnfdg`bhf`bmc`bhfafcghfcgefdgoenfefgghbibkcSifnfdg`bcgkcSegifnfdghcoedg`bjbhgkcSSifff`bhbhf`bmcmc`bmbacibSbgefdgegbgnf`b`chgbfafdfackcSifff`bhbhfafcghfcgefdgoeafdfdfhbhflb`b`chgff`c`cibib
+bgefdgegbgnf`b`chgbfafdfbckcSifff`bhbabhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgff`c`cibibSbgefdgegbgnf`b`chgbfafdfcckcSifff`bhbhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgbf`c`cibib
+bgefdgegbgnf`b`chgbfafdfdckcSifff`bhbhfafcghfcgefdgoeafdfdfhbhflb`b`chgff`c`cdfibibSbgefdgegbgnf`b`chgbfafdfbckcSifff`bhbabhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgff`c`cdfibib
+bgefdgegbgnf`b`chgbfafdfcckcSifff`bhbhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgbf`c`cdfibibSbgefdgegbgnf`b`chgbfafdfdckcSifff`bhbhfafcghfcgefdgoebgefmfoffgefhbhflb`b`chgff`c`cibib
+bgefdgegbgnf`b`chgbfafdfeckcSifff`bhbhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgff`c`cibibSbgefdgegbgnf`b`chgbfafdffckcSifff`bhbabhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`b`chgff`c`cdfibib
+bgefdgegbgnf`b`chgbfafdffckcSffofbg`bhbifmc`ckciflcdc`cicfckcifkbkbibShfafcghfcgefdgoeafdfdfhbhflb`bifibkcSifff`bhbabhfafcghfcgefdgoecfofnfdgafifnfcghbhflb`bdcbcibib
+bgefdgegbgnf`b`chgbfafdfgckcSifff`bhbhfafcghfcgefdgoedfofnfefhbhfibibSbgefdgegbgnf`b`chgbfafdfhckcSffofbg`bhbifmc`ckciflcdckcifkbkbib`bkgShf`bmc`bhfafcghfcgefdgoenfefgghbibkc
+ifff`bhbhf`bmcmc`bmbacibSbgefdgegbgnf`b`chgbfafdfickcShfafcghfcgefdgoedfofnfefhbhfibkcSmgShf`bmc`bhfafcghfcgefdgoenfefgghbibkcSifff`bhbhfafcghfcgefdgoeafdfdfhbhflb`b`chgff`c`cdfibib
+bgefdgegbgnf`b`chgbfafdfac`ckcSifff`bhbhfafcghfcgefdgoeafdfdfhbhflb`b`chgff`c`cdfibibSbgefdgegbgnf`b`chgbfafdfac`ckcSobjb`bdfofnfgbdg`bcfaflflf`bdfofnfeflb`blfefdg`bbfigdgefcfofdfef`befnfgfifnfef`bdfof`bifdg`bafegdgofmfafdgifcfaflflfig`bjbob
+ifff`bhbhfafcghfcgefdgoeafdfdfhbmbaclb`b`chgff`c`cib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfacackcSifff`bhbhfafcghfcgefdgoebgefmfoffgefhbmbaclb`b`chgff`c`cib`babmc`bmbacib
+bgefdgegbgnf`b`chgbfafdfacbckcSifff`bhbhfafcghfcgefdgoecfofnfdgafifnfcghbmbaclb`b`chgff`c`cib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfaccckcSifff`bhbhfafcghfcgefdgoedfofnfefhbmbacib`babmc`bmbacib
+bgefdgegbgnf`b`chgbfafdfacdckcSifff`bhbhfafcghfcgefdgoeafdfdfhbac`c`c`clb`b`chgff`c`cib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfaceckcSifff`bhbhfafcghfcgefdgoebgefmfoffgefhbac`c`c`clb`b`chgff`c`cib`babmc`bmbacib
+bgefdgegbgnf`b`chgbfafdfacfckcSifff`bhbhfafcghfcgefdgoecfofnfdgafifnfcghbac`c`c`clb`b`chgff`c`cib`babmc`bmbacibSbgefdgegbgnf`b`chgbfafdfacgckcSifff`bhbhfafcghfcgefdgoedfofnfefhbac`c`c`cib`babmc`bmbacib
+bgefdgegbgnf`b`chgbfafdfachckcSSobjb`bdgefcgdg`bmfaf`g`bad`eid`bjbobSifff`bhbmfaf`goenfefgghb`clb`b`cib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdfacickcSmf`bmc`bmfaf`goenfefgghbhclb`bacibkc
+ifff`bhbmf`bmcmc`bmbacibSbgefdgegbgnf`b`chgbfafdfbc`ckcSifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`bacibSbgefdgegbgnf`b`chgbfafdfbcackc
+ifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfbcbckcSifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfbccckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbfbblb`bbclb`bmfib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdfbcdckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbblb`baclb`bmfib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfbceckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`bacibSbgefdgegbgnf`b`chgbfafdfbcfckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfbcgckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdfbchckcSifff`bhbmfaf`goeffifnfdfhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfbcickcSifff`bhbmfaf`goeafdfdfkfefighbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacibSbgefdgegbgnf`b`chgbfafdfcc`ckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbbfbblb`baclb`bmfib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfccackcSifff`bhbmfaf`goeffifnfdfhbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacibSbgefdgegbgnf`b`chgbfafdfccbckcSifff`bhbmfaf`goeffifnfdfhbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfccbckcSifff`bhbmfaf`goeffifnfdfhbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacibSbgefdgegbgnf`b`chgbfafdfcccckcScg`bmc`bmfaf`goegfefdgfgaflfegefcgifjgefhbmfibkc
+ifff`bhbcg`babmc`bacibSbgefdgegbgnf`b`chgbfafdfccdckcShg`bmc`bmfaf`goegfefdgfgaflfegefhbmflb`bacibkcSifff`bhbabhg`blglg`bjbhg`babmc`bgbbfgbibSbgefdgegbgnf`b`chgbfafdfcceckc
+ifff`bhbmfaf`goedfofnfefhbmfibibSbgefdgegbgnf`b`chgbfafdfccfckcSSobjb`bdgefcgdg`begnfcgifjgefdf`bfgaflfegef`bhbfgaflfegefcg`bggifdghf`bdfifffffefbgefnfdg`bcgifjgefib`bjbob
+mf`bmc`bmfaf`goenfefgghbhclb`b`cibkcSifff`bhbmf`bmcmc`bmbacibSbgefdgegbgnf`b`chgbfafdfccgckcSifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfcchckcSifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfccickcSifff`bhbmfaf`goeafdfdfkfefighbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfdc`ckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbfbblb`bbclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdcackcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbblb`baclb`bmfib`babmc`b`cib
+bgefdgegbgnf`b`chgbfafdfdcbckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbfcfbblb`baclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdccckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfdcdckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdceckcSifff`bhbmfaf`goebgefmfoffgefhbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfdcfckcSifff`bhbmfaf`goeffifnfdfhbbbacbcccdcecfcgchcbblb`bhclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdcgckcSifff`bhbmfaf`goeafdfdfkfefighbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfdchckcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbbfcfdfefbblb`bdclb`bmfib`babmc`b`cibSbgefdgegbgnf`b`chgbfafdfdcickcSifff`bhbmfaf`goeffifnfdfhbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfec`ckcSifff`bhbmfaf`goeffifnfdfhbbbacbcccdcbblb`bdclb`bmfib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdfecackcSifff`bhbmfaf`goeffifnfdfhbbbafbfcfdfacbcccdcbblb`bhclb`bmfib`babmc`bacib
+bgefdgegbgnf`b`chgbfafdfecbckcScg`bmc`bmfaf`goegfefdgfgaflfegefcgifjgefhbmfibkcSifff`bhbcg`babmc`bdcibSbgefdgegbgnf`b`chgbfafdfeccckcShg`bmc`bmfaf`goegfefdgfgaflfegefhbmflb`bcgibkc
+ifff`bhbabhg`blglg`bmfefmfcfmf`ghbhglb`bbbbfcfdfefbblb`bdcibibSbgefdgegbgnf`b`chgbfafdfecdckcSobjb`bdgefcgdg`bifnffgaflfifdf`b`gafbgafmfcg`bjbobSifff`bhbmfaf`goegfefdgfgaflfegefhbmflb`bccib`b`blglg`bmfaf`goegfefdgfgaflfegefhbmflb`becibib
+bgefdgegbgnf`b`chgbfafdfececkcSifff`bhbmfaf`goegfefdgfgaflfegefhbmbaclb`bdcibibSbgefdgegbgnf`b`chgbfafdfecfckcSifff`bhbmfaf`goeafdfdfkfefighbbbafbfcfdfbblb`bdclb`bmbacib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfecgckcSifff`bhbmfaf`goebgefmfoffgefhbbbafbfcfdfbblb`bdclb`bmbacib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdfechckcSifff`bhbmfaf`goeffifnfdfhbbbafbfcfdfbblb`bdclb`bmbacib`bncmc`b`cib
+bgefdgegbgnf`b`chgbfafdfecickcSifff`bhbmfaf`goecgefdgfgaflfegefhbbbafbfcfdfbblb`bdclb`bmbacib`bncmc`b`cibSbgefdgegbgnf`b`chgbfafdffc`ckcSobjb`bdfofnfgbdg`bcfaflflf`bmfaf`goedfofnfeflb`blfefdg`bbfigdgefcfofdfef`befnfgfifnfef`bdfof`bifdg`bjbob
+bgefdgegbgnf`b`chgff`c`cdfkcSmgS

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list